Upload
alexander-byndyu
View
133
Download
1
Embed Size (px)
DESCRIPTION
По материалам конференции .NET разработчиков - http://dotnetconf.ru/materialy/frommonolittodistributed
Citation preview
Переход от монолитной архитектуры к распределенной
Александр Бындюhttp://byndyu.ru
8-я конференция .NET разработчиков6 апреля 2014dotnetconf.ru
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
3
Требования рынка
1. Много данных2. Много пользователей3. Быстрое масштабирование4. Быстрое внесение изменений
4
Теорема CAP
1.Consistency(согласованность данных)
2.Availability(доступность)
3.Partition tolerance(устойчивость к разделению)
5
Теорема CAP
Выбираем любые два свойства
A C
P
6
Какие реализации?
Consistency + Availability(MSSQL на сервере)
Consistency + Partition tolerance(MSSQL на кластере с транзакцией)
Availability + Partition tolerance(NoSQL решения)
7
Consistency + Availability
Надежность,Предсказуемость,Исторически так сложилось
8
1.Создаем UI2.Сборку BL3.Сборку DAL4.Создаем DB5.…6.Profit!
UI
Services
BL
DAL
DB
9
Website Сервис1 Сервис2
Shared DB
CA
10
DB
Get data Set data
Set data Get data
11
12
Решим проблему с нагрузкой на чтение данных
13
Что делать?
1. Оптимизировать скрипты выборки2. Убираем ORM для лучшей
оптимизации3. Убираем весь код выборки в
хранимки4. Оптимизируем индексы5. Денормализуем данные
14
Денормализация v1.0
Создать дополнительные колонки в текущих таблицах
SELECT pt.CodeFROM Products pINNER JOIN ProductType pt ON p.ProductTypeID = pt.ProductTypeIDWHERE p.ProductID = 20
15
Денормализация v2.0
Создать отдельные таблицы/view для денормализованных данных
16
Денормализация v3.0
Создать еще одну БД (хранилище) c «плоскими» данными для чтения
1. Отдельная реляционная БД с «плоскими» данными без связей
2. Различные NoSQL3. Поисковые системы
17
cRud1. «Плоский» SQL2. NoSQL3. Поисковые системы4. Кэши5. …
«Плоские» данные
UI
Только выборка
18
CrUD1. Domain-driven design (DDD)2. N- tier, onion,… architecture3. ORM (NHibernate, Entity Framework,
…)Приложение
База данных
Presenter
UI
Domain Model
Validation
...
19
Отделяем чтение от записи
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База данных
Redis
Sphinx
...
20
Горизонтальное масштабирование
• Cassandra• ElasticSearch• Couchbase• …
Client
Node1
Node2
Node3
...
MongoDB
Redis
Sphinx
...
21
Облачная инфраструктура
Масштабируемся в один клик!Даешь больше равноценных нодов!
22
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База данных
?
Redis
Sphinx
...
Как синхронизировать хранилища?
23
Обновляем синхронно
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База данных
Redis
Sphinx
...
24
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База данных
Redis
Sphinx
...
Событие
Событие
Шина
данных
Обновляем асинхронно
25
BASE-архитектураAvailability + Partition tolerance
1.Basically Available(сбой в некоторых узлах не приводит к отказу в обслуживании)
2.Soft-state(не согласованное состояние)
3.Eventually consistent(в конце концов информация будет консистентна)
26
Eventually consistent
Какое время уйдетна синхронизацию?
27
Пример из проекта с Couchbase
28
Чтение данных разгрузили, что с записью?
29
Website Сервис1 Сервис2
Shared DB
CA
30
Очереди сообщений
Отправитель Получатель
1. Создание 5. Обработка
2. Отправка
3. Доставка
4. ОтправкаКанал
31
DB
1. Сервисы сбора данных
1. Сервисы сбора данныхСервис1
1. Сервисы сбора данных
1. Сервисы сбора данныхСервис2
1. Сервисы сбора данных
1. Сервисы сбора данныхСервис3
1. Сервисы сбора данных
1. Сервисы сбора данных
...
Шина сообщений
Событие Событие Событие Событие
32
Инструменты для очереди
Утилиты:1. RabbitMQ2. NServiceBus3. ActiveMQ
Облачные инструменты:4. IronMQ, SQS5. Windows Azure Queues
33
Пример на реальном проекте
34
35
36
1. Сервисы сбора данных
2. Скачивание HTML
3. Создание сущностей
4. Анализ данных
DB+ Fulltext Search
Sphinx
Веб-приложение
37
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
2. Скачивание HTML
3. Создание сущностей
4. Анализ данных
DBFulltext Search
Sphinx
Веб-приложение
Шин
а со
общ
ений
(Iro
nMQ
)
AWS S3
38
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
1. Сервисы сбора данных
2. Скачивание HTML
3. Создание сущностей
4. Анализ данных
DB
Веб-приложение
Шин
а со
общ
ений
(Iro
nMQ
)
AWS S3
SphinxSphinx
SphinxSphinx
RedisRedisRedis
39
Полезные ссылки
1. Eventually Consistent – Revisited, Werner Vogels
2. If You Have Too Much Data, then 'Good Enough' Is Good Enough, Pat Helland
3. Ошибки в системах баз данных, согласованность "в конечном счете" и теорема CAP, Майкл Стоунбрейкер
4. CAP theorem, Wikipedia
5. Reporting Database, Martin Fowler
6. BASE: An Acid Alternative, Dan Pritchett
40
Спасибо за внимание!
Буду рад ответить на ваши вопросы лично или через:
blog.byndyu.ru
alexanderbyndyu