Com o advento da computação distribuída via microservices, uma nova abordagem é necessária para lidar com consistência eventual inerente a distribuição. O pattern Event Source é muito adequado para este contexto e Kafka sua realização.
4. processo ‘xyz’ de negócio
Microserviços
- Processos complexos de negócio se “espalham” por mais de
um serviço
- Comunicação entre eles via HTTP REST
1
4
2 3
HTTP HTTP
HTTP
5. processo ‘xyz’ de negócio
Microserviços
1
4
2 3
Sucesso total, mas ...
Durante o intervalo de
execução, o processo ‘xyz’
esteve sempre em um estado
consistente ?
duração: 600ms
7. Microserviços
Em uma simples chamada HTTP síncrona …
[2] pode gerar lentidão em [1]
[2] pode derrubar todo sistema
[1] não sabe se [2] funcionou ou não
[1] precisa “desfazer” se [2] realmente
falhou
1 2
10. Microserviços
- Não há acesso direto ao modelo de dados
- Propositalmente, estão encapsulados
- Modelo evolui sem dependências externas
- Time decide como ele será e quais tecnologias
15. Eventos ...
Sistemas se comunicarem por meio de eventos não é uma
novidade (Event-Driven)
- O produtor emite um evento que retrata uma
mudança em seu estado
- Outro sistema captura esse evento, trata,
eventualmente muda seu estado e emite outro
evento
16. Eventos ...
Eventos são fatos, representam o passado
São por definição Imutáveis
- Representam mudanças em entidades de domínio
- Contam uma história precisa de todo o ciclo de
vida dessas entidades
17. Eventos ...
Sem dependência direta entre
serviços (async)
Consistência eventual
Plataforma de Eventos é para
onde tudo flue
processo ‘xyz’ de negócio
4
2
3 Plataforma
de Eventos
1
1
4
2 3
19. Eventos Financeiros
Mudanças de estado de saldos (balance)
- Há sempre um evento atrelado
- Um Lançamento Financeiro (entry)
- Auditável
- Rastreável
- Traduzidos para uma visão amigável
20. Eventos
Eventos são fatos, representam o passado.
São por definição Imutáveis
- Representam mudanças em entidades de domínio
- Contam uma história precisa de todo o
ciclo de vida dessas entidades
21. Event Sourcing
“Event Sourcing happens when we can entirely
derive the state of an application by
processing the log of Domain Events”
Martin Fowler
22. Event Sourcing
Persistência de cada uma das mudanças
sofridas pela entidade que comprove seu
estado atual
- Log da entidade
29. Kafka
“Event sourcing and Apache Kafka are related. Here’s
how – Event sourcing involves maintaining an immutable
sequence of events that multiple applications can
subscribe to. Kafka is a high-performance,
low-latency, scalable and durable log”
Neha Narkhede
32. Restrições: ORM, RDBMS, CRUD
- Modelo de Domínio não precisa ORM (DDD)
- Alteração em entidades de domínio geram
eventos - event sourcing
- Eventos vão para o Kafka e nele persistidos
- O modelo de escrita != leitura
33. Escrita != Leitura
- Modelo onde eventos são persistidos não
atende as necessidades de leitura
- O modelo de Leitura precisa ser
especializado para esta função
- Uma visão derivada dos eventos
35. Decifrando Várias visões podem ser
derivadas processando o stream:
Relacional, BI, ElasticSearch,
Graph
Eventos são a fonte
da verdade e fluem
pelo Kafka
continuamente, um
stream
37. CQRS
“The processing of commands and queries is
fundamentally asymmetrical, and scaling the
services symmetrically does not make a lot
of sense”
Greg Young
38. CQRS
Padrão ao se construir nova app:
1. Criar modelo Relacional
2. Mapear modelo Relacional (ORM)
3. Implementar DAO - Repository
4. Fazer o resto …
47. Kafka Connect
“Kafka Connect é uma ferramenta para, de
forma escalável e confiável, fazer
streaming de dados entre o Kafka e
outros sistemas”
confluent inc
50. Beckenbauer - Stream Process - Joins
Dados
Transacionais
Dados
Financeiros
Movimento
Algo comum com stream process:
- junção de 2 streams gerando
um terceiro stream
59. Futuro
Se aprofundar mais nessa abordagem
- Não fazer “dual writes”
- Menos connect de “source”
- CQRS Elastic Search, etc
- Stream process stateful
- Melhorar infra e operação
- Contribuir mais com comunidade
61. Rodrigo Montanha Gabriel Queiroz Lucas França
William Souza Allan Pires Guilherme Sipoloni
time moip
62. Pessoas-Chave
Gwen Shapira @gwenshap
Neha Narkhede @nehanarkhede
Jay Kreps @jaykreps
Martin Kleppmann @martinkl
Eno Thereska @enothereska
Greg Young http://goodenoughsoftware.net/