Pular para o conteúdo principal
InicioBlogAWS

SQS vs SNS: Compreensão dos serviços de mensagens da AWS

Conheça as diferenças entre o Amazon SQS e o SNS e descubra quando usar cada serviço para criar arquiteturas de nuvem dimensionáveis.
Actualizado 23 de out. de 2024  · 15 min leer

Dominar a AWS pode ser um desafio, especialmente quando se trata de entender seus dois principais serviços: Amazon Simple Queue Service (SQS) e Amazon Simple Notification Service (SNS). 

Embora esses dois serviços sejam parte integrante das soluções de nuvem, muitas vezes eles são mal compreendidos e mal utilizados.

Neste artigo, detalharei as funções do SQS e do SNS, identificarei suas semelhanças e diferenças e demonstrarei como esses serviços podem ser usados em conjunto para criar arquiteturas de nuvem de alto desempenho.

SQS vs SNS: Resposta curta

Se você estiver com pressa, aqui estão as principais diferenças:

  • SQS é um serviço de fila de mensagens baseado em pesquisa para serviços de desacoplamento, com suporte para comunicação A2A e retenção de mensagens.
  • SNS é um serviço de notificação baseado em push para mensagens em tempo real, com suporte para comunicação A2A e A2P.

Continue lendo para obter uma explicação mais detalhada, incluindo casos de uso, diagramas de arquitetura e práticas recomendadas!

O que é o Amazon SQS?

O Amazon Simple Queue Service (SQS) é um serviço de fila de mensagens totalmente gerenciado que facilita a comunicação entre componentes de software. O SQS usa filas para desacoplar microsserviços, permitindo que você crie fluxos de trabalho assíncronos em seus aplicativos. 

O SQS envolve três componentes principais:

  • Produtores: Esses são aplicativos que enviam mensagens para a fila.
  • Filas: Uma fila armazena mensagens até que elas sejam processadas. O período de retenção dessas mensagens pode ser definido de 60 segundos a 14 dias. 
  • Consumidores: Esses são serviços que recebem as mensagens da fila. 

Diagrama de arquitetura do Amazon SQS

Diagrama da arquitetura do Amazon SQS, incluindo os principais componentes. Imagem do autor.

O SQS oferece dois tipos de filas de mensagens:

  • Filas padrão oferecem rendimento ilimitado, entrega pelo menos uma vez (ou seja, uma mensagem sempre será entregue) e melhor ordenação de esforço.
  • Filas FIFO oferecem alta taxa de transferência, processamento exatamente único e entrega primeiro a entrar, primeiro a sair (ou seja, as mensagens são recebidas na ordem exata em que são enviadas).

Para obter mais informações sobre essas filas, visite a documentação do AWS.

O Amazon SQS foi projetado com persistência de mensagens para armazenar com segurança todas as mensagens até que elas sejam processadas, garantindo que não haja perda de mensagens. Primeiro, o SQS permite várias tentativas para processar uma determinada mensagem. Se uma mensagem não puder ser processada depois de esgotadas todas as tentativas, você poderá armazenar as mensagens não processadas em umafila de cartas mortas , que poderá ser revisada e reprocessada .

Ao desacoplar os aplicativos, o Amazon SQS apresenta uma série de benefícios. Ele acomoda alta taxa de transferência de mensagens, garantindo alto desempenho mesmo com cargas de tráfego maiores. Além disso, ele oferece dimensionamento independente, garantindo que cada serviço obtenha recursos suficientes com base em suas necessidades individuais. Ele também aumenta a segurança e a durabilidade, criptografando mensagens e armazenando-as em vários servidores.

Para saber mais sobre esse sistema de filas, considere a possibilidade de conferir nosso tutorial abrangente sobre SQS.

Torne-se um engenheiro de dados

Torne-se um engenheiro de dados por meio do aprendizado avançado de Python
Comece a Aprender De Graça

O que é o Amazon SNS?

