Разделение ответственности между командами и запросами (CQRS) - это архитектурный шаблон, который отделяет команды (которые изменяют данные) от запросов (которые читают данные). См. "About cqrs tag" для получения дополнительных сведений и ссылок на учебные материалы. Не следует путать с разделением команд и запросов ([CQS]), принципом проектирования методов объекта, который включает CQRS.

Принцип разделения ответственности команд и запросов (CQRS) в своей основной форме просто вводит разделение чтения и записи. Этот простой подход дает следующие преимущества:

  • персистентность денормализованного запроса оптимизирована для операций чтения (которые обычно составляют большую часть операций ввода-вывода персистентности), что приводит к повышению производительности и удобству использования;
  • мы можем оптимизировать нашу сторону чтения для нужд пользовательского интерфейса (например, получение панели мониторинга для пользователя в одном запросе), что приведет к лучшему опыту разработки и меньшему риску поломки чего-либо на стороне записи.
  • сторона чтения может быть помещена в какое-то облачное хранилище, которое по своей сути оптимизировано для чтения, может быть разделено, реплицировано и даже распределено через CDN;
  • разгрузив чтение данных в синхронные запросы, мы автоматически увеличиваем производительность записывающей стороны - теперь она имеет меньшую нагрузку и меньшую вероятность попадания в тупик (что вы все равно должны учитывать).

Более подробное введение и дополнительные учебные материалы доступны для изучения в CQRS Starting Point.

А как насчет того, что вы слышите в любом разговоре о CQRS: команды, события, DDD, конечную согласованность и почти бесконечную масштабируемость? Это отдельные архитектурные образцы со своими достоинствами и особенностями. Эти шаблоны настолько хорошо сочетаются с принципом CQRS (разделение операций чтения и записи), что часто воспринимаются как одно целое.

Поэтому, когда мы говорим "CQRS", это часто означает: "Принцип CQRS" + "Архитектура, управляемая сообщениями, с командами, событиями и запросами" + "Методология проектирования на основе предметной области". Эта комбинация является одним из наиболее частых вариантов "архитектуры CQRS" (иногда по умолчанию туда также включен источник событий). Успех этого варианта - причина того, что вокруг оригинального термина CQRS так много шума и шумихи.

Итак, вот что у нас есть:

  • CQRS - модное слово, которое может означать многое.
  • Принцип CQRS - принцип, который диктует разделение операций чтения и записи в вашей системе.
  • Архитектуры CQRS - конкретные архитектурные проекты, основанные на принципе CQRS и нескольких других проверенных временем методологиях и подходах. Обычно они имеют четкий путь эволюции, позволяющий при необходимости переносить живое приложение на более сложный дизайн.
  • DDDD (Distributed Domain-Driven Design) - одна из архитектур CQRS, представленная Грегом Янгом. Он основан на "Принципе CQRS" + "DDD" + "Архитектура на основе сообщений" + "Источники событий".

Не следует путать с разделением команд и запросов ( cqs), принципом проектирования методов объекта, который включает CQRS.

Ссылки