2. www.luxoft.com
Содержание
1. Почему CQRS?
1. Возникновение современной архитектуры
2. Проблемы CRUD подхода
3. CQRS, как инструмент решения этих проблем
2. Архитектура CQRS приложений
3. CQRS и Java: Axon Framework.
13. www.luxoft.com
Проблема 1: использование Java Bean…
Спецификация Sun Microsystems определяет JavaBeans как повторно
используемые программные компоненты, которыми можно
управлять,используя графические
конструкторы и средства IDE.
14. www.luxoft.com
… приводит к...
1. Нарушение инкапсуляции бизнес-объектов
2. Anemic model(Antipattern)
3. Ухудшение читаемости кода
4. Трудности поддержки
5. Бизнес логика переносится в методы
сервисов
17. www.luxoft.com
Проблема 4: В реальной жизни не бывает конфликтов
модификации данных
1. В бизнес процессах, происходящих в реальной жизни, не бывает
конфликтов модицикации данных
2. Даже если такой конфликт возникает, значит где-то проблема в
реализации бизнес-логики
3. CRUD не учитывает этот аспект
21. www.luxoft.com
CQRS используется в связке с шаблонами
1. CQS – Command-query separation, изобретён Бертраном Мейером в далёком 1988
году. Вкратце: метод должен быть либо командой, выполняющей какое-то действие,
либо запросом, возвращающим данные, но не одновременно.
1. CQRS – возводит CQS на уровень приложения, применяя его к компонентам.
2. Event Sourcing – все изменения состояния приложения хранятся, как
последовательность событий.
3. Eventual Consistency – позволяет увеличить доступность и масштабируемость.
Согласованность в конечном счёте (англ. eventual consistency) — модель работы с данными.
Гарантирует, что в отсутствии изменений данных, через какое-то время после последнего
обновления («в конечном счёте») все запросы будут возвращать последнее обновлённое
значение.
22. www.luxoft.com
Роль Java Bean
Java Bean используется для
отображения данных на стороне
обработки запросов, но Java Bean !=
Domain Entity.
24. www.luxoft.com
Запрашиваемые данные
Каждая таблица – денормализованное представление
данных на экране пользователя
Высокопроизводительные альтернативы –
Apache Cassandra, HBase, Hypertable…
Не обязательно применять SQL базы данных
25. www.luxoft.com
Проблема 3: Масштабируемость
• Целостность данных нужна только на стороне
обработки бизнес логики
• На стороне обработки запросов можно использовать
eventual consistency
26. www.luxoft.com
Проблема 4: В реальной жизни не бывает
конфликтов модификации данных
Представление состояния объекта в виде
последовательности событий:
+3k$ -1k$ +5k$
sum: 7k$
27. www.luxoft.com
Представление объектов, как череда событий
• Каждый агрегат - это пакет событий
• Нет необходимости использовать реляционные базы
данных
• База должна обладать ACID(Atomicity, Consistency, Isolation,
Durability) свойствами
28. www.luxoft.com
Представление объектов, как череда событий
Преимущества:
• Удобно отслеживать изменения состояния системы
• Возможность отката состояния системы до любого момента
времени
• Удобный механизм воспроизведения данных и разрешения
конфликтов
• Тестирование поведения приложения(BDD)
• Расширенные возможности для дебага
29. www.luxoft.com
Расширенные возможности для дебага
Захватить пакет событий, которые привели к ошибке
???
Воспроизвести пакет событий локально
Четко увидеть, какая последовательность действий
привела пользователя к ошибке
PROFIT
33. www.luxoft.com
Сравнение запросов
Запрос к БД
Конвертирование в DTO
Конвертирование в
доменную модель
Передача клиенту
Многослойная архитектура:
Запрос к БД
Конвертирование в DTO
Конвертирование в
доменную модель
Передача клиенту
CQRS:
35. www.luxoft.com
Команды
Преимущества использования команд:
1. Ориентация на бизнес задачи клиента
2. Удобный инструмент мониторинга и масштабирования
Команда это бизнес действие пользователя. Это то
действие, которое необходимо для реализации нужд
бизнеса.
Пример – user story: «Я, как пользователь, я хочу создавать новую
запись в адресной книге»
38. www.luxoft.com
Плюшки
Обработка сложных событий (англ. complex event
processing, CEP) заключается в обработке
множества событий, происходящих на всех уровнях
организации, при этом идентифицируются
наиболее существенные события из множества
событий, анализируется их влияние и в режиме
реального времени предпринимаются
соответствующие действия.
40. www.luxoft.com
Hail the Axon Framework
Axon framework –
достаточно
«взрослый», а так же
самый популярный и
наиболее
функциональный
из всех CQRS
фреймворков.
53. www.luxoft.com
Итого...
CQRS - решение, которое позволяет разрабатывать большие
корпоративные системы. Его использование облегчит
разработку и поддержку, позволит внедрить удобную систему
аудита, а так же практически без ограничений масштабировать
приложение. Применять CQRS для всей системы, не
обязательно, обычно его используют для сложных компонентов.
В то же время, его применение практически не оправдано для
маленьких систем.