Upload
-secon2014
View
332
Download
1
Embed Size (px)
DESCRIPTION
Типовые проекты, где в центре системы стоит реляционная БД, перестают удовлетворять современным требованиям рынка ПО. В норму входит использование очередей, поисковых движков, NoSQL решений, облачных технологий. Всё это требует перехода от «классической» архитектуры к дроблению системы на набор низкосвязанных компонентов, взаимодействующих друг с другом через сообщения или интерфейсы. Мы рассмотрим примеры типовых подходов и инструментов, которые сейчас актуальны в мире разработки масштабируемых систем.
Citation preview
Переход от монолитной
архитектуры к распределенной
Александр Бындю
byndyu.ru
Пенза
14 марта 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
3
Требования рынка
1. Много данных
2. Много пользователей
3. Быстрое масштабирование
4. Быстрое внесение изменений
4
Теорема CAP
1. Consistency(согласованность данных)
2.Availability(доступность)
3.Partition tolerance(устойчивость к разделению)
5
Теорема CAP
Выбираем любые два свойства
A C
P
6
Какие реализации?
• Consistency + Availability
• Consistency + Partition tolerance
• Availability + Partition tolerance
7
Consistency + Availability
Надежность,
Предсказуемость,
Исторически так
сложилось
8
1. Создаем UI
2. Сборку BL
3. Сборку DAL
4. Создаем DB
5. …
6. Profit!
UI
Services
BL
DAL
DB
9
Shared DB
Приложение 1 Приложение 2 Приложение 3
CA
10
DB
Get data Set data
Set data Get data
11
12
Решим проблему с нагрузкой на
чтение данных
13
Что делать?
1. Оптимизировать скрипты выборки
2. Убираем ORM для лучшей оптимизации
3. Убираем весь код выборки в хранимки
4. Оптимизируем индексы
5. Денормализуем данные
14
Денормализация v1.0
Создать дополнительные колонки в текущих
таблицах
15
Денормализация v2.0
Создать отдельные таблицы/view для
денормализованных данных
16
Денормализация v3.0
Создать еще одну БД (хранилище) c
«плоскими» данными для чтения
1. Отдельная реляционная БД с «плоскими»
данными без связей
2. Различные NoSQL
3. Поисковые системы
17
CrUD1. Domain-driven design (DDD)
2. N- tier, onion,… architecture
3. ORM (NHibernate, Entity Framework,…)
Приложение
База
данныхPresenter
UI
Domain Model
Validation
...
18
cRud1. «чистый» SQL
2. NoSQL
3. Поисковые системы
4. Кэши
5. …
«Плоские» данные
UI
Только
выборка
19
CQRS на практикеПриложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База
данных
?
Redis
Sphinx
...
20
Обновляем синхронно
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База
данных
Redis
Sphinx
...
21
Приложение
MongoDB
Command
UI
Domain Model
Validation
...
Query Query Model
База
данных
Redis
Sphinx
...
С
о
б
ы
т
и
е
С
о
б
ы
т
и
е
Ш
и
н
а
д
а
н
н
ы
х
Обновляем асинхронно
22
Как будем
масштабировать?
23
Горизонтальное масштабирование
1. MongoDB
2. Cassandra
3. Sphinx
4. ElasticSeach
5. Couchbase
6. Redis
7. …
Client
Node1
Node2
Node3
...
24
Availability + Partition tolerance
BASE-архитектура
1. Basically Available(сбой в некоторых узлах не приводит к отказу в обслуживании)
2. Soft-state(не согласованное состояние)
3. Eventually consistent(в конце концов информация будет консистентна)
25
Eventually consistent
Какое время уйдет
на синхронизацию?
26
Пример из проекта с Couchbase
27
Облачная инфраструктура
Масштабируемся в один клик!
Даешь больше равноценных нодов!
28
Чтение данных разгрузили,
что с записью?
29
Shared DB
Приложение 1 Приложение 2 Приложение 3
CA
30
Очереди сообщений
Отправитель Получатель
1. Создание 5. Обработка
2. Отправка
3. Доставка
4. ОтправкаКанал
31
DB
1. Сервисы
сбора данных
1. Сервисы
сбора данных
Сервис11. Сервисы
сбора данных
1. Сервисы
сбора данных
Сервис21. Сервисы
сбора данных
1. Сервисы
сбора данных
Сервис31. Сервисы
сбора данных
1. Сервисы
сбора данных
...
Шина сообщений
Событие Событие Событие Событие
32
Инструменты для очереди
Утилиты:
1. RabbitMQ
2. NServiceBus
3. ActiveMQ
Облачные инструменты:
1. IronMQ, SQS
2. Windows Azure Queues
33
Готовность заказчиков к новым
подходам и инструментам
34
Enterprise vs OpenSource
35
Пример из практики
• Описание развития проекта Закупки360
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
37
Спасибо за внимание!
Буду рад ответить на ваши вопросы лично или через:
blog.byndyu.ru
alexanderbyndyu