SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
Event Sourcing
Autor
WELLINGTON G. MACEDO
/wellington3110
/in/wgmacedo
wellingtongustavomacedo@gmail.com
Código usando na apresentação
Agenda
● O que é evento;
● Event Sourcing;
○ Aggregator
○ Projections;
○ Reactors;
● Prós;
● Contras;
● Ferramentas;
● Quem está usando;
O que ambas operações possuem em comum?
Ambas são eventos!
Exemplos de eventos:
● Bater o ponto;
● Puxar uma tarefa do JIRA;
● Pagar a passagem do ônibus;
● Ligar para um amigo;
● Entre outros milhares de exemplos...
Event Sourcing
O Event Sourcing é um pattern que descreve que todas as
mudanças no estado da aplicação sejam armazenadas como
uma sequência de eventos.
Os eventos são guardados no que chamamos de
Event Store.
Eventos são imutáveis. O Event Store só permite inserção e
leitura.
Vamos reproduzir os eventos em um sistema real.
Aggregate
Aggregate agrega os eventos de um determinado
subdomínio da sua aplicação.
Qual foi o fluxo utilizado para gerar esses eventos no
sistema?
Receive Command
Transform command
into event
Save the event
Is command
ok?
Response with
error
Start
Response with
OK
Event
Store
Commands:
● CreateAccountCommand
● FundsDepositCommand
● FundsWithdrawCommand
Events::
● CreatedAccountEvent
● FundsDepositedEvent
● FundsWithdrawnEvent
error
Foi requerido para o time de engenharia uma feature para
mostrar o balanço da conta, como é possível desenvolver
isso se não é guardado o estado da aplicação?
Projection
Uma projection representa o estado atual de algum modelo.
Event
Store
DepositFundsCommand
WithdrawFundsCommand
Balance
Projector SQL
Database
Storing
FundsDepositedEvent
Storing
FundsWithdrawnEvent
Tailing
FundsDepositedEvent
and
FundsWithdrawnEvent
Save
Projection .
Agora foi solicitado ao time de engenharia exibir o maior
depósito já feito pelo cliente, como podemos desenvolver
isso?
Pergunta
Event
Store
DepositFundsCommand
WithdrawFundsCommand
Balance
Projector
SQL
Database
Storing
FundsDepositedEvent
Storing
FundsWithdrawnEvent
Tailing
FundsDepositedEvent
and
FundsWithdrawnEvent
Save
Projection .
BiggestDeposit
Projector
Tailing
FundsDepositedEvent
Save
Projection .
Event
Store
DepositFundsCommand
WithdrawFundsCommand
Balance
Projector SQL
Database
Storing
FundsDepositedEvent
Storing
FundsWithdrawnEvent
Tailing
FundsDepositedEvent
and
FundsWithdrawnEvent
Save
Projection .
BiggestDeposit
Projector
Tailing
FundsDepositedEvent
Save
Projection .
Redis
Event
Store
DepositFundsCommand
WithdrawFundsCommand
Balance
Projector SQL
Database
Storing
FundsDepositedEvent
Storing
FundsWithdrawnEvent
Tailing
FundsDepositedEvent
and
FundsWithdrawnEvent
Save
Projection .
BiggestDeposit
Projector
Tailing
FundsDepositedEvent
Save
Projection .
PDF
Event
Store
DepositFundsCommand
WithdrawFundsCommand
AccountSummary
Projector SQL
Database
Storing
FundsDepositedEvent
Storing
FundsWithdrawnEvent
Tailing
FundsDepositedEvent
and
FundsWithdrawnEvent
Save
Projection .
Replay events
Projections
● Projectors deveriam ser desacoplados um dos outros e
não deveriam compartilhar nenhum estado;
● Projectors e projections são desacoplados;
● Projectors são assincronos;
● O projector pode ter um bookmark indicando onde está
processando atualmente.
Por fim o time do produto pediu que quando:
- Balanço do cliente for menor que R$ 100;
- Cliente tentar sacar dinheiro;
Então:
- Deve enviar um e-mail avisando o cliente;
Reactor
Reactors reagem a eventos, por exemplo, desencadeando
algum comportamento externo ou emitindo novos eventos.
Event
Store
WithdrawFundsCommand
BalanceControlReactor
Storing
FundWithdrawnEvent
Send email to the client
Tailing
FundWithdrawnEvent
Reactor
● Reactors deveriam ser desacoplados um dos outros e
não deveriam compartilhar nenhum estado;
● Reactors podem ser stateless ou stateful;
● Não deveriam ter acesso a projections ao realizar sua
lógica;
● Reactors são assincronos;
● Reactors deveriam fazer apenas uma coisa bem.
PRÓS
Tratar o core do seu negócio com o máximo respeito.
Diminui o "impedance mismatch".
Iteração e reinterpretação.
Encoraja boas práticas.
Evita pontos comum de dor.
Contras
Consistência Eventual
Mapeamento de eventos
Complexidade
Opacidade
Flexibilidade de operação
Ferramentas - em nível de código
Ferramentas - em nível de infraestrutura
Quem está usando
Referências
● http://udidahan.com/2009/12/09/clarified-cqrs/
● https://medium.com/@hugo.oliveira.rocha/what-they-dont-tell-you-about-event-sourcing-6afc2
3c69e9a
● https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf
● https://martinfowler.com/eaaDev/EventSourcing.html
● https://microservices.io/patterns/data/event-sourcing.html
● https://ookami86.github.io/event-sourcing-in-practice/#further-reading-1.md
● https://github.com/luontola/cqrs-hotel
● https://www.youtube.com/watch?v=iGt0DBOWDTs
● https://dev.to/barryosull/event-sourcing-what-it-is-and-why-its-awesome
● https://medium.com/serialized-io/event-sourcing-explained-part-2-some-things-you-should-kno
w-about-a929940c1d5c
Dúvidas?