O Amazon Simple Notification Service (SNS) é um serviço de mensagens totalmente gerenciado que oferece suporte à comunicação de aplicativo para aplicativo (A2A) e de aplicativo para pessoa (A2P). Ele foi projetado para notificações em tempo real e entrega mensagens a aplicativos e usuários finais de maneira dimensionável e eficiente. 

Semelhante ao SQS, o Amazon SNS oferece suporte à persistência de mensagens, permitindo que os usuários criem filas de letras mortas para armazenar mensagens que não podem ser processadas.

O Amazon SNS usa um modelo de mensagens de publicação/assinatura (pub/sub) e é composto de três partes:

  • Editora: Um editor é um sistema que cria e envia mensagens para um tópico do SNS.
  • Tópico: Um tópico é um ponto de acesso que permite a entrega de mensagens a vários pontos de extremidade.
  • Assinante: Um assinante, ou consumidor, é um ponto de extremidade que recebe uma mensagem do tópico.

Diagrama de arquitetura do sistema Pub-sub

Diagrama de arquitetura do modelo de mensagens do SNS. Fonte da imagem: AWS

O SNS tem alto desempenho e pode enviar mensagens para vários assinantes simultaneamente. Para a comunicação A2A, o SNS pode enviar mensagens para o AWS Lambda, o Amazon Kinesis Firehose e até mesmo o Amazon SQS. Para a comunicação A2P, o SNS pode enviar mensagens diretamente aos usuários por meio de texto, e-mail ou notificações push. 

Se você quiser dominar o AWS e ser capaz de integrar muitos de seus serviços para criar soluções ideais, considere fazer o curso AWS Cloud Technology and Services

Os recursos, incluindo sistemas de alerta, arquiteturas de fan-out e notificações em tempo real, contribuem para a alta robustez e confiabilidade do Amazon SNS. Devido à sua alta taxa de transferência de mensagens e à capacidade de comunicação A2A e A2P, o SNS costuma ser um componente integral em arquiteturas orientadas por eventos.

Principais diferenças entre SQS e SNS

Para escolher entre SQS e SNS, você precisa entender bem as diferenças entre esses serviços de mensagens. Esta seção descreve os principais critérios que distinguem os dois. 

Push vs. baseado em pesquisas

O Amazon SQS usa um sistema de sondagem em que os consumidores pesquisam periodicamente a fila para verificar se há novas mensagens.

O Amazon SNS, um sistema baseado em push, envia automaticamente mensagens aos assinantes assim que elas são publicadas em um tópico.

Tipos de destinatários

O Amazon SQS suporta apenas comunicação A2A, permitindo que as mensagens sejam enviadas para outros serviços do AWS, como AWS EC2, AWS Lambda, AWS RDS e AWS Redshift. 

O Amazon SNS suporta comunicação A2A e A2P, enviando mensagens para serviços AWS (por exemplo, AWS S3, AWS EC2) e contatos de usuários (por exemplo, SMS e e-mail) como assinantes.

Retenção de mensagens

O Amazon SQS pode armazenar mensagens por até 14 dias, permitindo que os consumidores tenham tempo suficiente para processá-las. Por outro lado, o Amazon SNS não retém nenhuma mensagem, entregando-as aos assinantes assim que são publicadas.

Modelo de entrega de mensagens

O Amazon SQS usa um modelo de um para um, em que apenas um consumidor processa cada mensagem. Mesmo que vários consumidores busquem mensagens ao mesmo tempo, apenas um consumidor receberá uma determinada mensagem. Enquanto um determinado consumidor processa uma mensagem, o SQS utiliza o recurso de tempo limite de visibilidade para tornar essa mensagem invisível para outros consumidores .

O Amazon SNS oferece suporte a um padrão de fan-out, em que a mesma mensagem em um tópico é enviada a todos os assinantes simultaneamente. Esses assinantes processam a mensagem recebida de forma independente.

Loteamento

O Amazon SQS permite que os usuários enviem mensagens em lote, o que implica o envio de mensagens aos consumidores em grupos. O tamanho do lote pode ser configurado no AWS. 

