Перейти к содержанию

Шаблон “Разделение ответственности команд и запросов”(CQRS)

CQRS

CQRS — Command Query Responsibility Segregation

Шаблон предназначен для разделения обязанностей. Хранимая модель данных разделяется на две части — команды и запросы. Командные модули и модель данных реализуют операции create, update и delete. Модуль и модель данных запросов реализуют операцию request. Сторона запросов синхронизирует свою модель данных с моделью данных командной стороны, подписываясь на события, котороые та публикует.
Pasted image 20211005194806.png
Помимо использования внутри одного сервиса, шаблон можно применить для описания сервиса запросов. API такого сервиса не поддерживает команды и состоит только из запросов. Для реализации запросов он обращается к БД, которую поддерживает в актуальном состоянии, подписываясь на события, публикуемые одним или несколькими сервисами.
Pasted image 20211005195125.png

Шаблон призван решить три проблемы:

  • Объединение API для извлечения данных, разбросанных по разным сервисам, приводит к затратным малоэффективным JOIN-ам, выполняемым в памяти
  • Сервис, владеющий данными, хранит их в формате или БД, которые не имеют эффективной поддержки нужного запроса
  • Необходимость разделения ответственности означает, что реализацией запроса должен заниматься не тот сервис, который владеет данными.

Преимущества

  • Возможность эффективной реализации запросов в микросервисной архитектуре
  • Возможность эффективной реализации разнородных запросов
  • Возможность выполнения запросов в приложении, основанном на порождении событий
  • Улучшенное разделение ответственности

Недостатки

  • Более сложная архитектура
  • Отставание репликации

Ссылки

https://microservices.io/patterns/data/cqrs.html
Подробнее о преимуществах
Подробнее о недостатках


Последнее обновление : 29 июня 2023 г.
Дата создания : 21 июля 2022 г.

Комментарии

Комментарии