fbpx

Amazon SQS – Serviço de Fila Simples da Amazon

aws sqs1
Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no whatsapp

O Amazon SQS é um serviço de enfileiramento de mensagens rápido, confiável, escalável e totalmente gerenciado. O Amazon SQS torna mais simples e econômico desacoplar os componentes de um aplicativo em nuvem.

Você pode usar o Amazon SQS para transmitir qualquer volume de dados, em qualquer nível de taxa de transferência, sem perder mensagens ou exigir que outros serviços estejam disponíveis continuamente.

Com o Amazon SQS, você pode descarregar a carga administrativa de operar e dimensionar um cluster de mensagens altamente disponível, pagando um preço baixo apenas pelo que usar.

Usando o Amazon SQS, você pode armazenar mensagens de aplicativos em infraestrutura confiável e escalável, permitindo mover dados entre componentes distribuídos para executar tarefas diferentes, conforme necessário.

Uma fila do Amazon SQS é basicamente um buffer entre os componentes do aplicativo que recebem dados e os componentes que processam os dados no seu sistema. Se os servidores de processamento não puderem processar o trabalho com rapidez suficiente (talvez devido a um aumento no tráfego), o trabalho será colocado na fila para que os servidores de processamento possam acessá-lo quando estiverem prontos.

Isso significa que o trabalho não é perdido devido a recursos insuficientes.

O Amazon SQS garante a entrega de cada mensagem pelo menos uma vez e oferece suporte a vários leitores e gravadores interagindo com a mesma fila. Uma única fila pode ser usada simultaneamente por muitos componentes de aplicativos distribuídos, sem a necessidade de esses componentes se coordenarem entre si para compartilhar a fila.

Embora na maioria das vezes cada mensagem seja entregue ao seu aplicativo exatamente uma vez, você deve projetar seu sistema para ser idempotente (ou seja, ele não deve ser afetado adversamente se processar a mesma mensagem mais de uma vez).

O Amazon SQS foi projetado para estar altamente disponível e entregar mensagens de maneira confiável e eficiente; no entanto, o serviço não garante a entrega de mensagens First In, First Out (FIFO).

Para muitos aplicativos distribuídos, cada mensagem pode ser independente e, se todas as mensagens forem entregues, o pedido não será importante. Se o seu sistema exigir que a ordem seja preservada, você poderá colocar as informações de seqüência em cada mensagem para poder reordenar as mensagens quando elas forem recuperadas da fila.

 

Filas de atraso e Limites de Tempo de Visibilidade

As filas de atraso permitem adiar a entrega de novas mensagens em uma fila por um número específico de segundos. Se você criar uma fila de atraso, qualquer mensagem que você enviar para essa fila ficará invisível para os consumidores durante o período de atraso.

Para criar uma fila de atraso, use CreateQueue e defina o atributo DelaySeconds para qualquer valor entre 0 e 900 (15 minutos).

Você também pode transformar uma fila existente em uma fila de atraso usando SetQueueAttributes para definir o atributo DelaySeconds da fila. O valor padrão para DelaySeconds é 0.

As filas de atraso são semelhantes aos tempos limite de visibilidade, pois os dois recursos tornam as mensagens indisponíveis para os consumidores por um período específico. A diferença é que uma fila de atraso oculta uma mensagem quando é adicionada pela primeira vez à fila, enquanto um tempo limite de visibilidade oculta uma mensagem somente depois que a mensagem for recuperada da fila.

Quando uma mensagem está na fila, mas não está atrasada nem com o tempo limite de visibilidade, ela é considerada “em voo”. Você pode receber até 120.000 mensagens em voo a qualquer momento. O Amazon SQS suporta o tempo limite máximo de visibilidade de até 12 horas.

Taxa de transferência separada da latência Como muitos outros serviços da AWS Cloud, o Amazon SQS é acessado através da resposta HTTP request, e uma resposta de solicitação típica do Amazon SQS leva um pouco menos de 20ms do Amazon Elastic Compute Cloud (Amazon EC2).

Isso significa que, a partir de um único encadeamento, é possível emitir, em média, mais de 50 solicitações de API (Application Programming Interface) por segundo (um pouco menos para solicitações de API em lote, mas essas funcionam mais).

A taxa de transferência é horizontal, portanto, quanto mais threads e hosts você adicionar, maior será a taxa de transferência. Usando esse modelo de escala, alguns clientes da AWS têm filas que processam milhares de mensagens a cada segundo.

 

Operações de fila, IDs Exclusivos e Metadados

 

As operações definidas para as filas do Amazon SQS são CreateQueue, ListQueues, DeleteQueue, SendMessage, SendMessageBatch, ReceiveMessage, DeleteMessage, DeleteMessageBatch, PurgeQueue, ChangeMessageVisibility, ChangeMessageVisibilityBatch, SetQueueAttributes, GetQueueAttributes, GetQueueUrl, ListDeadLetterSourceQueues, AddPermission, e RemovePermission. Somente o proprietário da conta da AWS ou uma identidade da AWS que recebeu as permissões apropriadas podem executar operações.

Suas mensagens são identificadas por meio de um ID exclusivo globalmente que o Amazon SQS retorna quando a mensagem é entregue na fila. O ID não é necessário para executar outras ações na mensagem, mas é útil para rastrear se uma mensagem específica na fila foi recebida.

Quando você recebe uma mensagem da fila, a resposta inclui um identificador de recebimento, que você deve fornecer ao excluir a mensagem.

Identificadores de fila e mensagem O Amazon SQS usa três identificadores com os quais você precisa se familiarizar: URLs da fila, IDs de mensagens e identificadores de recebimento.

