Padrão CQRS - Recomendações da AWS

Padrão CQRS

O padrão de segmentação de responsabilidade de consulta de comando (CQRS) separa a mutação de dados, ou a parte do comando de um sistema, da parte de consulta. Você pode usar o padrão CQRS para separar atualizações e consultas se elas tiverem requisitos diferentes de taxa de throughput, latência ou consistência. O padrão CQRS divide a aplicação em duas partes (o lado do comando e o lado da consulta), conforme mostrado no diagrama a seguir. O lado do comando trata das solicitações create, update e delete. O lado da consulta executa a parte query usando as réplicas de leitura.

Visualização de alto nível do padrão CQRS

O diagrama mostra o seguinte processo:

  1. A empresa interage com a aplicação enviando comandos por meio de uma API. Comandos são ações como criar, atualizar e excluir dados.

  2. A aplicação processa o comando recebido no lado do comando. Isso envolve validar, autorizar e executar a operação.

  3. A aplicação mantém os dados do comando no banco de dados de gravação (comando).

  4. Depois que o comando é armazenado no banco de dados de gravação, eventos são acionados para atualizar os dados no banco de dados de leitura (consulta).

  5. O banco de dados de leitura (consulta) processa e mantém os dados. Bancos de dados de leitura foram projetados para serem otimizados para requisitos específicos de consulta.

  6. A empresa interage com as APIs de leitura para enviar consultas ao lado da consulta da aplicação.

  7. A aplicação processa a consulta recebida no lado da consulta e recupera os dados do banco de dados lido.

É possível implementar o padrão CQRS usando várias combinações de bancos de dados, incluindo:

Na ilustração a seguir, um armazenamento de dados NoSQL, como o DynamoDB, é usado para otimizar o throughput e fornecer capacidades de consulta flexíveis. Isso proporciona alta escalabilidade de gravação em cargas de trabalho que têm padrões de acesso bem definidos quando você adiciona dados. Um banco de dados relacional, como o Amazon Aurora, fornece uma funcionalidade de consulta complexa. Um stream do DynamoDB envia dados para uma função do Lambda que atualiza a tabela Aurora.

Padrão CQRS implementado com serviços da AWS

A implementação do padrão CQRS com o DynamoDB e o Aurora oferece os seguintes principais benefícios:

  • O DynamoDB é um banco de dados NoSQL totalmente gerenciado capaz de lidar com operações de gravação de alto volume, e o Aurora oferece alta escalabilidade de leitura para consultas complexas no lado da consulta.

  • O DynamoDB fornece acesso a dados de baixa latência e alto throughput, o que o torna ideal para lidar com operações de comando e atualização, e a performance do Aurora pode ser ajustada e otimizada para consultas complexas.

  • Tanto o DynamoDB quanto o Aurora oferecem opções sem servidor, o que permite que sua empresa pague por recursos com base apenas no uso.

  • O DynamoDB e o Aurora são serviços totalmente gerenciados, o que reduz a carga operacional do gerenciamento de bancos de dados, backups e escalabilidade.

Você deve considerar o uso do padrão CQRS se:

  • Você implementou o padrão de banco de dados por serviço e deseja unir dados de vários microsserviços.

  • Suas cargas de trabalho de leitura e gravação têm requisitos separados de escalabilidade, latência e consistência.

  • A consistência eventual é aceitável para as consultas de leitura.

Importante

O padrão CQRS normalmente resulta em uma eventual consistência entre os armazenamentos de dados.