O Amazon SNS não oferece suporte a lotes, permitindo apenas o processamento de uma mensagem por vez. 

A tabela a seguir resume essas principais diferenças:

Critérios

Amazon SQS

Amazon SNS

Push versus baseado em pesquisa

Baseado em pesquisas: Os consumidores pesquisam a fila em busca de novas mensagens

Baseado em push: Envio automático de mensagens aos assinantes 

Tipos de destinatários

Oferece suporte à comunicação A2A

Oferece suporte à comunicação A2A e A2P

Retenção de mensagens

Armazena mensagens por até 14 dias

Ele não armazena mensagens

Modelo de entrega de mensagens

Oferece suporte a mensagens individuais

Oferece suporte a mensagens fan-out (um para muitos)

Loteamento

Suporta o envio de mensagens em lote

Ele não oferece suporte ao envio de mensagens em lote

Quando usar o SQS

O SQS é a opção preferida para uma arquitetura de nuvem quando o sistema de entrega de mensagens precisa:

  • Um sistema de sondagem - os consumidores podem escolher quando sondar as mensagens.
  • Processamento assíncrono - Os serviços podem processar mensagens de forma independente.
  • Retenção de mensagens - As mensagens podem ser armazenadas por até 14 dias.
  • Entrega garantida de mensagens - nenhuma mensagem na fila é perdida.
  • Agrupamento - Os serviços processam mensagens em grupos.

Considere o seguinte exemplo da vida real: Uma plataforma de comércio eletrônico deseja processar os pedidos dos clientes, o que implica armazenar os dados referentes ao pedido em um banco de dados RDS. 

Diagrama de arquitetura de um sistema que usa o Amazon SQS para processar dados

Diagrama de arquitetura de um sistema que usa o Amazon SQS para processar dados - imagem do autor.

Nesse fluxo de trabalho, os clientes enviam pedidos, que entram na fila do SQS. A função lambda (ou seja, o consumidor) pesquisa a fila, recebe as mensagens e grava os dados no banco de dados RDS.

Há várias vantagens em usar o SQS para esse caso de uso. Como o SQS desacopla o processo, os clientes podem enviar pedidos mesmo quando o banco de dados não estiver operacional. Como a SQS oferece entrega pelo menos uma vez, todos os pedidos serão processados sem risco de perda de mensagens. Por fim, o SQS oferece suporte a lotes, o que permite que as mensagens sejam processadas em grupos, aumentando assim a eficiência.

O Amazon SNS não funcionaria aqui, pois não retém mensagens e, em vez disso, enviaria imediatamente as mensagens para a função lambda, independentemente do status do banco de dados. Portanto, se o banco de dados ficar indisponível, as mensagens poderão ser perdidas. Além disso, como o SNS não oferece suporte a lotes, ele processaria as mensagens uma de cada vez, o que tornaria a solução menos ideal. 

Quando usar o SNS

O SNS é a opção preferida para uma arquitetura de nuvem quando o sistema de entrega de mensagens precisa:

  • Notificações em tempo real - As mensagens são enviadas imediatamente aos assinantes com baixa latência.
  • Distribuição em leque - Vários assinantes podem receber a mesma mensagem simultaneamente.
  • Vários assinantes de notificação - As mensagens podem ser enviadas para aplicativos (por exemplo, AWS Lambda) e usuários finais (por exemplo, e-mail).

Considere um cenário em que um desenvolvedor monitora o uso da CPU de sua instância do EC2. Para garantir que o uso permaneça baixo, eles querem monitorar a métrica de utilização da CPU no Cloudwatch e receber uma notificação sempre que ela exceder um determinado limite.

O Amazon SNS ajudaria muito o desenvolvedor a criar uma solução, pois ele envia notificações em tempo real e oferece suporte aos processos A2A e A2P. Usando seu padrão de fan-out, o SNS pode enviar imediatamente notificações para funções lambda que podem trabalhar para aliviar o problema e para o desenvolvedor por e-mail para informá-lo sobre o alarme disparado. 

