37
Переход от монолитной архитектуры к распределенной Александр Бындю byndyu.ru Пенза 14 марта 2014

SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

Embed Size (px)

DESCRIPTION

Типовые проекты, где в центре системы стоит реляционная БД, перестают удовлетворять современным требованиям рынка ПО. В норму входит использование очередей, поисковых движков, NoSQL решений, облачных технологий. Всё это требует перехода от «классической» архитектуры к дроблению системы на набор низкосвязанных компонентов, взаимодействующих друг с другом через сообщения или интерфейсы. Мы рассмотрим примеры типовых подходов и инструментов, которые сейчас актуальны в мире разработки масштабируемых систем.

Citation preview

Page 1: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

Переход от монолитной

архитектуры к распределенной

Александр Бындю

byndyu.ru

Пенза

14 марта 2014

Page 2: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

2

Обо мне1. Владелец компании ByndyuSoft http://byndyusoft.com

2. Консультант по вопросам разработки приложений и организации работы ITкомпаний, Certified CIAgile Professional

3. Внештатный сотрудник Академии АйТи

4. Технический блог http://blog.byndyu.ru

5. Преподаю в ЮУрГУ и ЧелГУ

6. Тренер на AgileCamp

7. Организую конференции .NET-разработчиковhttp://dotnetconf.ru

8. Веду группу по проблемам разработки приложенийhttps://groups.google.com/forum/?hl=ru&fromgroups#!forum/dotnetconf

Page 3: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

3

Требования рынка

1. Много данных

2. Много пользователей

3. Быстрое масштабирование

4. Быстрое внесение изменений

Page 4: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

4

Теорема CAP

1. Consistency(согласованность данных)

2.Availability(доступность)

3.Partition tolerance(устойчивость к разделению)

Page 5: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

5

Теорема CAP

Выбираем любые два свойства

A C

P

Page 6: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

6

Какие реализации?

• Consistency + Availability

• Consistency + Partition tolerance

• Availability + Partition tolerance

Page 7: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

7

Consistency + Availability

Надежность,

Предсказуемость,

Исторически так

сложилось

Page 8: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

8

1. Создаем UI

2. Сборку BL

3. Сборку DAL

4. Создаем DB

5. …

6. Profit!

UI

Services

BL

DAL

DB

Page 9: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

9

Shared DB

Приложение 1 Приложение 2 Приложение 3

CA

Page 10: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

10

DB

Get data Set data

Set data Get data

Page 11: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

11

Page 12: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

12

Решим проблему с нагрузкой на

чтение данных

Page 13: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

13

Что делать?

1. Оптимизировать скрипты выборки

2. Убираем ORM для лучшей оптимизации

3. Убираем весь код выборки в хранимки

4. Оптимизируем индексы

5. Денормализуем данные

Page 14: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

14

Денормализация v1.0

Создать дополнительные колонки в текущих

таблицах

Page 15: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

15

Денормализация v2.0

Создать отдельные таблицы/view для

денормализованных данных

Page 16: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

16

Денормализация v3.0

Создать еще одну БД (хранилище) c

«плоскими» данными для чтения

1. Отдельная реляционная БД с «плоскими»

данными без связей

2. Различные NoSQL

3. Поисковые системы

Page 17: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

17

CrUD1. Domain-driven design (DDD)

2. N- tier, onion,… architecture

3. ORM (NHibernate, Entity Framework,…)

Приложение

База

данныхPresenter

UI

Domain Model

Validation

...

Page 18: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

18

cRud1. «чистый» SQL

2. NoSQL

3. Поисковые системы

4. Кэши

5. …

«Плоские» данные

UI

Только

выборка

Page 19: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

19

CQRS на практикеПриложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База

данных

?

Redis

Sphinx

...

Page 20: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

20

Обновляем синхронно

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База

данных

Redis

Sphinx

...

Page 21: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

21

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База

данных

Redis

Sphinx

...

С

о

б

ы

т

и

е

С

о

б

ы

т

и

е

Ш

и

н

а

д

а

н

н

ы

х

Обновляем асинхронно

Page 22: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

22

Как будем

масштабировать?

Page 23: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

23

Горизонтальное масштабирование

1. MongoDB

2. Cassandra

3. Sphinx

4. ElasticSeach

5. Couchbase

6. Redis

7. …

Client

Node1

Node2

Node3

...

Page 24: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

24

Availability + Partition tolerance

BASE-архитектура

1. Basically Available(сбой в некоторых узлах не приводит к отказу в обслуживании)

2. Soft-state(не согласованное состояние)

3. Eventually consistent(в конце концов информация будет консистентна)

Page 25: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

25

Eventually consistent

Какое время уйдет

на синхронизацию?

Page 26: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

26

Пример из проекта с Couchbase

Page 27: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

27

Облачная инфраструктура

Масштабируемся в один клик!

Даешь больше равноценных нодов!

Page 28: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

28

Чтение данных разгрузили,

что с записью?

Page 29: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

29

Shared DB

Приложение 1 Приложение 2 Приложение 3

CA

Page 30: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

30

Очереди сообщений

Отправитель Получатель

1. Создание 5. Обработка

2. Отправка

3. Доставка

4. ОтправкаКанал

Page 31: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

31

DB

1. Сервисы

сбора данных

1. Сервисы

сбора данных

Сервис11. Сервисы

сбора данных

1. Сервисы

сбора данных

Сервис21. Сервисы

сбора данных

1. Сервисы

сбора данных

Сервис31. Сервисы

сбора данных

1. Сервисы

сбора данных

...

Шина сообщений

Событие Событие Событие Событие

Page 32: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

32

Инструменты для очереди

Утилиты:

1. RabbitMQ

2. NServiceBus

3. ActiveMQ

Облачные инструменты:

1. IronMQ, SQS

2. Windows Azure Queues

Page 33: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

33

Готовность заказчиков к новым

подходам и инструментам

Page 34: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

34

Enterprise vs OpenSource

Page 35: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

35

Пример из практики

• Описание развития проекта Закупки360

Page 36: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

36

Полезные ссылки

• http://www.allthingsdistributed.com/2008/12/eventually_consistent.html

• http://cacm.acm.org/magazines/2011/6/108666-if-you-have-too-much-data-then-good-enough-is-good-enough/fulltext

• http://citforum.ru/gazeta/154/

• http://en.wikipedia.org/wiki/CAP_theorem

• http://martinfowler.com/bliki/ReportingDatabase.html

• http://queue.acm.org/detail.cfm?id=1394128

Page 37: SECON'2014 - Александр Бындю - Переход от монолитной архитектуры к распределенной

37

Спасибо за внимание!

Буду рад ответить на ваши вопросы лично или через:

blog.byndyu.ru

alexanderbyndyu

[email protected]