Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Event Source com Kafka em uma Fintech - Moip De...

Event Source com Kafka em uma Fintech - Moip DevDay 1

A motivação e a execução de uma solução de event source baseada em Kafka no moip

Diego Irismar da Costa

February 21, 2017
Tweet

More Decks by Diego Irismar da Costa

Other Decks in Programming

Transcript

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. Event Sourcing “Event Sourcing happens when we can entirely derive

    the state of an application by processing the log of Domain Events” Martin Fowler
  11. Event Sourcing Persistência de cada uma das mudanças sofridas pela

    entidade que comprove seu estado atual - Log da entidade
  12. Event Sourcing Log da entidade ? PAY-01:PAYMENT attr_1: 01 attr_2:

    02 attr_3: 03 attr_n: 0N PAY-01:PAYMENT_LOG created_at: 01/01 attr_02: 222 attr_03: 333 1 *
  13. Event Sourcing Não há mutação de estado! event_id pay_id created_at

    attr_1 attr_2 attr_3 attr_n 0002 PAY-01 02/01/2017 01 02 03 0N 0001 PAY-01 01/01/2017 01 222 333 0N
  14. Event Sourcing event_id pay_id data 0002 PAY-01 { "payment_id": "PAY-01",

    "created_at": “02/01/2017, "attr_1": 01, "attr_2": 02, "attr_3": 03, "attr_n": "0N" } 0001 PAY-01 { "payment_id": "PAY-01", "created_at": “01/01/2017, "attr_1": 01, "attr_2": 222, "attr_3": 333, "attr_n": "0N" }
  15. 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
  16. 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
  17. 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
  18. 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
  19. CQRS “The processing of commands and queries is fundamentally asymmetrical,

    and scaling the services symmetrically does not make a lot of sense” Greg Young
  20. 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 …
  21. CQRS problema: A Realidade - novas necessidades de clientes -

    aumento exponencial de volume “Otimizações”
  22. CQRS Abordagem para uma nova app muda - Modelo de

    domínio (de verdade) - A leitura é outro modelo - Até mesmo outra app - Outra tecnologia
  23. - Kafka é o log de eventos: durável, resiliente,escalável (event

    source) - Única maneira de acesso é consumindo streams (stream processing) - Microserviço é invocado (event-driven) - Cria-se visões especializadas (cqrs) CQRS EventSource EventDriven StreamProcessing Kafka
  24. 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
  25. Beckenbauer - Stream Process - Joins Dados Transacionais Dados Financeiros

    Movimento Algo comum com stream process: - junção de 2 streams gerando um terceiro stream
  26. KStreamBuilder builder = new KStreamBuilder(); KStream<String, Authorization> authStream = builder.stream(Serdes.String(),

    authSerde, TOPIC_AUTHORIZATIONS); builder .stream(Serdes.String(), entrySerde, TOPIC_FIN_ENTRIES) .filter(isAuthorization()) .map(reindexKey()) .join(authStream, joinNormalize(), JoinWindows.of(JOIN_WINDOW_TIME), Serdes.String(), entrySerde, authSerde) .to(Serdes.String(), movementSerde, TOPIC_MOVEMENTS);
  27. Resultado do Join (movement) é o input da aplicação das

    regras contábeis Movimento regras contábeis Registro Contábil Beckenbauer - Stream Process
  28. Sync de Saldo em Sistema Legado Financial Balance (mysql) Classic

    Moip (mysql) connect mysql (source) normalizador connect mysql (sinky)
  29. 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
  30. Kafka + - Replication Factory - Partition number - Log

    compaction / Log Retention - Consumer Offsets - Zookeeper - Stateful Stream Process
  31. Pessoas-Chave Gwen Shapira @gwenshap Neha Narkhede @nehanarkhede Jay Kreps @jaykreps

    Martin Kleppmann @martinkl Eno Thereska @enothereska Greg Young http://goodenoughsoftware.net/