andrii gryshchenko: "an overview of cqrs and event sourcing"

Post on 16-Apr-2017

109 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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