Padrão publicar/assinar - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Padrão publicar/assinar

Intenção

O padrão publicar/assinar, também conhecido como padrão pub-ass, é um padrão de mensagens que separa o remetente da mensagem (publicador) dos destinatários interessados (assinantes). Esse padrão implementa comunicações assíncronas publicando mensagens ou eventos por meio de um intermediário conhecido como agente de mensagens ou roteador (infraestrutura de mensagens). O padrão publicar/assinar aumenta a escalabilidade e a capacidade de resposta dos remetentes, transferindo a responsabilidade da entrega da mensagem para a infraestrutura da mensagem, para que o remetente possa se concentrar no processamento principal da mensagem.

Motivação

Em arquiteturas distribuídas, os componentes do sistema frequentemente precisam fornecer informações a outros componentes à medida que os eventos ocorrem dentro do sistema. O padrão publicar/assinar separa as preocupações para que os aplicativos possam se concentrar em seus recursos principais, enquanto a infraestrutura de mensagens lida com responsabilidades de comunicação, como roteamento de mensagens e entrega confiável. O padrão publicar/assinar permite que mensagens assíncronas dissociem o publicador e os assinantes. Os publicadores também podem enviar mensagens sem o conhecimento dos assinantes.

Aplicabilidade

Use o padrão publicar/assinar quando:

  • O processamento paralelo é necessário se uma única mensagem tiver fluxos de trabalho diferentes.

  • Não são necessárias a transmissão de mensagens para vários assinantes e respostas em tempo real dos destinatários.

  • O sistema ou aplicativo pode tolerar uma consistência eventual dos dados ou do estado.

  • O aplicativo ou componente precisa se comunicar com outros aplicativos ou serviços que possam usar linguagens, protocolos ou plataformas diferentes.

Problemas e considerações

  • Disponibilidade do assinante: o publicador não sabe se os assinantes estão recebendo, e talvez não estejam. As mensagens publicadas são de natureza transitória e podem resultar no cancelamento se os assinantes não estiverem disponíveis.

  • Garantia de entrega de mensagens: normalmente, o padrão publicar/assinar não pode garantir a entrega de mensagens para todos os tipos de assinantes, embora determinados serviços, como o Amazon Simple Notification Service (Amazon SNS), possam fornecer entrega exatamente uma vez para alguns subconjuntos de assinantes.

  • Tempo de vida (TTL): as mensagens têm vida útil e expiram se não forem processadas dentro desse período. Considere adicionar as mensagens publicadas a uma fila para que elas possam persistir e garantir o processamento além do período TTL.

  • Relevância da mensagem: os produtores podem definir um intervalo de tempo para a relevância como parte dos dados da mensagem, e a mensagem pode ser descartada após essa data. Considere fazer com que os consumidores examinem essas informações antes de decidir como processar a mensagem.

  • Consistência eventual: há um atraso entre o momento em que a mensagem é publicada e o momento em que é consumida pelo assinante. Isso pode fazer com que os armazenamentos de dados do assinante se tornem eventualmente consistentes quando for necessária uma consistência forte. A consistência eventual também pode ser um problema quando produtores e consumidores precisam de interação quase em tempo real.

  • Comunicação unidirecional: o padrão publicar/assinar é considerado unidirecional. Os aplicativos que exigem mensagens bidirecionais com um canal de assinatura de retorno devem considerar o uso de um padrão de solicitação-resposta se for necessária uma resposta síncrona.

  • Ordem das mensagens: a ordem das mensagens não é garantida. Se os consumidores precisarem de mensagens solicitadas, recomendamos que você use os tópicos FIFO do Amazon SNS para garantir o pedido.

  • Duplicação de mensagens: com base na infraestrutura de mensagens, mensagens duplicadas podem ser entregues aos consumidores. Os consumidores devem ser projetados para serem idempotentes para lidar com o processamento de mensagens duplicadas. Como alternativa, use os tópicos FIFO do Amazon SNS para garantir uma entrega exata uma vez.

  • Filtragem de mensagens: os consumidores geralmente estão interessados apenas em um subconjunto das mensagens publicadas por um publicador. Forneça mecanismos para permitir que os assinantes filtrem ou restrinjam as mensagens que recebem fornecendo tópicos ou filtros de conteúdo.

  • Reprodução de mensagens: os recursos de reprodução de mensagens podem depender da infraestrutura de mensagens. Você também pode fornecer implementações personalizadas, dependendo do caso de uso.

  • Filas de mensagens não entregues: em um sistema postal, um escritório de mensagens não entregues é uma instalação para processar correspondências não entregues. Em mensagens pub/ass, uma fila de mensagens não entregues (DLQ) é uma fila para mensagens que não podem ser entregues a um endpoint assinante.

