Padrão de fornecimento de eventos
O padrão de fornecimento de eventos é normalmente usado com o Padrão CQRS para separar as cargas de trabalho de leitura das de gravação e otimizar o desempenho, a escalabilidade e a segurança. Os dados são armazenados como uma série de eventos, em vez de atualizações diretas nos armazenamentos de dados. Os microsserviços reproduzem eventos de um armazenamento de eventos para calcular o estado apropriado de seus próprios armazenamentos de dados. O padrão fornece visibilidade ao estado atual do aplicativo e contexto adicional de como o aplicativo chegou a esse estado. O padrão de fornecimento de eventos funciona de forma eficaz com o padrão CQRS porque os dados podem ser reproduzidos para um evento específico, mesmo que os armazenamentos de dados de comando e consulta tenham esquemas diferentes.
Ao escolher esse padrão, você pode identificar e reconstruir o estado do aplicativo em qualquer momento. Isso produz uma trilha de auditoria persistente e facilita a depuração. No entanto, os dados acabam se tornando consistentes e isso pode não ser apropriado para alguns casos de uso.
Esse padrão pode ser implementado usando o Amazon Kinesis Data Streams ou o Amazon EventBridge.
Implementação do Amazon Kinesis Data Streams
Na ilustração a seguir, o Kinesis Data Streams é o principal componente de um armazenamento de eventos centralizado. O armazenamento de eventos captura alterações da aplicação como eventos e as persiste no Amazon Simple Storage Service (Amazon S3).
O fluxo de trabalho consiste nas seguintes etapas:
-
Quando os microsserviços “/withdraw” ou “/credit” sofrem uma mudança no estado do evento, eles publicam um evento gravando uma mensagem no Kinesis Data Streams.
-
Outros microsserviços, como “/balance” ou “/creditLimit”, leem uma cópia da mensagem, filtram por relevância e a encaminham para processamento adicional.
Implementação do Amazon EventBridge
A arquitetura na ilustração a seguir utiliza o EventBridge. O EventBridge é um serviço de tecnologia sem servidor que usa eventos para conectar componentes do aplicação, o que facilita a criação de aplicações escaláveis orientadas por eventos. A arquitetura orientada por eventos é um estilo de criação de sistemas de software com acoplamento fraco que funcionam juntos emitindo e respondendo a eventos. O EventBridge fornece um barramento de eventos padrão para eventos publicados por serviços AWS e você também pode criar um barramento de eventos personalizado para barramentos específicos do domínio.
O fluxo de trabalho consiste nas seguintes etapas:
-
Os eventos “OrderPlaced” são publicados pelo microsserviço “Orders” no barramento de eventos personalizado.
-
Os microsserviços que precisam agir após a realização de um pedido, como o microsserviço “/route”, são iniciados por regras e metas.
-
Esses microsserviços geram uma rota para enviar o pedido ao cliente e emitir um evento “RouteCreated”.
-
Os microsserviços que precisam tomar medidas adicionais também são iniciados pelo evento “RouteCreated”.
-
Os eventos são enviados para um arquivo de eventos (por exemplo, o arquivo do EventBridge) para que possam ser reproduzidos para reprocessamento, se necessário.
-
Eventos históricos de pedidos são enviados a uma nova fila do Amazon SQS (fila de repetição) para reprocessamento se necessário.
-
Se os alvos não forem iniciados, os eventos afetados serão colocados em uma fila de mensagens não entregues (DLQ) para análise e reprocessamento adicionais.
Você deve considerar o uso desse padrão se:
-
Os eventos forem usados para reconstruir completamente o estado do aplicativo.
-
Você exige que os eventos sejam reproduzidos no sistema e que o estado de uma aplicação possa ser determinado a qualquer momento.
-
Você desejar poder reverter eventos específicos sem precisar começar com um estado de aplicativo em branco.
-
Seu sistema requerer um fluxo de eventos que possa ser facilmente serializado para criar um log automatizado.
-
Seu sistema exigir operações de leitura pesadas, mas for leve em operações de gravação; operações de leitura pesadas podem ser direcionadas para um banco de dados na memória que é mantido atualizado com o fluxo de eventos.
Importante
Se você usar o padrão de fornecimento de eventos, deverá implantar o Padrão Saga para manter a consistência de dados nos microsserviços.