Andrii Gryshchenko: "An Overview of CQRS and Event Sourcing"
Post on 16-Apr-2017
109 Views
Preview:
Transcript
www.luxoft.com
CQRS and Event Sourcing
Грищенко Андрей
(GryshchenkoAndrey@gmail.com)
November 7, 2016
www.luxoft.com
Содержание
1. Почему CQRS?
1. Возникновение современной архитектуры
2. Проблемы CRUD подхода
3. CQRS, как инструмент решения этих проблем
2. Архитектура CQRS приложений
3. CQRS и Java: Axon Framework.
www.luxoft.com
1. Почему CQRS?
www.luxoft.com
Эволюция представления документов
www.luxoft.com
Время бумажных документов
Эра бумажных архивов
www.luxoft.com
Цифровые архивы
Эра цифровых архивов
www.luxoft.com
Раннее управление цифровыми архивами
Поиск в цифровых архивах
www.luxoft.com
Автоматизация в цифровых архивах
Пришло время CRUD
www.luxoft.com
Эра бизнес процессов
www.luxoft.com
Недостаток CRUD
CRUD подход
ориентирован не на
отображение
модели бизнес
логики, а на
манипуляцию
данными
www.luxoft.com
2. Проблемы CRUD
www.luxoft.com
Архитектура типичного приложения
Client
(UI)
Domain
Model
(Logic)
write
read
Database
(Data)
write
read
www.luxoft.com
Проблема 1: использование Java Bean…
Спецификация Sun Microsystems определяет JavaBeans как повторно
используемые программные компоненты, которыми можно
управлять,используя графические
конструкторы и средства IDE.
www.luxoft.com
… приводит к...
1. Нарушение инкапсуляции бизнес-объектов
2. Anemic model(Antipattern)
3. Ухудшение читаемости кода
4. Трудности поддержки
5. Бизнес логика переносится в методы
сервисов
www.luxoft.com
Проблема 2: оптимизация производительности
и её последствия:
Использование ORM tool вместе с
денормализацией данных размывает
www.luxoft.com
Проблема 3: Масштабируемость
В теореме САР(Consistency,
Availability, Partition), мы всегда
выбираем целостность
данных.
www.luxoft.com
Проблема 4: В реальной жизни не бывает конфликтов
модификации данных
1. В бизнес процессах, происходящих в реальной жизни, не бывает
конфликтов модицикации данных
2. Даже если такой конфликт возникает, значит где-то проблема в
реализации бизнес-логики
3. CRUD не учитывает этот аспект
www.luxoft.com
CQRS, как возможное решение
3. CQRS как решение
www.luxoft.com
CQRS
CQRS – Command Query Responsibility Segregation
Разделение ответственности на команды и запросы
www.luxoft.com
Архитектура
www.luxoft.com
CQRS используется в связке с шаблонами
1. CQS – Command-query separation, изобретён Бертраном Мейером в далёком 1988
году. Вкратце: метод должен быть либо командой, выполняющей какое-то действие,
либо запросом, возвращающим данные, но не одновременно.
1. CQRS – возводит CQS на уровень приложения, применяя его к компонентам.
2. Event Sourcing – все изменения состояния приложения хранятся, как
последовательность событий.
3. Eventual Consistency – позволяет увеличить доступность и масштабируемость.
Согласованность в конечном счёте (англ. eventual consistency) — модель работы с данными.
Гарантирует, что в отсутствии изменений данных, через какое-то время после последнего
обновления («в конечном счёте») все запросы будут возвращать последнее обновлённое
значение.
www.luxoft.com
Роль Java Bean
Java Bean используется для
отображения данных на стороне
обработки запросов, но Java Bean !=
Domain Entity.
www.luxoft.com
Проблема 2: Оптимизация
производительности и её последствия
Денормализация данных выполняется только на
стороне обработки запросов. Доменная область
не тронута.
www.luxoft.com
Запрашиваемые данные
Каждая таблица – денормализованное представление
данных на экране пользователя
Высокопроизводительные альтернативы –
Apache Cassandra, HBase, Hypertable…
Не обязательно применять SQL базы данных
www.luxoft.com
Проблема 3: Масштабируемость
• Целостность данных нужна только на стороне
обработки бизнес логики
• На стороне обработки запросов можно использовать
eventual consistency
www.luxoft.com
Проблема 4: В реальной жизни не бывает
конфликтов модификации данных
Представление состояния объекта в виде
последовательности событий:
+3k$ -1k$ +5k$
sum: 7k$
www.luxoft.com
Представление объектов, как череда событий
• Каждый агрегат - это пакет событий
• Нет необходимости использовать реляционные базы
данных
• База должна обладать ACID(Atomicity, Consistency, Isolation,
Durability) свойствами
www.luxoft.com
Представление объектов, как череда событий
Преимущества:
• Удобно отслеживать изменения состояния системы
• Возможность отката состояния системы до любого момента
времени
• Удобный механизм воспроизведения данных и разрешения
конфликтов
• Тестирование поведения приложения(BDD)
• Расширенные возможности для дебага
www.luxoft.com
Расширенные возможности для дебага
Захватить пакет событий, которые привели к ошибке
???
Воспроизвести пакет событий локально
Четко увидеть, какая последовательность действий
привела пользователя к ошибке
PROFIT
www.luxoft.com
Архитектура CQRS приложений
4. Архитектура CQRS приложений
www.luxoft.com
Только подход....
CQRS – это набор шаблонов, очень
гибкий в плане реализаций. Всё
зависит от вас, ну и нужд бизнеса.
www.luxoft.com
Запросы к БД
www.luxoft.com
Сравнение запросов
Запрос к БД
Конвертирование в DTO
Конвертирование в
доменную модель
Передача клиенту
Многослойная архитектура:
Запрос к БД
Конвертирование в DTO
Конвертирование в
доменную модель
Передача клиенту
CQRS:
www.luxoft.com
Команды
www.luxoft.com
Команды
Преимущества использования команд:
1. Ориентация на бизнес задачи клиента
2. Удобный инструмент мониторинга и масштабирования
Команда это бизнес действие пользователя. Это то
действие, которое необходимо для реализации нужд
бизнеса.
Пример – user story: «Я, как пользователь, я хочу создавать новую
запись в адресной книге»
www.luxoft.com
Event store
www.luxoft.com
...и publish
www.luxoft.com
Плюшки
Обработка сложных событий (англ. complex event
processing, CEP) заключается в обработке
множества событий, происходящих на всех уровнях
организации, при этом идентифицируются
наиболее существенные события из множества
событий, анализируется их влияние и в режиме
реального времени предпринимаются
соответствующие действия.
www.luxoft.com
Реализация CQRS
5. Реализация CQRS
www.luxoft.com
Hail the Axon Framework
Axon framework –
достаточно
«взрослый», а так же
самый популярный и
наиболее
функциональный
из всех CQRS
фреймворков.
www.luxoft.com
Пример CQRS приложения на Java
Address Book -
Управление
списком адресов.
www.luxoft.com
www.luxoft.com
Создание и отправка команды
www.luxoft.com
www.luxoft.com
Обработка команды
www.luxoft.com
Бизнес действие
www.luxoft.com
Обработка события
www.luxoft.com
www.luxoft.com
Запрос
www.luxoft.com
Настройка через spring application context
www.luxoft.com
Axon - repository и event store
Repository
Event Store
JPA
JPA
www.luxoft.com
Event stores pros and cons
JPA event store MongoDB, Local Filesystem
Нет поддержки ACID,
большая скорость.
www.luxoft.com
Итого...
CQRS - решение, которое позволяет разрабатывать большие
корпоративные системы. Его использование облегчит
разработку и поддержку, позволит внедрить удобную систему
аудита, а так же практически без ограничений масштабировать
приложение. Применять CQRS для всей системы, не
обязательно, обычно его используют для сложных компонентов.
В то же время, его применение практически не оправдано для
маленьких систем.
www.luxoft.com
top related