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

[TDC Recife 2019] Event Driven Architecture

[TDC Recife 2019] Event Driven Architecture

Cada vez mais estamos evoluindo para um cenário onde contextos bem definidos do business são representados por serviços independentes que expressam a realidade por trás do código. Tendo em vista que nossa realidade é assíncrona e que muito do que acontece no mundo é visto por nós como "coisas" (ou eventos) que acontecem em diferentes contextos ao nosso redor, o objetivo de modelar software que expresse a realidade também tange a comunicação entre serviços de diferentes contextos, em forma de eventos.

Nessa talk, veremos como uma arquitetura baseada em eventos pode ser uma opção coerente e viável para a comunicação entre serviços, abordando suas vantagens e desvantagens.

http://thedevelopersconference.com.br/tdc/2019/recife/trilha-arquitetura

Camila Campos

October 10, 2019
Tweet

More Decks by Camila Campos

Other Decks in Programming

Transcript

  1. @camposmilaa Event Driven Architecture #CreditasNoTDCRecife @camposmilaa

  2. @camposmilaa Camila Campos Creditas Rails Girls São Paulo @camposmilaa

  3. @camposmilaa Plataforma online Empréstimo com garantia Juros baixos pra você

    <3 creditas.com.br vagas.creditas.com.br @CreditasBR
  4. @camposmilaa Inclusão de mulheres em Tech Workshop de Rails Inspiração

    railsgirls.com.br fb.com/railsgirls.sp @RailsGirlsSP
  5. @camposmilaa Event Driven Architecture #CreditasNoTDCRecife @camposmilaa

  6. @camposmilaa Orientação a Objetos

  7. @camposmilaa Orientação a Objetos Alan Kay

  8. @camposmilaa "OOP to me means only messaging, local retention and

    protection and hiding of state-process, and extreme late-binding of all things." Alan Kay
  9. @camposmilaa "The big idea is messaging [...] The key in

    making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be" Alan Kay
  10. @camposmilaa ANALISE DE RISCO - data - resultado IMÓVEL -

    endereço - valor CLIENTE - cpf - nome - data de nascimento
  11. @camposmilaa

  12. @camposmilaa Orientação a Objetos é sobre Troca de Mensagens

  13. @camposmilaa Domain Driven Design (DDD)

  14. @camposmilaa

  15. @camposmilaa cliente cliente Linguagem Ubíqua

  16. @camposmilaa Bounded Context

  17. @camposmilaa Entender e modelar a realidade

  18. @camposmilaa

  19. @camposmilaa

  20. @camposmilaa

  21. @camposmilaa Comunicação entre sistemas

  22. @camposmilaa

  23. @camposmilaa A B Chamada síncrona (HTTP)

  24. @camposmilaa Simplicidade

  25. @camposmilaa Simplicidade Encapsulamento

  26. @camposmilaa Simplicidade Encapsulamento Acoplamento

  27. @camposmilaa Simplicidade Encapsulamento Acoplamento Performance

  28. @camposmilaa Simplicidade Encapsulamento Acoplamento Performance Disponibilidade

  29. @camposmilaa A B Chamada síncrona (HTTP)

  30. @camposmilaa A B Mensageria Message bus

  31. @camposmilaa Assíncrona

  32. @camposmilaa Assíncrona Desacoplamento

  33. @camposmilaa Assíncrona Desacoplamento Não bloqueante

  34. @camposmilaa A B Mensageria Message bus

  35. @camposmilaa Assíncrona Desacoplamento Não bloqueante Request-Response

  36. @camposmilaa Assíncrona Desacoplamento Não bloqueante Request-Response Consistência Eventual

  37. @camposmilaa Mensageria A B Message bus

  38. @camposmilaa Assíncrona Desacoplamento Não bloqueante Request-Response Consistência Eventual Realidade

  39. @camposmilaa Remetente (emissor) Destinatário (receptor) Mensagem Código Comunicação Contexto Canal

  40. @camposmilaa Remetente (emissor) Destinatário (receptor) Mensagem Comunicação entre sistemas Contrato

    Contexto Canal
  41. @camposmilaa

  42. @camposmilaa A B Mensageria Message bus

  43. @camposmilaa A B Mensageria - Tipos de mensagem Message bus

  44. @camposmilaa

  45. @camposmilaa Comandos

  46. @camposmilaa Comandos Documentos

  47. @camposmilaa Comandos Documentos Eventos

  48. @camposmilaa Eventos são fatos que expressam o passado

  49. @camposmilaa A vida é expressada por eventos

  50. @camposmilaa Como cê tá?

  51. @camposmilaa BEM ou MAL

  52. @camposmilaa BEM ou MAL

  53. @camposmilaa

  54. @camposmilaa

  55. @camposmilaa 1. 2. 3. 4. 5.

  56. @camposmilaa Solicitei um empréstimo 1. 2. 3. 4. 5.

  57. @camposmilaa Solicitei um empréstimo Preenchi o cadastro 1. 2. 3.

    4. 5.
  58. @camposmilaa Solicitei um empréstimo Preenchi o cadastro Coloquei a casa

    como garantia 1. 2. 3. 4. 5.
  59. @camposmilaa Solicitei um empréstimo Preenchi o cadastro Coloquei a casa

    como garantia Meu crédito foi aprovado 1. 2. 3. 4. 5.
  60. @camposmilaa Solicitei um empréstimo Preenchi o cadastro Coloquei a casa

    como garantia Meu crédito foi aprovado O empréstimo foi concedido 1. 2. 3. 4. 5.
  61. @camposmilaa Event Driven Architecture (EDA)

  62. @camposmilaa Martin Fowler 1. 2. 3. 4.

  63. @camposmilaa Event Notification Martin Fowler 1. 2. 3. 4.

  64. @camposmilaa Event Notification Solicitações Priorização Crédito Solicitado

  65. @camposmilaa Event Notification Solicitações Priorização Crédito Solicitado Quais dados?

  66. @camposmilaa Event Notification Event-carried State Transfer Martin Fowler 1. 2.

    3. 4.
  67. @camposmilaa Event-carried State Notification Solicitações Priorização Crédito Solicitado + dados

  68. @camposmilaa Event Notification Event-carried State Transfer Event Sourcing Martin Fowler

    1. 2. 3. 4.
  69. @camposmilaa Event Sourcing diz que todo estado é transiente e

    que apenas fatos são persistidos
  70. @camposmilaa Banco de dados Event Store id event 1 Crédito

    solicitado {id: 1, valor: 50.000, motivo: Reforma} 2 Crédito aprovado {id: 1, valor-máximo: 70.000}
  71. @camposmilaa Event Notification Event-carried State Transfer Event Sourcing CQRS Martin

    Fowler 1. 2. 3. 4.
  72. @camposmilaa Asking a question should not change the answer Bertrand

    Meyer - CQS
  73. @camposmilaa Commands Queries Command Query Separation

  74. @camposmilaa Command Query Responsibility Segregation Commands Queries

  75. @camposmilaa Quem já usou um sistema com event sourcing?

  76. @camposmilaa Event Sourcing

  77. @camposmilaa ANALISE DE RISCO - data - resultado IMÓVEL -

    endereço - valor CLIENTE - cpf - nome
  78. @camposmilaa Modelo tradicional Cliente id cpf nome 1 11122233344 Pedro

    Salomão 2 55566677788 Maria Rita 3 98765432100 Sandy & Junior
  79. @camposmilaa Modelo tradicional Cliente id cpf nome 1 11122233344 Pedro

    Salomão 2 55566677788 Maria Rita 3 98765432100 Sandy
  80. @camposmilaa Event Sourcing Event Store Cliente Cadastrado {nome: Sandy &

    Junior, cpf: 12345678900} Solicitação criada {valor: 50.000, motivo: Reforma} Garantia Adicionada {tipo: Casa, valor: 200.000} Nome Alterado {nome: Sandy}
  81. @camposmilaa Cliente preenche cadastro Solicitação criada

  82. @camposmilaa Cliente preenche cadastro Cliente adiciona documento Doc adicionado Solicitação

    criada
  83. @camposmilaa Cliente preenche cadastro Cliente adiciona documento Doc removido Doc

    adicionado Solicitação criada Cliente remove documento
  84. @camposmilaa Cliente preenche cadastro Cliente adiciona documento Cliente adiciona documento

    Doc adicionado Doc removido Doc adicionado Solicitação criada Cliente remove documento
  85. @camposmilaa Cliente preenche cadastro Cliente adiciona documento Cliente cadastra garantia

    Cliente adiciona documento Garantia adicionada Doc adicionado Doc removido Doc adicionado Solicitação criada Cliente remove documento
  86. @camposmilaa Cliente preenche cadastro Cliente adiciona documento Cliente cadastra garantia

    Cliente adiciona documento Creditas aprova o crédito Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc adicionado Solicitação criada Cliente remove documento
  87. @camposmilaa Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc

    adicionado Solicitação criada Query
  88. @camposmilaa Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc

    adicionado Solicitação criada Query
  89. @camposmilaa Command Query Responsibility Segregation

  90. @camposmilaa Modelo tradicional

  91. @camposmilaa Command Query Responsibility Segregation

  92. @camposmilaa CQRS Command Model

  93. @camposmilaa CQRS Command Model

  94. @camposmilaa CQRS Command Model Query Model

  95. @camposmilaa CQRS Base para relatórios Aplicação

  96. @camposmilaa CQRS + Event Sourcing Event Sourcing Banco de leitura

    evento 1, id: 2 evento 2, id: 1 evento 1, id: 1 id: 1, estado 2 id: 2, estado 1
  97. @camposmilaa Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc

    adicionado Solicitação criada Query
  98. @camposmilaa Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc

    adicionado Solicitação criada
  99. @camposmilaa Crédito aprovado Garantia adicionada Doc adicionado Doc removido Doc

    adicionado Solicitação criada Query
  100. @camposmilaa Quem já usou um sistema com event sourcing?

  101. @camposmilaa Saldo disponível Conta Corrente 10.000 Conta Poupança 2.000

  102. @camposmilaa Saldo disponível Conta Corrente 10.000 Conta Poupança 2.000 Extrato

    Conta Corrente data valor descrição 03/05 +7000 Salário 05/05 +4000 Freela 06/05 -1000 Aluguel
  103. @camposmilaa Adiciona atributo aos dados do veículo app/vehicle_data/get_vehicle_data.rb | 2

    +- spec/infra/get_molicar_versions_spec.rb | 10 ++++++---- spec/use_case/fetch_vehicle_data_spec.rb | 2 +- spec/vehicle_data/get_vehicle_data_spec.rb | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-)
  104. @camposmilaa Quem já usou um sistema com event sourcing?

  105. @camposmilaa

  106. @camposmilaa O problema

  107. @camposmilaa

  108. @camposmilaa

  109. @camposmilaa

  110. @camposmilaa

  111. @camposmilaa

  112. @camposmilaa

  113. @camposmilaa Versão 1 Versão 3 Versão N Versão X

  114. @camposmilaa A solução

  115. @camposmilaa Versão 1 Versão 3 Versão N Versão X

  116. @camposmilaa Solicitação criada Imóvel modificado Condições alteradas Pessoa adicionada Garantia

    substituída
  117. @camposmilaa Solicitação criada Imóvel modificado Condições alteradas Pessoa adicionada Garantia

    substituída
  118. @camposmilaa A implementação

  119. @camposmilaa Aplicação A Front-end Eventos

  120. @camposmilaa Aplicação A Front-end Aplicação ES

  121. @camposmilaa ACL Aplicação A Front-end Evento Comando

  122. @camposmilaa Aplicação ES Comando Evento

  123. @camposmilaa Event Store + Aplicação ES Comando Evento

  124. @camposmilaa Event Store + Projeção + Aplicação ES Comando Evento

  125. @camposmilaa Não fizemos

  126. @camposmilaa Resposta Aplicação A Aplicação ES

  127. @camposmilaa :shipit:

  128. @camposmilaa Event Driven Architecture

  129. @camposmilaa Event Driven Architecture Não é complicada

  130. @camposmilaa Event Driven Architecture Não é complicada Reflete a realidade

  131. @camposmilaa Event Driven Architecture Não é complicada Auditoria "de graça"

    Reflete a realidade
  132. @camposmilaa Event Driven Architecture Não é complicada Auditoria "de graça"

    Serviços autônomos Reflete a realidade
  133. @camposmilaa Event Driven Architecture Não é complicada Auditoria "de graça"

    Serviços autônomos Reflete a realidade Escalável
  134. @camposmilaa Não é complicada Auditoria "de graça" Serviços autônomos Reflete

    a realidade Escalável Análises complexas Event Driven Architecture
  135. @camposmilaa Event Driven Architecture

  136. @camposmilaa Event Driven Architecture Assincronia

  137. @camposmilaa Event Driven Architecture Assincronia Consistência Eventual

  138. @camposmilaa Event Driven Architecture Assincronia Correções por eventos Consistência Eventual

  139. @camposmilaa Event Driven Architecture Assincronia Correções por eventos Replay tenso

    Consistência Eventual
  140. @camposmilaa Event Driven Architecture Assincronia Correções por eventos Replay tenso

    Consistência Eventual Demanda projeções
  141. @camposmilaa Assincronia Correções por eventos Replay tenso Overengineering Consistência Eventual

    Demanda projeções Event Driven Architecture
  142. @camposmilaa Não use um canhão para matar uma formiga

  143. @camposmilaa Agradecida! bit.ly/camila-tdc-recife camposmilaa