Quando Microserviçoes Encontram Event Sourcing

Quando Microserviçoes Encontram Event Sourcing

439e623c5d770ae0da8e61ec08452032?s=128

Vinicius Gomes

April 23, 2018
Tweet

Transcript

  1. 31.
  2. 32.

    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 } ] }
  3. 35.

    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
  4. 43.

    AGGREGATES Exemplo 23 { "id": “42”, "status": "OPEN", "items": [

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

    AGGREGATES Exemplo 24 { "id": “42”, "status": "OPEN", "items": [

    { "id": “43”, “quantity": 1 } ] } payload: { orderId: “42”, itemId: “43”, quantity: 1 }
  6. 45.

    payload: { orderId: “42”, itemId: “44”, quantity: 2 } AGGREGATES

    Exemplo 24 { "id": “42”, "status": "OPEN", "items": [ { "id": “43”, “quantity": 1 } ] }
  7. 46.

    payload: { orderId: “42”, itemId: “44”, quantity: 2 } AGGREGATES

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

    AGGREGATES Exemplo 25 { "id": “42”, "status": "OPEN", "items": [

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

    AGGREGATES Exemplo 26 { "id": “42”, "status": "OPEN", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42”, itemId: “43” }
  10. 49.

    AGGREGATES Exemplo 26 { "id": “42”, "status": "OPEN", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42” }
  11. 50.

    AGGREGATES Exemplo 27 { "id": “42”, "status": "PLACED", "items": [

    { "id": “44”, “quantity": 2 } ] } payload: { orderId: “42” }
  12. 51.

    AGGREGATES Exemplo 27 { "id": “42”, "status": "PLACED", "items": [

    { "id": “44”, “quantity": 2 } ] } Order Aggregate
  13. 53.

    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” }
  14. 64.

    COMMANDS Opção #1 Um end-point para todos os comandos 37

    POST /orders/8659a0d6/commands { “type": “AddItemToOrderCommand”, "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
  15. 66.

    COMMANDS Opção #2 Um end-point único por comando 38 POST

    /orders/8659a0d6/items/commands/add { "menuItem": “/menu/items/8d30d99“, “quantity": 2 }
  16. 71.

    QUERIES Más notícias O Event Store não é bom para

    queries 42 Na maioria dos sistemas •Poucas escritas •Muitas leituras
  17. 72.
  18. 85.

    CQRS 47 Command model •Definições de comandos •Definições de eventos

    •Aggregate (1) •Repositório •API de escrita
  19. 86.

    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
  20. 87.
  21. 92.

    TECHNOLOGIAS Java Spring Boot Axon Framework Spring Data REST RabbitMQ

    53 https://github.com/vvgomes/event-driven-restaurant
  22. 100.

    MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento 55
  23. 101.

    MICROSERVIÇOS + EVENT SOURCING Benefícios •Consultas históricas •Auditoria por definição

    •Imutabilidade •Intenção do usuário •Desacoplamento •Resiliência 55
  24. 102.

    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
  25. 103.

    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
  26. 104.

    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
  27. 105.

    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
  28. 106.

    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
  29. 107.

    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
  30. 108.

    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
  31. 109.

    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