Шаблон “Разделение ответственности команд и запросов”(CQRS)¶
CQRS
CQRS — Command Query Responsibility Segregation
Шаблон предназначен для разделения обязанностей. Хранимая модель данных разделяется на две части — команды и запросы. Командные модули и модель данных реализуют операции create, update и delete. Модуль и модель данных запросов реализуют операцию request. Сторона запросов синхронизирует свою модель данных с моделью данных командной стороны, подписываясь на события, котороые та публикует.

Помимо использования внутри одного сервиса, шаблон можно применить для описания сервиса запросов. API такого сервиса не поддерживает команды и состоит только из запросов. Для реализации запросов он обращается к БД, которую поддерживает в актуальном состоянии, подписываясь на события, публикуемые одним или несколькими сервисами.

Шаблон призван решить три проблемы:¶
- Объединение API для извлечения данных, разбросанных по разным сервисам, приводит к затратным малоэффективным JOIN-ам, выполняемым в памяти
- Сервис, владеющий данными, хранит их в формате или БД, которые не имеют эффективной поддержки нужного запроса
- Необходимость разделения ответственности означает, что реализацией запроса должен заниматься не тот сервис, который владеет данными.
Преимущества¶
- Возможность эффективной реализации запросов в микросервисной архитектуре
- Возможность эффективной реализации разнородных запросов
- Возможность выполнения запросов в приложении, основанном на порождении событий
- Улучшенное разделение ответственности
Недостатки¶
- Более сложная архитектура
- Отставание репликации
Ссылки¶
https://microservices.io/patterns/data/cqrs.html
Подробнее о преимуществах
Подробнее о недостатках
Дата создания : 21 июля 2022 г.