Diagrama de arquitetura de um sistema que usa o Amazon SNS para monitoramento

Diagrama de arquitetura de um sistema que usa o Amazon SNS para monitoramento - imagem do autor. 

O Amazon SQS seria uma ferramenta menos eficaz para esse trabalho devido à sua retenção de mensagens. Se os desenvolvedores desejarem responder a violações de limites, eles precisarão receber alertas em tempo real, o que não seria possível se as mensagens fossem armazenadas em filas. Além disso, como o SQS usa um sistema de sondagem, as mensagens são acessadas somente quando sondadas pelos consumidores, o que aumenta a latência. 

Uso conjunto de SQS e SNS: O melhor dos dois mundos

O Amazon SQS e o Amazon SNS têm recursos e características distintas, mas os usuários do AWS podem obter o melhor dos dois serviços combinando-os para criar um sistema de mensagens eficiente, escalável e tolerante a falhas. 

A integração dos dois serviços é fácil, pois as filas do SQS podem ser assinantes de tópicos do SNS. Portanto, o SNS pode enviar notificações em tempo real para as filas do SQS, após o que o SQS desacoplará todos os processos e garantirá a entrega da mensagem. 

Considere o exemplo a seguir: Um desenvolvedor do AWS está criando um sistema de envio de documentos que extrai conteúdo de documentos enviados por usuários finais. Esse sistema deve executar duas tarefas para qualquer documento enviado:

  1. Processe o documento usando um aplicativo de processamento de texto.
  2. Envie um e-mail de confirmação para o usuário final.

O desenvolvedor pode combinar SQS e SNS para criar uma solução eficiente:

Diagrama de arquitetura de um sistema que usa SNS em conjunto com SQS

Diagrama de arquitetura de um sistema que usa SNS em conjunto com SQS - imagem do autor.

Nesse fluxo de trabalho, uma mensagem é enviada para o tópico do SNS quando um usuário envia um documento, que imediatamente envia a mensagem para a função lambda e para a fila SQS. A função lambda trabalha no envio do e-mail de confirmação, enquanto a fila SQS tratará as mensagens, que serão pesquisadas pela instância do EC2 que hospeda o aplicativo de processamento de texto. 

Conclusão

O Amazon SQS e o SNS são serviços essenciais no ecossistema do AWS, cada um oferecendo vantagens distintas. O SNS oferece notificações em tempo real, enquanto o SQS oferece processamento confiável de mensagens. 

A solução ideal de mensagens para um problema pode incorporar SNS, SQS ou ambos. Ao compreender os prós e contras de ambos os serviços, os desenvolvedores da AWS podem criar uma solução de mensagens que atenda às suas necessidades comerciais exclusivas, garantindo eficiência, escalabilidade e resiliência.

Se você quiser levar seu conhecimento sobre AWS para o próximo nível, considere fazer esses dois cursos avançados:

Você também pode se preparar para a certificação AWS Cloud Practitioner com nossa trilha de habilidades:

Obtenha a certificação para a função de engenheiro de dados dos seus sonhos

Nossos programas de certificação ajudam você a se destacar e a provar que suas habilidades estão prontas para o trabalho para possíveis empregadores.

Obtenha Sua Certificação
Timeline mobile.png

Perguntas frequentes

Posso integrar o Amazon SQS e o SNS a outros serviços do AWS?

Sim, tanto o SQS quanto o SNS se integram perfeitamente a vários serviços do AWS. Por exemplo, você pode acionar funções do AWS Lambda com mensagens do SQS ou SNS, enviar notificações para o Amazon S3 quando novos arquivos forem carregados ou usar o Amazon CloudWatch para monitorar o desempenho do SQS e do SNS.

Como posso garantir a confiabilidade da entrega de mensagens com o SQS e o SNS?

