Построение read model-ей с использованием потоков событий

69
Построение Read Model- ей с использованием потоков событий https://github.com/ denisivan0v @denisivanov

Upload: denis-ivanov

Post on 15-Jan-2017

142 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Построение Read Model-ей с использованием потоков событий

Построение Read Model-ей с использованием потоков событий

https://github.com/denisivan0v@denisivanov

Page 2: Построение Read Model-ей с использованием потоков событий

Бизнес домен

Продажи

Page 3: Построение Read Model-ей с использованием потоков событий

Бизнес домен

- Сотрудники с разными потребностями

Page 4: Построение Read Model-ей с использованием потоков событий

Бизнес домен

- Сотрудники с разными потребностями

- Много бизнес-процессов и сценариев

Page 5: Построение Read Model-ей с использованием потоков событий

Бизнес домен

- Сотрудники с разными потребностями

- Много бизнес-процессов и сценариев

- Частые проверки целостности

Page 6: Построение Read Model-ей с использованием потоков событий

Бизнес домен

- Сотрудники с разными потребностями

- Много бизнес-процессов и сценариев

- Частые проверки целостности- Отчеты

Page 7: Построение Read Model-ей с использованием потоков событий

Классический подход

User Interface

Business Logic

Database

Page 8: Построение Read Model-ей с использованием потоков событий

Классический подход

User Interface

Business Logic

DatabaseSQL Server

Page 9: Построение Read Model-ей с использованием потоков событий

Классический подход

User Interface

Business Logic

DatabaseSQL Server

ORM

Page 10: Построение Read Model-ей с использованием потоков событий

Классический подход

User Interface

Business Logic

DatabaseSQL Server

Repositories

Services

ORM

Page 11: Построение Read Model-ей с использованием потоков событий

Классический подход

User Interface

Business Logic

DatabaseSQL Server

Repositories

Services

ASP.NET MVC + JS

ORM

Page 12: Построение Read Model-ей с использованием потоков событий

Ограничения

- Потеря бизнес-смысла при работе на уровне данных

Page 13: Построение Read Model-ей с использованием потоков событий

Ограничения

- Потеря бизнес-смысла при работе на уровне данных

- Баланс между кейсами чтения и записи

Page 14: Построение Read Model-ей с использованием потоков событий

Ограничения

- Потеря бизнес-смысла при работе на уровне данных

- Баланс между кейсами чтения и записи

- Изменения схемы данных

Page 15: Построение Read Model-ей с использованием потоков событий

Ограничения

- Много параметризованных запросов

Page 16: Построение Read Model-ей с использованием потоков событий

Ограничения

- Много параметризованных запросов

- Обобщенный API

Page 17: Построение Read Model-ей с использованием потоков событий

Ограничения

- Много параметризованных запросов

- Обобщенный API- Запросы данных из многих систем

Page 18: Построение Read Model-ей с использованием потоков событий

Ограничения

- Много параметризованных запросов

- Обобщенный API- Запросы данных из многих систем- Запросы вычисляемых данных

Page 19: Построение Read Model-ей с использованием потоков событий

Другой подход

Command and Query Responsibility Segregation

Page 20: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Business Logic

Database

Thin Read Layer

Page 21: Построение Read Model-ей с использованием потоков событий

CQRS-подход

Bounded context

Page 22: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Business Logic

Database

Thin Read Layer

Page 23: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Business Logic

Database

Thin Read Layer

Database

Page 24: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Business Logic

Database

Thin Read Layer

Database

Page 25: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Domain Model

Event Store

Thin Read Layer

Database

Page 26: Построение Read Model-ей с использованием потоков событий

CQRS-подход

Eventual consistency

Page 27: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Business Logic

Database

Thin Read Layer

Database

Read Model

Page 28: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Write Model Read Model

Page 29: Построение Read Model-ей с использованием потоков событий

CQRS-подход

User Interface

Write Model Read Model

Read Model

Read Model

Page 30: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Page 31: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events

Page 32: Построение Read Model-ей с использованием потоков событий
Page 33: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events Observer

Page 34: Построение Read Model-ей с использованием потоков событий
Page 35: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events

Database

Observer

Page 36: Построение Read Model-ей с использованием потоков событий
Page 37: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events

Database

Observer

Page 38: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events Querying

