Event-driven X Event-Sourcing

Clayton K. N. Passos
codigorefinado
Published in
3 min readSep 18, 2023

--

Event Sourcing e Event-Driven são dois conceitos relacionados, mas distintos, no campo da arquitetura de sistemas distribuídos e processamento de eventos. Vamos explorar a diferença entre eles:

Event Sourcing (ES):

  • Modelo de Armazenamento: No Event Sourcing, o estado atual de um sistema é derivado da sequência completa de eventos que ocorreram ao longo do tempo. Em vez de apenas armazenar o estado atual de um objeto ou entidade, você armazena todos os eventos que afetaram essa entidade.
  • Fonte de Verdade: O evento é considerado a fonte de verdade. Isso significa que, se você quiser saber o estado atual de uma entidade em um determinado momento, você “reproduz” todos os eventos desde o início.
  • Modelo de Consistência: Isso pode ser útil para manter um histórico completo de todas as mudanças e suportar auditorias detalhadas. Além disso, é especialmente útil em cenários em que você deseja reconstruir o estado atual ou retroceder no tempo para análises ou correções.

Prós:

  1. Histórico Completo: Você tem um histórico completo de todos os eventos que afetaram o estado de uma entidade. Isso é valioso para auditorias e análises retroativas.
  2. Fonte de Verdade: Os eventos são considerados a fonte de verdade, o que torna a reconstrução do estado atual uma tarefa possível e precisa.
  3. Aprimoramento de Segurança: Pode melhorar a segurança, pois é mais difícil alterar ou excluir dados históricos.
  4. Flexibilidade: Permite a evolução do modelo de dados ao longo do tempo, adicionando ou removendo eventos à medida que os requisitos mudam.

Contras:

  1. Complexidade: Implementar o Event Sourcing pode ser mais complexo do que simplesmente armazenar o estado atual, pois você precisa gerenciar a lógica de eventos e a reconstrução do estado.
  2. Desempenho: Pode ser mais intensivo em termos de recursos computacionais, especialmente quando se trata de reconstruir estados de entidades complexas.

Event-Driven (ED):

  • Arquitetura de Integração: O Event-Driven é uma abordagem arquitetônica em que os sistemas respondem a eventos que ocorrem em tempo real. Os eventos são mensagens ou notificações que indicam que algo aconteceu e que pode ser relevante para outros sistemas ou partes do sistema.
  • Comunicação Assíncrona: As interações entre sistemas ou componentes são geralmente assíncronas e baseadas em eventos. Quando um evento ocorre, os sistemas interessados são notificados e podem tomar ações com base nesse evento.
  • Desacoplamento: O Event-Driven é usado para desacoplar sistemas, permitindo que eles evoluam independentemente. Isso torna os sistemas mais flexíveis e escaláveis.

Prós:

  1. Desacoplamento: Promove o desacoplamento entre sistemas, permitindo que eles evoluam independentemente e sejam mais flexíveis.
  2. Escala: É adequado para sistemas que precisam lidar com cargas de trabalho variáveis, pois a comunicação é geralmente assíncrona e escalável.
  3. Resposta em Tempo Real: Permite que os sistemas respondam a eventos em tempo real, o que é útil em cenários como notificações e integrações em tempo real.
  4. Integração: Facilita a integração entre sistemas heterogêneos.

Contras:

  1. Complexidade de Gerenciamento de Eventos: Pode ser complexo gerenciar eventos, especialmente em sistemas com muitos eventos diferentes.
  2. Problemas de Ordem: Garantir a ordem correta dos eventos pode ser desafiador em sistemas distribuídos.
  3. Recuperação de Falhas: Lidar com falhas na entrega de eventos pode ser complicado.
  4. Menos Histórico: Event-Driven geralmente não mantém um histórico completo de eventos como o Event Sourcing, o que pode ser um problema em cenários que exigem auditorias detalhadas.

A escolha entre Event Sourcing e Event-Driven depende dos requisitos específicos do seu sistema. Em muitos casos, as duas abordagens podem ser usadas em conjunto, aproveitando as vantagens de cada uma para atender às necessidades do sistema.

Em resumo, a principal diferença está na abordagem e no foco de cada um:

  • Event Sourcing se concentra em como você armazena e mantém o estado de um sistema usando uma sequência de eventos, o que é especialmente útil quando se precisa de um histórico completo e uma fonte de verdade para o estado de uma entidade.
  • Event-Driven é uma abordagem arquitetônica que se concentra em como os sistemas se comunicam entre si e respondem a eventos em tempo real, promovendo o desacoplamento e a escalabilidade.

Embora eles possam ser usados juntos em algumas arquiteturas, são conceitos diferentes que atendem a diferentes necessidades em sistemas distribuídos

--

--