Vamos falar sobre Event Sourcing

Gabriel Queiroz
4 min readMar 5, 2017

Ao procurar sobre Event Sourcing no Google o primeiro contato que temos é a definição de Event Sourcing para Martin Fowler, que começa com a seguinte frase levantando um problema comum entre diversas aplicações atuais:

“Nós podemos buscar o estado de uma aplicação para encontrar o estado atual do mundo, e isso responde muitas perguntas. Entretanto há momentos que nós não só queremos ver onde nós estamos, mas também queremos saber como chegamos lá.”

What is it & How it works?

State Mutation

Antes de entrar no assunto Event Sourcing podemos pensar no modelo tradicional de aplicações web e entender melhor como eles funcionam. Nesses modelos normalmente temos: Interações entre o client-app (front-end) e o core da sua aplicação (back-end) que por fim resultam em alterações no estado atual da sua base da dados (database).

Martin Kleppmann. January 29, 2015 (modificado).

Imagine um banco de dados que guarda a pontuação de jogadores de um jogo. Temos uma tabela player, com as seguintes colunas: id, player e score. Vamos dizer que o jogador “Bob” marcou 10 pontos no jogo, e queremos atualizar a sua pontuação na tabela. Provavelmente vamos fazer um update no banco de dados, para atualizar esse score.

Agora ao fazer uma query na tabela player, conseguimos pegar o valor atualizado do score de Bob. Digamos que Bob continuou jogando e marcando pontos. Cada vez que Bob marca um novo ponto, atualizamos a tabela player com a sua nova pontuação.

Imagine que temos diversos jogadores, tendo sua pontuação atualizada frequentemente. Todos os jogadores teriam apenas a sua score final registrada no banco de dados. Mas e se quiséssemos saber como o jogador chegou naquele score? Ou se quiséssemos saber como estava um jogador em comparação a outro em um certo momento no tempo. Em um modelo tradicional não temos essa informação, pois a cada nova pontuação nós sobrescrevemos sua pontuação anterior com uma nova pontuação, alterando o estado atual daquele dado. Chamamos isso de “State Mutation”.

Event Sourcing

A ideia de Event Sourcing seria um pouco diferente. Cada alteração no estado atual da sua base de dados seria um novo evento em um stream que permite apenas inclusão. Cada update na tabela geraria uma nova linha, registrando uma nova pontuação. Caso tenha alterado para uma pontuação incorreta, uma nova linha seria gerada corrigindo esse valor. Assim teríamos todas as alterações até chegar ao valor final.

Para Martin Folwer o “Event Sourcing assegura que todas as mudanças feitas no estado de uma aplicação são armazenadas como uma sequência de eventos. Não só podemos buscar esses eventos, mas também podemos usar este log de eventos para reconstruir estados passados e ajustar automaticamente o estado atual com mudanças retroativas”.

Pros & Cons

Event Sourcing pode ser ideal para certos cenários assim como pode não se encaixar em outros. Sempre ao pensar em uma nova tecnologia, ferramenta ou forma de trabalhar devemos nos perguntar “Quando e como devemos usar?”. Para ajudar, podemos comparar alguns pontos positivos (benefícios) e negativos (preocupações) sobre Event Sourcing, como citados por Elemar Jr em seu blog.

Pros

  • “O histórico de estados é preservado.” Considerando modelos de negócio atuais com bancos de dados tradicionais onde apenas o último estado de uma entidade é mantido em um base de dados. Estados anteriores são sempre sobrescritos. Ao trabalhar com Event Sourcing, permitimos que um “histórico de eventos” da entidade seja facilmente recuperado.
  • Event Streams aceitam apenas inclusão de novos eventos garantindo performance ótima.
  • Podemos usar Event Driver como uma nova forma de comunicação assíncrona entre micro-serviços, permitindo uma maior flexibilidade na interação entre eles.
  • A natureza dos eventos inclina os desenvolvedores a dar mais atenção aos comportamentos das entidades (DDD).

Cons

  • Ferramentas de Event Streams ainda são escassaz e estão em fase amadurecimento.
  • Event Streams são difíceis de pesquisar e manejar, limitando assim a aplicar na prática suas teorias.
  • Custo da inovação. Ao se trabalhar com ferramentas novas aumenta-se os riscos e os custos de novos projeto.
  • Há uma implicação quase evidente de implementação de segregação entre consulta e comandos (CQRS).

Conclusão

Event Sourcing pode trazer uma nova visão para a maneira que uma aplicação se comunica, não apenas com outras aplicações mas com si mesma. Atualmente temos grandes ferramentas de Event Streaming surgindo, como por exemplo o Apache Kafka, que esta em constante desenvolvimento e permite aplicar diversos destes conceitos na prática.

O custo da inovação ao se trabalhar com tecnologias recentes deve ser levado em consideração ao aplicar Event Sourcing. Diversas barreiras podem surgir no caminho assim como um novo horizonte de soluções e forma de pensar.

Referências

--

--