O documento descreve como implementar transações distribuídas entre microsserviços usando o padrão SAGA e a plataforma Apache Kafka. SAGA permite sequências de transações locais para substituir transações de longa duração em bancos de dados. Kafka fornece uma plataforma de mensagens para comunicação assíncrona entre serviços e processamento de eventos em tempo real.
1. @fabiojose
Event-driven
SAGAs com Kafka
SAGA orientada à eventos utilizando Kafka Streams. SAGA é a solução para
transações distribuídas em ecossistemas µServices.
everis - São Paulo
08-NOV-2018
2. @fabiojose
Olá!
Eu sou Fábio José
Você pode me encontrar em
BIO
15+ anos experiência, Engenheiro DevOps, 4+ como everis, java &
node, GNU/Debian, Blockchain BR, dzone.com, medium.com
4. @fabiojose
SAGA
➔ two phase commit - 2PC não é uma opção
➔ Padrão proposto para substituir transações de longa duração em
banco de dados relacionais
➔ Implementadas utilizando Coreografia ou Orquestração
➔ Sequências de transações locais
➔ Empregado para transações distribuídas em µServices
7. @fabiojose
Orientado a Eventos
➔ Um produtor e muitos consumidores
➔ Uma origem e muitos destinos
➔ Comunicação assíncrona
➔ Requer um gerenciador de eventos - Event Bus
➔ Fire and forget
➔ Comunica um fato que ocorreu em algum ponto do passado
9. @fabiojose
Kafka
➔ pub-sub distributed streaming platform
➔ Smart consumers, dumb broker
➔ Grupo de consumidores - consumer group
➔ Partições - um consumidor por partição
➔ Garantia de pelo menos uma entrega
➔ Alta taxa de transferência
15. @fabiojose
Modelos de Solução Coreografada
Agregação Revezamento
Agregador
Event Bus
µService’
O Agregador determina se a transação
chegou ao fim com sucesso ou erro,
portanto ele conhece todos os eventos.
Event Bus
µService’
µService’’
µService’’’
µService’’
Cada µService é responsável por capturar
o evento anterior e emitir o próximo,
formando uma cadeia de responsabilidade
17. @fabiojose
Caso de Uso usando Agregação
Abrir uma conta
_ µService Contas recebe requisições HTTP
para criar contas e emite eventos
AccountCreated
_ Todos os outros µService: Fraude, Crédito,
Cartões e Poupança, estão aguardando esse
evento para iniciarem seus fluxos de negócio
_ Sem uma ordem definida os eventos
desses µServices chegarão ao SAGA
Agregador
Contas
Fraude
Crédito
Cartões
Poupança
SAGA
http
21. @fabiojose
Como tudo funciona
Contas
Fraude
Crédito
Cartões
Poupança
SAGA
http
_ µService Contas recebe o POST de uma conta
_ Contas processa e emite AccountCreated
_ Todos os outros µServices estão com o fluxo
de eventos - stream - aberto no Kafka, inclusive
o SAGA
_ Em uma ordem não-definida, os µServices
Fraude, Cartões, Crédito e Poupança reagem,
executando sua lógica quando identificam o
evento AccountCreated
22. @fabiojose
Como tudo funciona
Contas
Fraude
Crédito
Cartões
Poupança
SAGA
http
_ µService Contas recebe o POST de uma conta
_ Contas processa e emite AccountCreated
_ Todos os outros µServices estão com o fluxo
de eventos - stream - aberto no Kafka, inclusive
o SAGA
_ Em uma ordem não-definida, os µServices
Fraude, Cartões, Crédito e Poupança reagem,
executando sua lógica quando identificam o
evento AccountCreated
_ SAGA Agregador, responsável por interpretar
os eventos emitidos por cada µService e
determinar se a transação foi bem-sucedida
27. @fabiojose
Credits
Special thanks to all the people who made and released
these awesome resources for free:
✘ Presentation template by SlidesCarnival
✘ Photographs by Unsplash