40
Переход от монолитной архитектуры к распределенной Александр Бындю http://byndyu.ru 8-я конференция .NET разработчиков 6 апреля 2014 dotnetconf.ru

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

Embed Size (px)

DESCRIPTION

По материалам конференции .NET разработчиков - http://dotnetconf.ru/materialy/frommonolittodistributed

Citation preview

Page 1: Переход от монолитной архитектуры к распределенной

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

Александр Бындюhttp://byndyu.ru

8-я конференция .NET разработчиков6 апреля 2014dotnetconf.ru

Page 2: Переход от монолитной архитектуры к распределенной

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: Переход от монолитной архитектуры к распределенной

3

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

1. Много данных2. Много пользователей3. Быстрое масштабирование4. Быстрое внесение изменений

Page 4: Переход от монолитной архитектуры к распределенной

4

Теорема CAP

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

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

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

Page 5: Переход от монолитной архитектуры к распределенной

5

Теорема CAP

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

A C

P

Page 6: Переход от монолитной архитектуры к распределенной

6

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

Consistency + Availability(MSSQL на сервере)

Consistency + Partition tolerance(MSSQL на кластере с транзакцией)

Availability + Partition tolerance(NoSQL решения)

Page 7: Переход от монолитной архитектуры к распределенной

7

Consistency + Availability

Надежность,Предсказуемость,Исторически так сложилось

Page 8: Переход от монолитной архитектуры к распределенной

8

1.Создаем UI2.Сборку BL3.Сборку DAL4.Создаем DB5.…6.Profit!

UI

Services

BL

DAL

DB

Page 9: Переход от монолитной архитектуры к распределенной

9

Website Сервис1 Сервис2

Shared DB

CA

Page 10: Переход от монолитной архитектуры к распределенной

10

DB

Get data Set data

Set data Get data

Page 11: Переход от монолитной архитектуры к распределенной

11

Page 12: Переход от монолитной архитектуры к распределенной

12

Решим проблему с нагрузкой на чтение данных

Page 13: Переход от монолитной архитектуры к распределенной

13

Что делать?

1. Оптимизировать скрипты выборки2. Убираем ORM для лучшей

оптимизации3. Убираем весь код выборки в

хранимки4. Оптимизируем индексы5. Денормализуем данные

Page 14: Переход от монолитной архитектуры к распределенной

14

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

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

SELECT pt.CodeFROM Products pINNER JOIN ProductType pt ON p.ProductTypeID = pt.ProductTypeIDWHERE p.ProductID = 20

Page 15: Переход от монолитной архитектуры к распределенной

15

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

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

Page 16: Переход от монолитной архитектуры к распределенной

16

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

Создать еще одну БД (хранилище) c «плоскими» данными для чтения

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

2. Различные NoSQL3. Поисковые системы

Page 17: Переход от монолитной архитектуры к распределенной

17

cRud1. «Плоский» SQL2. NoSQL3. Поисковые системы4. Кэши5. …

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

UI

Только выборка

Page 18: Переход от монолитной архитектуры к распределенной

18

CrUD1. Domain-driven design (DDD)2. N- tier, onion,… architecture3. ORM (NHibernate, Entity Framework,

…)Приложение

База данных

Presenter

UI

Domain Model

Validation

...

Page 19: Переход от монолитной архитектуры к распределенной

19

Отделяем чтение от записи

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База данных

Redis

Sphinx

...

Page 20: Переход от монолитной архитектуры к распределенной

20

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

• Cassandra• ElasticSearch• Couchbase• …

Client

Node1

Node2

Node3

...

MongoDB

Redis

Sphinx

...

Page 21: Переход от монолитной архитектуры к распределенной

21

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

Масштабируемся в один клик!Даешь больше равноценных нодов!

Page 22: Переход от монолитной архитектуры к распределенной

22

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База данных

?

Redis

Sphinx

...

Как синхронизировать хранилища?

Page 23: Переход от монолитной архитектуры к распределенной

23

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

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База данных

Redis

Sphinx

...

Page 24: Переход от монолитной архитектуры к распределенной

24

Приложение

MongoDB

Command

UI

Domain Model

Validation

...

Query Query Model

База данных

Redis

Sphinx

...

Событие

Событие

Шина

данных

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

Page 25: Переход от монолитной архитектуры к распределенной

25

BASE-архитектураAvailability + Partition tolerance

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

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

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

Page 26: Переход от монолитной архитектуры к распределенной

26

Eventually consistent

Какое время уйдетна синхронизацию?

Page 27: Переход от монолитной архитектуры к распределенной

27

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

Page 28: Переход от монолитной архитектуры к распределенной

28

Чтение данных разгрузили, что с записью?

Page 29: Переход от монолитной архитектуры к распределенной

29

Website Сервис1 Сервис2

Shared DB

CA

Page 30: Переход от монолитной архитектуры к распределенной

30

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

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

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

2. Отправка

3. Доставка

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

Page 31: Переход от монолитной архитектуры к распределенной

31

DB

1. Сервисы сбора данных

1. Сервисы сбора данныхСервис1

1. Сервисы сбора данных

1. Сервисы сбора данныхСервис2

1. Сервисы сбора данных

1. Сервисы сбора данныхСервис3

1. Сервисы сбора данных

1. Сервисы сбора данных

...

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

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

Page 32: Переход от монолитной архитектуры к распределенной

32

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

Утилиты:1. RabbitMQ2. NServiceBus3. ActiveMQ

Облачные инструменты:4. IronMQ, SQS5. Windows Azure Queues

Page 33: Переход от монолитной архитектуры к распределенной

33

Пример на реальном проекте

Page 34: Переход от монолитной архитектуры к распределенной

34

Page 35: Переход от монолитной архитектуры к распределенной

35

Page 36: Переход от монолитной архитектуры к распределенной

36

1. Сервисы сбора данных

2. Скачивание HTML

3. Создание сущностей

4. Анализ данных

DB+ Fulltext Search

Sphinx

Веб-приложение

Page 37: Переход от монолитной архитектуры к распределенной

37

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

2. Скачивание HTML

3. Создание сущностей

4. Анализ данных

DBFulltext Search

Sphinx

Веб-приложение

Шин

а со

общ

ений

(Iro

nMQ

)

AWS S3

Page 38: Переход от монолитной архитектуры к распределенной

38

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

1. Сервисы сбора данных

2. Скачивание HTML

3. Создание сущностей

4. Анализ данных

DB

Веб-приложение

Шин

а со

общ

ений

(Iro

nMQ

)

AWS S3

SphinxSphinx

SphinxSphinx

RedisRedisRedis

Page 40: Переход от монолитной архитектуры к распределенной

40

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

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

blog.byndyu.ru

alexanderbyndyu

[email protected]