Mais conteúdo relacionado

Semelhante a Event Sourcing: Entenda o pattern e como aplicá-lo

Curso de android
Curso de androidCurso de android
Curso de androidflaviokreis
 
Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014Leonardo Rossetti
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcPaula Santana
 
Visão Geral sobre o Application Insights
Visão Geral sobre o Application InsightsVisão Geral sobre o Application Insights
Visão Geral sobre o Application InsightsAndré Dias
 
Event Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesEvent Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesPedro Góes
 
A Arte dos Testes de Performance Aplicacional
A Arte dos Testes de Performance AplicacionalA Arte dos Testes de Performance Aplicacional
A Arte dos Testes de Performance AplicacionalNuno Baptista Rodrigues
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileVitor Albuquerque
 
Taise Dias - Análise efetiva de microserviços em 3 passos
Taise Dias - Análise efetiva de microserviços em 3 passosTaise Dias - Análise efetiva de microserviços em 3 passos
Taise Dias - Análise efetiva de microserviços em 3 passosminastestingconference
 
MTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosMTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosTaise Dias da Silva
 
Monitorando Transações em Tempo Real usando Java EE
Monitorando Transações em Tempo Real usando Java EEMonitorando Transações em Tempo Real usando Java EE
Monitorando Transações em Tempo Real usando Java EERicardo Ferreira
 
DevDay 2017 - Belo Horizonte - Application Insights
DevDay 2017 - Belo Horizonte - Application InsightsDevDay 2017 - Belo Horizonte - Application Insights
DevDay 2017 - Belo Horizonte - Application InsightsAndré Dias
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidAdriano Rocha
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosJuan Lopes
 
Performance na Web - GDG DevFest SP 2014
Performance na Web - GDG DevFest SP 2014Performance na Web - GDG DevFest SP 2014
Performance na Web - GDG DevFest SP 2014Alexandre Tarifa
 

Semelhante a Event Sourcing: Entenda o pattern e como aplicá-lo (20)

New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Curso de android
Curso de androidCurso de android
Curso de android
 
Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014Goldark@w3c - Web's got Talent 2014
Goldark@w3c - Web's got Talent 2014
 
TDC 2015 Florianopolis
TDC 2015 FlorianopolisTDC 2015 Florianopolis
TDC 2015 Florianopolis
 
Spring boot
Spring bootSpring boot
Spring boot
 
Arquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdcArquitetura orientada a eventos em ambientes complexos tdc
Arquitetura orientada a eventos em ambientes complexos tdc
 
Visão Geral sobre o Application Insights
Visão Geral sobre o Application InsightsVisão Geral sobre o Application Insights
Visão Geral sobre o Application Insights
 
Event Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro GóesEvent Sourcing - TDC 2015 - Pedro Góes
Event Sourcing - TDC 2015 - Pedro Góes
 
Iasapoa eca eda
Iasapoa eca edaIasapoa eca eda
Iasapoa eca eda
 
A Arte dos Testes de Performance Aplicacional
A Arte dos Testes de Performance AplicacionalA Arte dos Testes de Performance Aplicacional
A Arte dos Testes de Performance Aplicacional
 
Intervalo Técnico - QG Mobile
Intervalo Técnico - QG MobileIntervalo Técnico - QG Mobile
Intervalo Técnico - QG Mobile
 
Taise Dias - Análise efetiva de microserviços em 3 passos
Taise Dias - Análise efetiva de microserviços em 3 passosTaise Dias - Análise efetiva de microserviços em 3 passos
Taise Dias - Análise efetiva de microserviços em 3 passos
 
MTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicosMTC_2016-analise_efetiva_de_microsservicos
MTC_2016-analise_efetiva_de_microsservicos
 
Monitorando Transações em Tempo Real usando Java EE
Monitorando Transações em Tempo Real usando Java EEMonitorando Transações em Tempo Real usando Java EE
Monitorando Transações em Tempo Real usando Java EE
 
Hello vue
Hello vueHello vue
Hello vue
 
DevDay 2017 - Belo Horizonte - Application Insights
DevDay 2017 - Belo Horizonte - Application InsightsDevDay 2017 - Belo Horizonte - Application Insights
DevDay 2017 - Belo Horizonte - Application Insights
 
Treze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento AndroidTreze ferramentas/frameworks para desenvolvimento Android
Treze ferramentas/frameworks para desenvolvimento Android
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
PIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexosPIPES: Uma linguagem para processamento distribuído de eventos complexos
PIPES: Uma linguagem para processamento distribuído de eventos complexos
 
Performance na Web - GDG DevFest SP 2014
Performance na Web - GDG DevFest SP 2014Performance na Web - GDG DevFest SP 2014
Performance na Web - GDG DevFest SP 2014
 

Event Sourcing: Entenda o pattern e como aplicá-lo