Ao criar uma nova fila, você deve fornecer um nome de fila exclusivo no escopo de todas as suas filas. O Amazon SQS atribui a cada fila um identificador chamado URL da fila, que inclui o nome da fila e outros componentes que o Amazon SQS determina.

Sempre que desejar executar uma ação em uma fila, você deve fornecer o URL da fila. O Amazon SQS atribui a cada mensagem um ID exclusivo que ele retorna para você na resposta SendMessage. Esse identificador é útil para identificar mensagens, mas observe que, para excluir uma mensagem, você precisa do identificador de recebimento da mensagem em vez do ID da mensagem.

O comprimento máximo de um ID de mensagem é de 100 caracteres.

Cada vez que você recebe uma mensagem de uma fila, recebe um identificador de recibo para essa mensagem.

O identificador está associado ao ato de receber a mensagem, não à própria mensagem. Como afirmado anteriormente, para excluir a mensagem ou alterar a visibilidade da mensagem, você deve fornecer o identificador de recebimento e não o ID da mensagem.

Isso significa que você deve sempre receber uma mensagem antes de poder excluí-la (ou seja, não é possível colocar uma mensagem na fila e depois rechamar). O comprimento máximo de um identificador de recebimento é 1.024 caracteres.

 

Atributos da Mensagem

O Amazon SQS fornece suporte para atributos de mensagem. Os atributos da mensagem permitem fornecer itens de metadados estruturados (como registros de data e hora, dados geoespaciais, assinaturas e identificadores) sobre a mensagem.

Os atributos da mensagem são opcionais e separados, mas enviados junto com o corpo da mensagem. O destinatário da mensagem pode usar essas informações para ajudar a decidir como lidar com a mensagem sem precisar processar o corpo da mensagem primeiro.

Cada mensagem pode ter até 10 atributos. Para especificar atributos de mensagem, você pode usar o AWS Management Console, o AWS Software Development Kits (SDKs) ou uma API de consulta.

 

Long Polling

Quando seu aplicativo consulta a fila do Amazon SQS por mensagens, ele chama a função ReceiveMessage. ReceiveMessage verificará a existência de uma mensagem na fila e retornará imediatamente, com ou sem uma mensagem. Se o seu código fizer chamadas periódicas para a fila, esse padrão será suficiente.

Se o seu cliente SQS é apenas um loop que verifica repetidamente novas mensagens, no entanto, esse padrão se torna problemático, pois as chamadas constantes para ReceiveMessage queimam ciclos da CPU e amarram um encadeamento.

Nessa situação, você desejará usar uma pesquisa longa. Com uma pesquisa longa, você envia um argumento WaitTimeSeconds para ReceiveMessage de até 20 segundos. Se não houver mensagem na fila, a chamada aguardará até WaitTimeSeconds para que uma mensagem apareça antes de retornar.

Se uma mensagem aparecer antes do tempo expirar, a chamada retornará a mensagem imediatamente. A pesquisa longa reduz drasticamente a quantidade de carga no seu cliente.

Filas de Mensagens não Entregues

O Amazon SQS fornece suporte para filas de mensagens não entregues. Uma fila de mensagens não entregues é uma fila que outras filas (de origem) podem direcionar para enviar mensagens que, por algum motivo, não puderam ser processadas com êxito.

Um benefício principal do uso de uma fila de devoluções é a capacidade de marginalizar e isolar as mensagens processadas sem êxito.

Você pode analisar todas as mensagens enviadas para a fila de devoluções para tentar determinar a causa da falha. As mensagens podem ser enviadas e recebidas de uma fila de devoluções, como qualquer outra fila do Amazon SQS. Você pode criar uma fila de devoluções a partir da API do Amazon SQS e do console do Amazon SQS.

 

Controle de Acesso

Embora o IAM possa ser usado para controlar as interações de diferentes identidades da AWS com filas, geralmente há momentos em que você deseja expor filas para outras contas. Essas situações podem incluir:

  • Você deseja conceder a outra conta da AWS um tipo específico de acesso à sua fila (por exemplo, SendMessage).
  • Você deseja conceder acesso a outra conta da AWS em sua fila por um período específico.
  • Você deseja conceder acesso a outra conta da AWS em sua fila somente se as solicitações vierem de suas instâncias do Amazon EC2.
  • Você deseja negar o acesso de outra conta da AWS à sua fila.

Embora a coordenação estreita entre contas possa permitir esses tipos de ações por meio do uso de funções do IAM, esse nível de coordenação é frequentemente inviável.

O Amazon SQS Access Control permite atribuir políticas a filas que concedem interações específicas a outras contas sem que essa conta precise assumir funções do IAM da sua conta. Essas políticas são escritas no mesmo idioma JSON do IAM.

 

Durabilidade e Latência

O Amazon SQS não retorna com êxito uma chamada da API SendMessage até que a mensagem seja armazenada de forma durável no Amazon SQS. Isso torna o modelo de programação muito simples, sem dúvida sobre a segurança das mensagens, diferente da situação de um modelo de mensagens assíncronas.

Se você não precisar de um sistema de mensagens durável, poderá criar um lote assíncrono do lado do cliente sobre as bibliotecas do Amazon SQS que atrasa o enfileiramento de mensagens no Amazon SQS e transmite um conjunto de mensagens em um lote. Esteja ciente de que, com uma abordagem de lote do lado do cliente, você poderá perder mensagens quando o processo ou o host do cliente morrer por qualquer motivo.

Comentários do Facebook

Conteúdos relacionados