Padrão CQRS - AWS Orientação prescritiva

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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 o aplicativo 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.

Visão de alto nível do padrão CQRS

O diagrama mostra o seguinte processo:

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

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

  3. O aplicativo persiste 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, os 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 persiste os dados. Os 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 do aplicativo.

  7. O aplicativo processa a consulta recebida no lado da consulta e recupera os dados do banco de dados lido.

Você pode implementar o padrão CQRS usando várias combinações de bancos de dados, incluindo:

  • Usando bancos de dados do sistema de gerenciamento de banco de dados relacional (RDBMS) tanto para o comando quanto para o lado da consulta. As operações de gravação vão para o banco de dados principal e as operações de leitura podem ser roteadas para réplicas de leitura. Exemplo: réplicas de leitura do Amazon RDS

  • Usando um banco de dados RDBMS para o lado do comando e um banco de dados NoSQL para o lado da consulta. Exemplo: modernize bancos de dados legados usando o fornecimento de eventos e o CQRS com AWS DMS

  • Usando bancos de dados NoSQL tanto para o comando quanto para o lado da consulta. Exemplo: Crie uma loja de eventos CQRS com o Amazon DynamoDB

  • Usando um banco de dados NoSQL para o lado do comando e um banco de dados RDBMS para o lado da consulta, conforme discutido no exemplo a seguir.

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 AWS

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

  • O DynamoDB é um banco de dados NoSQL totalmente gerenciado que pode 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 aos dados de baixa latência e alta taxa de transferência, o que o torna ideal para lidar com operações de comando e atualização, e o desempenho do Aurora pode ser ajustado e otimizado 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 somente no uso.

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

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

  • Você implementou o database-per-service padrã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.