API

Database

Observer

Page 39: Построение Read Model-ей с использованием потоков событий

Построение Read Model

User Interface

Business Logic

Database

Events Querying

API

Database

Observer

Page 40: Построение Read Model-ей с использованием потоков событий

Построение Read Model

NuClear Riverhttps://

github.com/2gis/nuclear-river

Page 41: Построение Read Model-ей с использованием потоков событий

NuClear River

User Interface

Business Logic

Database

Events Querying

API

Database

Observer

Page 42: Построение Read Model-ей с использованием потоков событий

NuClear River

User Interface

Business Logic

Database

Querying API

Page 43: Построение Read Model-ей с использованием потоков событий

NuClear River. Querying

- REST API на основе протокола OData

Page 44: Построение Read Model-ей с использованием потоков событий

NuClear River. Querying

- REST API на основе протокола OData

- WebAPI + OData libs + EF stack

Page 45: Построение Read Model-ей с использованием потоков событий

NuClear River. Querying

- REST API на основе протокола OData

- WebAPI + OData libs + EF stack- Кастомизация из коробки (DSL)

Page 46: Построение Read Model-ей с использованием потоков событий

NuClear River. Querying

Demo

Page 47: Построение Read Model-ей с использованием потоков событий

NuClear River. Observer

- Pipeline-based

Page 48: Построение Read Model-ей с использованием потоков событий

NuClear River. Observer

- Pipeline-based- Отдельное хранилище «фактов»

Page 49: Построение Read Model-ей с использованием потоков событий
Page 50: Построение Read Model-ей с использованием потоков событий

NuClear River. Observer

- Pipeline-based- Отдельное хранилище «фактов»- Обеспечивает согласованность

агрегатов в модели чтения

Page 51: Построение Read Model-ей с использованием потоков событий
Page 52: Построение Read Model-ей с использованием потоков событий
Page 53: Построение Read Model-ей с использованием потоков событий
Page 54: Построение Read Model-ей с использованием потоков событий
Page 55: Построение Read Model-ей с использованием потоков событий

NuClear River. Observer

- Pipeline-based- Отдельное хранилище «фактов»- Обеспечивает согласованность

агрегатов в модели чтения- Кастомизация из коробки (DSL)

Page 56: Построение Read Model-ей с использованием потоков событий

NuClear River. Telemetry

- Использует ELK stack

Page 57: Построение Read Model-ей с использованием потоков событий

NuClear River. Telemetry

- Использует ELK stack- Позволяет хранить и

анализировать любою информацию о работе системы

Page 58: Построение Read Model-ей с использованием потоков событий

NuClear River. Telemetry

Demo

Page 59: Построение Read Model-ей с использованием потоков событий

Profits

Page 60: Построение Read Model-ей с использованием потоков событий

Profits

- Высокая согласованность с бизнесом

Page 61: Построение Read Model-ей с использованием потоков событий

Profits

- Высокая согласованность с бизнесом

- Выбор уровня связанности моделей чтения

Page 62: Построение Read Model-ей с использованием потоков событий

Profits

- Высокая согласованность с бизнесом

- Выбор уровня связанности моделей чтения

- API на основе открытого стандарта

Page 63: Построение Read Model-ей с использованием потоков событий

Profits

- Высокая согласованность с бизнесом

- Выбор уровня связанности моделей чтения

- API на основе открытого стандарта- Производительность

Page 64: Построение Read Model-ей с использованием потоков событий

Summary

- Классический подход работает, но не всегда

Page 65: Построение Read Model-ей с использованием потоков событий

Summary

- Классический подход работает, но не всегда

- Начинайте с бизнес-кейсов, определите bounded context

Page 66: Построение Read Model-ей с использованием потоков событий

Summary

- Классический подход работает, но не всегда

- Начинайте с бизнес-кейсов, определите bounded context

- Выбирайте подходящий способ решения задач

Page 67: Построение Read Model-ей с использованием потоков событий

Summary

- Классический подход работает, но не всегда

- Начинайте с бизнес-кейсов, определите bounded context

- Выбирайте подходящий способ решения задач

- Используйте NuClear River для экономии

Page 68: Построение Read Model-ей с использованием потоков событий

Вопросы?Денис Ивановhttps://github.com/denisivan0v@denisivanov