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

Quando Microserviçoes Encontram Event Sourcing

Quando Microserviçoes Encontram Event Sourcing

Vinicius Gomes

April 23, 2018
Tweet

More Decks by Vinicius Gomes

Other Decks in Programming

Transcript

  1. DESAFIOS Acoplamento Resiliência Tempo de resposta Intenção do usuário Estado

    atual mutável 16 { "id": “6a208c41…”, "status": "OPEN", "items": [ { "id": “be596c8e…”, "quantity": 1 }, { "id": “5d09509c…”, "quantity": 2 }, { "id": “cc52d1b6…”, "quantity": 1 } ] }
  2. DOMAIN EVENTS 19 { "payload": { "orderId": “be596c8e…”, "itemId": “5d09509c…”,

    "quantity": 1 }, "payloadType": “com.restaurant.ItemAddedToOrderEvent”, "timestamp": “2017-03-25 08:48:51 -03:00”, "revision": “2”, "aggregateId": “6a208c41…” } Representam o passado Imutáveis Permanentes
  3. AGGREGATES Exemplo 23 { "id": “42”, "status": "OPEN", "items": [

    ] } payload: { orderId: “42”, itemId: “43”, quantity: 1 }
  4. AGGREGATES Exemplo 24 { "id": “42”, "status": "OPEN", "items": [

    { "id": “43”, “quantity": 1 } ] } payload: { orderId: “42”, itemId: “43”, quantity: 1 }
  5. payload: { orderId: “42”, itemId: “44”, quantity: 2 } AGGREGATES

    Exemplo 24 { "id": “42”, "status": "OPEN", "items": [ { "id": “43”, “quantity": 1 } ] }
  6. payload: { orderId: “42”, itemId: “44”, quantity: 2 } AGGREGATES

    Exemplo 25 { "id": “42”, "status": "OPEN", "items": [ { "id": “43”, “quantity": 1 }, { "id": “44”, “quantity": 2 } ] }
  7. AGGREGATES Exemplo 25 { "id": “42”, "status": "OPEN", "items": [

    { "id": “43”, “quantity": 1 }, { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42”, itemId: “43” }
  8. AGGREGATES Exemplo 26 { "id": “42”, "status": "OPEN", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42”, itemId: “43” }
  9. AGGREGATES Exemplo 26 { "id": “42”, "status": "OPEN", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42” }
  10. AGGREGATES Exemplo 27 { "id": “42”, "status": "PLACED", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42” }
  11. AGGREGATES Exemplo 27 { "id": “42”, "status": "PLACED", "items": [

    { "id": “44”, “quantity": 2 } ] } Order Aggregate
  12. COMMANDS 28 Add item to order { "type": “com.restaurant.AddItemToOrderCommand”, "payload":

    { "orderId": “be596c8e…”, "itemId": “5d09509c…”, "quantity": 1 }, "timestamp": “2017-03-25 08:48:51 -03:00” }
  13. COMMANDS Opção #1 Um end-point para todos os comandos 37

    POST /orders/8659a0d6/commands { “type": “AddItemToOrderCommand”, "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
  14. COMMANDS Opção #2 Um end-point único por comando 38 POST

    /orders/8659a0d6/items/commands/add { "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
  15. QUERIES Más notícias O Event Store não é bom para

    queries 42 Na maioria dos sistemas •Poucas escritas •Muitas leituras
  16. CQRS 47 Command model •Definições de comandos •Definições de eventos

    •Aggregate (1) •Repositório •API de escrita
  17. CQRS 47 Command model •Definições de comandos •Definições de eventos

    •Aggregate (1) •Repositório •API de escrita Query model •Consumidores de evento •Entidades •Repositórios •API de consultas
  18. TECHNOLOGIAS Java Spring Boot Axon Framework Spring Data REST RabbitMQ

    53 https://github.com/vvgomes/event-driven-restaurant
  19. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento 55
  20. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência 55
  21. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55
  22. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios
  23. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade
  24. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade •Snapshots
  25. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade •Snapshots •Upcasting
  26. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade •Snapshots •Upcasting •Condições de corrida
  27. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade •Snapshots •Upcasting •Condições de corrida •Contratos
  28. MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência •Escalabilidade flexível 55 Desafios •Complexidade •Snapshots •Upcasting •Condições de corrida •Contratos •Consistência eventual