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

Microservices, Event Sourcing e CQRS

Microservices, Event Sourcing e CQRS

Nesta talk, demonstro como os conceitos de Event Sourcing e CQRS podem ser aplicados em uma arquitetura de microsserviços.

Thiago Zanivan

October 06, 2018
Tweet

Other Decks in Technology

Transcript

  1. ABORDAGEM TRADICIONAL PROS • Simples de desenvolver (e manter) •

    Simples de distribuir e/ou publicar • Simples de escalar
  2. EXEMPLO - MONOLITO Produtos Compras DB JSON / HTTP Recursos

    Clientes Auth Recomend. Fornecedores Pagamentos E-mails Relatórios Favoritos Pesquisa (barra)
  3. ABORDAGEM TRADICIONAL CONS • Base de código complexa e intimidadora

    • Builds loooooooooooooooooooooongos • Deploys e entrega contínua tornam-se um desafio
  4. ABORDAGEM TRADICIONAL CONS • Base de código complexa e intimidadora

    • Builds loooooooooooooooooooooongos • Deploys e entrega contínua tornam-se um desafio • Dificuldade em escalar
  5. ABORDAGEM TRADICIONAL CONS • Base de código complexa e intimidadora

    • Builds loooooooooooooooooooooongos • Deploys e entrega contínua tornam-se um desafio • Dificuldade em escalar • Amarra a equipe a uma tecnologia específica
  6. MICROSERVICES Características • Separa a aplicação em unidades menores independentes,

    fracamente acopladas • Cada serviço tem seu banco de dados • Utiliza-se um protocolo comum para comunicação (HTTP, por ex.) • Podem ser implementados utilizando diferentes tecnologias
  7. EVENT SOURCING “Nós podemos descobrir a situação atual de um

    universo consultando o estado de uma aplicação, e isso responde muitas perguntas. Entretanto, há momentos em que nós não queremos só ver onde nós estamos, mas também queremos saber como chegamos lá.” - Martin Fowler
  8. EVENT SOURCING Compra iniciada Item adicionado Compra finalizada Item adicionado

    Event Store { “compraId”: “1”, “clienteId”: “thiago” } { “id”: “1”, “status”: “ABERTA”, “clienteId”: “thiago” “itens”: [] } Compra 1
  9. EVENT SOURCING Compra iniciada Item adicionado Compra finalizada Item adicionado

    Event Store { “compraId”: “1”, “produtoId”: “suco”, “quantidade”: 1, “preco”: 2.80 } { “id”: “1”, “status”: “ABERTA”, “clienteId”: “thiago” “itens”: [ { “produtoId”: “suco”, “quantidade”: 1, “preco”: 2.80 } ] } Compra 1
  10. EVENT SOURCING Compra iniciada Item adicionado Compra finalizada Item adicionado

    Event Store { “compraId”: “1”, “produtoId”: “misto”, “quantidade”: 1, “preco”: 3.00 } { “id”: “1”, “status”: “ABERTA”, “clienteId”: “thiago” “itens”: [ { “produtoId”: “suco”, “quantidade”: 1, “preco”: 2.80 }, { “produtoId”: “misto”, “quantidade”: 1, “preco”: 3.00 } ] } Compra 1
  11. EVENT SOURCING Compra iniciada Item adicionado Compra finalizada Item adicionado

    Event Store { “compraId”: “1” } { “id”: “1”, “status”: “FINALIZADA”, “clienteId”: “thiago” “itens”: [ { “produtoId”: “suco”, “quantidade”: 1, “preco”: 2.80 }, { “produtoId”: “misto”, “quantidade”: 1, “preco”: 3.00 } ] } Compra 1
  12. EVENTS Características de eventos: • Representam um fato que ocorreu

    no passado • Imutáveis • Normalmente possuem um tipo e o ID do agregado
  13. EVENT STORE Características da event store: • Permite apenas operações

    de inserção • Mantém a sequência dos eventos • Persistente
  14. COMMANDS • Um comando representa a intenção do usuário em

    executar uma determinada operação • Eles são processados por um componente chamado Command Handler, o qual realiza validações e interage com o modelo de negócio
  15. CQRS Command Query Responsibility Segregation Significa que você pode utilizar

    modelos de dados distintos para leitura e para escrita!
  16. CQRS Command Comandos Eventos Agregados Modelo de escrita (normalizado) Resource

    para escritas Query Listeners Modelo de leitura (desnormalizado) Resource para leituras