Arquiteturas orientadas a eventos

Uma arquitetura orientada a eventos é um padrão de design de software em que os microsserviços reagem a alterações no estado, chamados de eventos. Os eventos podem conter um estado (como o preço de um item ou um endereço de entrega) ou eventos podem ser identificadores (uma notificação de que um pedido foi recebido ou enviado, por exemplo). Os eventos acionam microsserviços que funcionam juntos para atingir um objetivo comum, mas não precisam saber nada sobre o outro, exceto o formato do evento. Embora funcionem juntos, cada microsserviço pode aplicar uma lógica de negócios diferente e emitir seus próprios eventos de saída.

Um evento tem as seguintes características:

  • É um registro de algo que aconteceu.
  • Ele captura um fato imutável que não pode ser alterado ou excluído.
  • Isso ocorre independentemente de o serviço aplicar ou não qualquer lógica ao consumi-lo.
  • Ele pode ser mantido indefinidamente, em grande escala e consumido quantas vezes forem necessárias.

Em um sistema orientado a eventos, os eventos são gerados porprodutores de eventos , ingerido e filtrado por umroteador de eventos (ou agente) e fazer uma distribuição para osconsumidores de eventos (ou coletores) Os eventos são encaminhados para os assinantes definidos por um ou mais acionadores correspondentes. Esses três componentes (produtores de eventos, roteador de eventos, consumidores de eventos) são separados e podem ser implantados, atualizados e escalonados de maneira independente:

Agentes e assinantes do evento

O roteador do evento vincula os diferentes serviços e é o meio pelo qual as mensagens são enviadas e recebidas. Ele executa uma resposta ao evento original gerado por um produtor de eventos e a envia para os consumidores apropriados. Os eventos são tratados de maneira assíncrona e os resultados são decididos quando um serviço reage a um evento ou é afetado por ele, como no diagrama a seguir de um fluxo de eventos muito simplificado:

Arquitetura orientada a eventos

Quando usar arquiteturas orientadas a eventos

Considere os seguintes usos ao projetar seu sistema.

  • Para monitorar e receber alertas para verificar anomalias ou alterações em buckets de armazenamento, tabelas de bancos de dados, máquinas virtuais ou outros recursos.
  • Fazer o fanout de um único evento para vários consumidores. O roteador do evento enviará o evento para todos os consumidores apropriados, sem que você precise criar um código personalizado. Cada serviço pode processar o evento em paralelo, mas de maneira diferente.
  • Para fornecer interoperabilidade entre diferentes pilhas de tecnologia, mantendo a independência de cada pilha.
  • Coordenar sistemas e equipes que operam e implantam em diferentes regiões e contas. É possível reorganizar facilmente a propriedade de microsserviços. Há menos dependências entre equipes, e você pode reagir mais rapidamente a mudanças que de outra forma seriam impedidas por barreiras ao acesso aos dados.

Benefícios das arquiteturas orientadas a eventos

Essas são algumas das vantagens de criar uma arquitetura orientada a eventos.

Acoplamento flexível e melhoria na agilidade do desenvolvedor

Os produtores de eventos estão logicamente separados dos consumidores de eventos. Essa separação entre a produção e o consumo de eventos significa que os serviços são interoperáveis, mas podem ser escalonados, atualizados e implantados independentemente uns dos outros.

O acoplamento flexível reduz as dependências e permite implementar serviços em diferentes linguagens e frameworks. É possível adicionar ou remover produtores e receptores de eventos sem precisar alterar a lógica em nenhum serviço. Não é preciso escrever códigos personalizados para pesquisar, filtrar e rotear eventos.

Eventos e resiliência assíncronos

Em um sistema orientado a eventos, os eventos são gerados de forma assíncrona e podem ser emitidos quando acontecem sem esperar uma resposta. Componentes levemente acoplados significam que, se um serviço falhar, os outros não serão afetados. Se necessário, é possível registrar eventos para que o serviço de recebimento possa retomar a partir do ponto de falha ou reproduzir eventos passados.

Mensagens baseadas em push, streams de eventos em tempo real e custos mais baixos

Os sistemas orientados a eventos permitem mensagens fáceis baseadas em push, e os clientes podem receber atualizações sem a necessidade de pesquisar continuamente serviços remotos para alterações de estado. Essas mensagens enviadas podem ser usadas para processamento e transformação de dados imediatos e análise em tempo real. Além disso, com menos pesquisas, há uma redução na E/S de rede e diminuição dos custos.

Auditoria simplificada e fornecimento de eventos

O local centralizado do roteador de eventos simplifica a auditoria e permite controlar quem pode interagir com um roteador e quais usuários e recursos têm acesso aos seus dados. Também é possível criptografar os dados em trânsito e em repouso.

Além disso, é possível usar a geração de eventos, um padrão de arquitetura que registra todas as alterações feitas no estado de um aplicativo, na mesma sequência em que foram aplicadas originalmente. A obtenção de eventos fornece um registro de eventos imutáveis que podem ser mantidos para fins de auditoria, para recriar estados históricos ou como uma narrativa canônica para explicar uma decisão voltada aos negócios.

Considerações da arquitetura

Uma arquitetura orientada a eventos pode exigir que você aborde o design do seu aplicativo de uma nova maneira. Embora seja adequado para aplicativos que usam microsserviços ou componentes separados, também é preciso considerar o seguinte:

  • A fonte do evento pode garantir a entrega se você precisar processar cada um dos eventos?

    Ela precisa ser uma fonte de evento confiável e durável.

  • Seu aplicativo pode processar várias solicitações assíncronas?

    O desempenho do sistema não pode depender de escopo global ou de bancos de dados inelásticos.

  • Como você quer acompanhar o fluxo de eventos?

    Uma arquitetura orientada a eventos é compatível com o acompanhamento dinâmico que usa serviços de monitoramento, mas não com o acompanhamento estático usando análise de código.

  • Você quer usar os dados na sua fonte de eventos para recriar o estado?

    Você deve pensar em formas de garantir que os dados não sejam duplicados e ordenados.

A seguir