Com o SQS, você pode usar filas de letras mortas (DLQs) para capturar mensagens que não são processadas após várias tentativas, garantindo que nenhum dado seja perdido. Para o SNS, você pode configurar novas tentativas ou mecanismos de fallback no caso de falha na entrega de mensagens, como o uso do SQS como assinante de backup de um tópico do SNS.

Posso combinar SQS e SNS em uma única arquitetura?

Sim, o SQS e o SNS podem ser combinados para criar uma arquitetura de mensagens híbrida. Por exemplo, o SNS pode enviar notificações em tempo real para vários consumidores, inclusive filas SQS. Isso permite que você se beneficie das notificações em tempo real (SNS) e do processamento confiável e atrasado (SQS).

Quais são os modelos de preços do SQS e do SNS?

Tanto o SQS quanto o SNS seguem um modelo de preço de pagamento por uso. O SQS cobra com base no número de solicitações, transferência de dados e recursos adicionais, como polling longo. As cobranças do SNS são baseadas no número de mensagens publicadas e no método de entrega (por exemplo, e-mail, SMS ou pontos de extremidade HTTP). Monitorar o uso para controlar os custos é importante, especialmente com aplicativos de alta frequência.

Como posso otimizar o desempenho ao usar o SQS e o SNS?

Para otimizar o desempenho, você pode usar o batching com o SQS para enviar e processar várias mensagens de uma só vez, reduzindo as solicitações e os custos da API. Com o SNS, garanta que seus assinantes possam lidar com alta taxa de transferência, configurando o dimensionamento automático para seus serviços de processamento (como Lambda ou EC2) para gerenciar picos de tráfego com eficiência.

Temas

Saiba mais sobre a AWS com estes cursos!

Certificação disponível

Course

Introdução à AWS

2 hr
13.3K
Descubra o mundo do Amazon Web Services (AWS) e entenda por que ele está na vanguarda da computação em nuvem.
See DetailsRight Arrow
Start Course
Ver maisRight Arrow
Relacionado

blog

As 20 principais perguntas e respostas para entrevistas sobre o AWS Lambda em 2024

O AWS Lambda é um serviço de computação sem servidor e um assunto cada vez mais comum em entrevistas técnicas. Quer você seja novo na computação em nuvem ou um profissional experiente, é essencial entender o AWS Lambda.

Zoumana Keita

12 min

blog

AWS Certified Cloud Practitioner: um guia completo

Saiba mais sobre a certificação e o exame AWS Certified Cloud Practitioner com nosso guia completo. Descubra dicas, recursos e estratégias para garantir que você tenha sucesso.
Srujana Maddula's photo

Srujana Maddula

27 min

blog

Certificações da AWS em 2024: Níveis, custos e como passar

Explore nosso guia completo sobre as certificações da AWS, incluindo qual é a melhor para você e como passar nos exames. Além disso, descubra os recursos do DataCamp para ajudar!
Adel Nehme's photo

Adel Nehme

20 min

tutorial

Tutorial de armazenamento do AWS: Uma introdução prática ao S3 e ao EFS

O guia completo para armazenamento de arquivos no AWS com S3 e EFS.
Zoumana Keita 's photo

Zoumana Keita

16 min

tutorial

Primeiros passos com o AWS Athena: Um guia prático para iniciantes

Este guia prático ajudará você a começar a usar o AWS Athena. Explore sua arquitetura e seus recursos e saiba como consultar dados no Amazon S3 usando SQL.
Tim Lu's photo

Tim Lu

28 min

tutorial

O guia completo para machine learning na AWS com o Amazon SageMaker

Este tutorial abrangente ensina você a usar o AWS SageMaker para criar, treinar e implantar modelos de machine learning. Nós guiamos você por todo o fluxo de trabalho, desde a configuração do seu ambiente AWS e a criação de uma instância de notebook do SageMaker até a preparação de dados, modelos de treinamento e sua implementação como endpoints.
Bex Tuychiev's photo

Bex Tuychiev

25 min

See MoreSee More