Uma arquitetura orientada por eventos é um padrão de design de software em que os microsserviços reagem a alterações no estado, denominadas eventos. Os eventos podem ter um estado (como o preço de um artigo ou uma morada de entrega) ou podem ser identificadores (uma notificação de que uma encomenda foi recebida ou enviada, por exemplo). Os eventos acionam microsserviços que funcionam em conjunto para alcançar um objetivo comum, mas não têm de saber nada uns sobre os outros, exceto o formato do evento. Embora funcionem em conjunto, cada microsserviço pode aplicar uma lógica empresarial diferente e emitir os seus próprios eventos de saída.
Um evento tem as seguintes caraterísticas:
- É um registo de algo que aconteceu.
- Captura um facto imutável que não pode ser alterado nem eliminado.
- Ocorre independentemente de um serviço aplicar ou não qualquer lógica ao consumi-lo.
- Pode ser mantido indefinidamente, em grande escala e consumido quantas vezes for necessário.
Num sistema orientado por eventos, os eventos são gerados por produtores de eventos, carregados e filtrados por um encaminhador de eventos (ou agente) e, em seguida, distribuídos aos consumidores de eventos (ou destinos) adequados. Os eventos são encaminhados para os consumidores com base nas subscrições definidas por uma ou mais inscrições correspondentes (quando usa o Eventarc Advanced) ou um ou mais acionadores correspondentes (quando usa o Eventarc Standard). Estes três componentes (produtores de eventos, router de eventos e consumidores de eventos) estão separados e podem ser implementados, atualizados e dimensionados de forma independente:
O router de eventos associa os diferentes serviços e é o meio através do qual as mensagens são enviadas e recebidas. Executa uma resposta ao evento original gerado por um produtor de eventos e envia esta resposta a jusante para os consumidores adequados. Os eventos são processados de forma assíncrona e os respetivos resultados são decididos quando um serviço reage a um evento ou é afetado por ele, como no seguinte diagrama de um fluxo de eventos muito simplificado:
Quando usar arquiteturas orientadas por eventos
Considere as seguintes utilizações ao criar o seu sistema.
- Para monitorizar e receber alertas sobre anomalias ou alterações a contentores de armazenamento, tabelas de base de dados, máquinas virtuais ou outros recursos.
- Para distribuir um único evento a vários consumidores. O router de eventos envia o evento a todos os consumidores adequados, sem que tenha de escrever código personalizado. Cada serviço pode, então, processar o evento em paralelo, mas de forma diferente.
- Para oferecer interoperabilidade entre diferentes conjuntos de tecnologias, mantendo a independência de cada conjunto.
- Para coordenar sistemas e equipas que operam e são implementados em diferentes regiões e contas. Pode reorganizar a propriedade dos microsserviços. Existem menos dependências entre equipas e pode reagir mais rapidamente a alterações que, de outra forma, seriam impedidas por barreiras ao acesso aos dados.
Vantagens das arquiteturas orientadas por eventos
Seguem-se algumas das vantagens da criação de uma arquitetura orientada por eventos.
Acoplamento flexível e agilidade melhorada dos programadores
Os produtores de eventos estão logicamente separados dos consumidores de eventos. Esta separação entre a produção e o consumo de eventos significa que os serviços são interoperáveis, mas podem ser dimensionados, atualizados e implementados independentemente uns dos outros.
A união fraca reduz as dependências e permite-lhe implementar serviços em diferentes idiomas e frameworks. Pode adicionar ou remover produtores e recetores de eventos sem ter de alterar a lógica em nenhum serviço. Não precisa de escrever código personalizado para sondar, filtrar e encaminhar eventos.
Eventos assíncronos e resiliência
Num sistema orientado por eventos, os eventos são gerados de forma assíncrona e podem ser emitidos à medida que ocorrem sem esperar por uma resposta. Os componentes fracamente acoplados significam que, se um serviço falhar, os outros não são afetados. Se necessário, pode registar eventos para que o serviço de receção possa ser retomado 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 por eventos permitem o envio de mensagens baseadas em push, e os clientes podem receber atualizações sem terem de sondar continuamente os serviços remotos para verificar alterações de estado. Estas mensagens enviadas podem ser usadas para o tratamento e a transformação de dados em tempo real, bem como para a análise em tempo real. Além disso, com menos sondagens, há uma redução na E/S de rede e uma diminuição dos custos.
Auditoria e obtenção de eventos simplificadas
A localização centralizada do router de eventos simplifica a auditoria e permite-lhe controlar quem pode interagir com um router e que utilizadores e recursos têm acesso aos seus dados. Também pode encriptar os seus dados em trânsito e em repouso.
Além disso, pode usar o Event Sourcing, um padrão de arquitetura que regista todas as alterações feitas ao estado de uma aplicação, na mesma sequência em que foram originalmente aplicadas. A origem de eventos fornece um registo 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 orientada pela empresa.
Considerações arquitetónicas
Uma arquitetura orientada por eventos pode exigir que aborde o design da sua aplicação de uma nova forma. Embora seja adequado para aplicações que usam microsserviços ou componentes separados, também deve considerar o seguinte:
A sua origem de eventos pode garantir a entrega se precisar de processar todos os eventos?
Deve ser uma origem de eventos duradoura e fiável.
A sua aplicação consegue processar vários pedidos assíncronos?
O desempenho do seu sistema não deve depender do âmbito global nem de bases de dados inflexíveis.
Como quer acompanhar o fluxo de eventos?
Uma arquitetura orientada por eventos suporta o acompanhamento dinâmico através de serviços de monitorização, mas não o acompanhamento estático através da análise de código.
Quer usar os dados na origem de eventos para reconstruir o estado?
Deve considerar como garantir que os seus dados são desduplicados e ordenados.
O que se segue?
- Para compreender como o Eventarc Advanced processa eventos, consulte a vista geral do Eventarc Advanced.
- Para compreender como o Eventarc Standard processa eventos, consulte a vista geral do Eventarc Standard.