Implementação

Arquitetura de alto nível

Em um padrão publicar/assinar, o subsistema de mensagens assíncronas conhecido como agente de mensagens ou roteador acompanha as assinaturas. Quando um produtor publica um evento, a infraestrutura de mensagens envia uma mensagem para cada consumidor. Depois que uma mensagem é enviada aos assinantes, ela é removida da infraestrutura de mensagens para que não possa ser reproduzida e os novos assinantes não vejam o evento. Os agentes de mensagens ou roteadores separam o produtor de eventos dos consumidores de mensagens da seguinte forma:

  • Fornecer um canal de entrada para o produtor publicar eventos que são empacotados em mensagens, usando um formato de mensagem definido.

  • Criação de um canal de saída individual por assinatura. Uma assinatura é a conexão do consumidor, na qual ele recebe mensagens de eventos associadas a um canal de entrada específico.

  • Copiar mensagens do canal de entrada para o canal de saída para todos os consumidores quando o evento for publicado.

Message broker diagram showing producer, channel, subscriptions, and consumers in a publish-subscribe model.

Implementação usando serviços da AWS

Amazon SNS

O Amazon SNS é um serviço de publicador-assinante totalmente gerenciado que fornece mensagens de aplicação para aplicação (A2A) para dissociar aplicações distribuídas. Ele também fornece mensagens de aplicação para pessoa (A2P) para enviar SMS, e-mail e outras notificações push.

O Amazon SNS fornece dois tipos de tópicos: padrão e primeiro a entrar, primeiro a sair (FIFO).

  • Os tópicos padrão oferecem suporte a um número ilimitado de mensagens por segundo e oferecem o melhor esforço para ordenação e desduplicação.

    Diagram showing message flow through numbered components, with arrows indicating direction.
  • Os tópicos do FIFO fornecem ordenação e desduplicação rigorosas e oferecem suporte a até 300 mensagens por segundo ou 10 MB por segundo por tópico do FIFO (o que ocorrer primeiro).

    Tópicos de FIFO no Amazon SNS

A ilustração a seguir mostra como você pode usar o Amazon SNS para implementar o padrão publicar/assinar. Depois que um usuário faz um pagamento, uma mensagem do SNS é enviada pela função Payments do Lambda para o tópico Payments do SNS. Este tópico do SNS tem três assinantes. Cada assinante recebe uma cópia da mensagem e a processa.

Como usar o Amazon SNS para implementar o padrão publicar/assinar.

Amazon EventBridge

Você pode usar o Amazon EventBridge quando precisar de um roteamento mais complexo de mensagens de vários produtores em diferentes protocolos para consumidores assinantes ou de assinaturas diretas e dispersas (fanout). O EventBridge também oferece suporte a roteamento, filtragem, sequenciamento e divisão ou agregação com base em conteúdo. Na ilustração a seguir, o EventBridge é usado para criar uma versão do padrão publicar/assinar na qual os assinantes são definidos usando regras de eventos. Depois que um usuário faz um pagamento, a função Payments do Lambda envia uma mensagem para o EventBridge usando o barramento de eventos padrão com base em um esquema personalizado que tem três regras apontando para destinos diferentes. Cada microsserviço processa as mensagens e executa as ações necessárias.

Como usar o Amazon EventBridge para implementar o padrão publicar/assinar.

Workshop

Referências do blog

Conteúdo relacionado