O documento discute a arquitetura CQRS (Command and Query Responsibility Segregation) para desenvolvimento de aplicações altamente escaláveis, separando comandos de consultas e utilizando event sourcing e event stores. Apresenta os conceitos e fundamentos de CQRS e demonstra um exemplo simples de escrita e leitura separadas.
[Palestra] Técnicas, cases e práticas ágeis para concepção de produtos e serv...
DDD, CQRS, and Domain Events
1. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Desenvolvendo Aplicações Altamente
Escaláveis com CQRS
2. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Aplicações Altamente Escaláveis
3. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
CQRS – Command and Query Responsibility Segregation
Event Sourcing and Event Stores
EDA – Event Driven Architecture
Aplicações Altamente Escaláveis
4. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
“A single model cannot be suitable to perform reports,
searches and transactional behaviors”.
Greg Young
Conceito CQRS
5. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Conceito CQRS
6. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Business Task
7. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Reporting
8. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Task/Reporting
9. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Necessidade de mecanismos de sincronização:
• Automático
• Eventual
• Controlada
• Sob demanda
CQRS Implica em
10. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
1. Mudanças de estado são feitas atráves de mensagens
2. Application Services aceita commandos da UI e dispara
Mensagens/Eventos
3. Data Source de Consulta e Relatórios são atualizados por eventos
4. Todas as consultas feitas pela UI são processadas diretamente pelo
Sistema de consulta
Fundamentos
11. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Fundamentos
12. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Fundamentos
13. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Escalabilidade
Performance
Conflitos de concorrência
Complexidade no desenvolvimento e manutenção
Soluções
14. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Mostrando um exemplo de Escrita e Leitura simples.
Demo
15. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Mostrando um exemplo completo
Demo
16. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Event Sourcing & Event Stores
17. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Event Sourcing & Event Store
18. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
EDA – Event Driven Architecture
19. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
When [something] has occurred, the system should
[something]…
EDA – Event Driven Architecture
20. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
EDA – Event Driven Architecture
21. São Paulo - Rio de Janeiro - Porto Alegre - São Leopoldo - Caxias do Sul
Obrigado
Giovani Decusati
giovani@cwi.com.br
Notas do Editor
Podemos dizer que escalabilidade é capacidade de um sistema se adequar ao aumento da demanda;
Isso quer dizer que se para 10 usuários o meu tempo de resposta médio é de 2s, ao dobrar o número de usuários a aplicação irá manter o meu tempo médio de resposta de 2s.
Escalabilidade depende de uma série de fatores, e muitas vezes não é possível escalar uma aplicação pelo fato de o design utilizado na aplicação (arquitetura) não é mais o adequado.
Podemos então definir uma aplicação escalável como sendo aquela que ao aumentarmos o número de usuários o tempo de resposta permanece linear.
Existem muitos fatores que afetam o desempenho de uma aplicação, principalmente o design da aplicação.
Referências:
https://msdn.microsoft.com/en-us/library/aa292203(v=vs.71).aspx
https://cloud.google.com/solutions/scalable-and-resilient-apps
http://www.macoratti.net/net_apes.htm
http://natishalom.typepad.com/nati_shaloms_blog/2007/07/the-true-meanin.html
The main concept proposed by CQRS is the concept of separation between query tasks and transactional/persistence tasks (edition/insertion/deletion, etc.).
The following diagram shows the CQRS pattern in its simplest form:
Escalável :: pois os comando são assíncronos, imperativos (FinalizarCompra) e suas respostas são tratados por eventos;
Performance :: pois lê dados de uma base replicada, desnormalizada na maiorida das vezes;
Evita locks :: pois os comandos tem uma única fila (túnel) de execução;
Complexidade :: fica fácil identificar o que um comando faz, pois ele é responsável por uma única operação
Referências:
http://www.devmedia.com.br/cqrs-um-modelo-para-aplicacoes-escalaveis/29844
http://rnascimento.me/como_cqrs_ajudou_o_lucarino_a_escalar_seu_app/