от авгиевых конюшен к звездам
TRANSCRIPT
От авгиевых конюшен к звездам
Гончаров ЛевByndyuSoft
9-я конференция .NET разработчиков12 октября 2014dotnetconf.ru
2
Описание проекта
3
Задача
Максимальная отказоустойчивость при минимальном бюджете
4
Crawlers
5
Crawlers
• Скачать• Обработать• Сохранить
6
Crawlers
7
Crawlers. Их много, ты один
• Упростить развертывание• Ввести метрики эффективности
работы• Сбор ошибок• Необработанные исключения тоже
надо собирать
8
MsSQL
9
MsSQL
Описание:• Хранит данные за пол года• БД до 1ТБ
10
MsSQL Cluster
• Общее хранилище• Transactions logs• Log shipping• AlwaysOn• Mirroring
11
MsSQL медленно работает
• Проверить CPU/RAM/ DISK queue• Посмотреть статистику запросов• Посмотреть профайлером• Оптимизировать запросы
12
Найди затык по графику
13
База стала узким местом
Временное решение: SSD
Решение: Message Queue
14
Message Queue
15
Message Queue
16
Message Queue
• В БД пишется только результат• Снижение нагрузки на БД • Масштабируемость
17
Message Queue
Варианты резервирования:• Холодный резерв
VM Replica
• Горячий резервCluster
18
WEB
19
WEB
• Генерирует контент• Отдает статику
20
WEB перестал справляться
21
WEB Static
22
WEB Static
Описание:• Хранит изображения из статей• Конвертирует• При необходимости скачивает с
источника• Будет до 2ТБ изображений
23
WEB Static
24
WEB Static
Варианты синхронизации файлов:• На уровне железа (СХД)• На уровне ОС (DFS)• На уровне приложения (Сохранять
краулером на все сервера)
25
WEB Static
Планировали DNS Round Robin
26
WEB Static
Получилось NLB
27
WEB CDN
28
WEB CDN
• Уменьшает нагрузку на наши сервера
• Может иметь странности• Можно положить на тестах
29
WEB Balancer
30
WEB Balancer
31
WEB Balancer
Варианты реализаций:• Аппаратный балансировщик• IIS + ARR• Nginx• Haproxy
32
WEB Balancer
33
WEB Balancer
Проблема: Пользователь должен попадать на тот сервер где был раньше
Решение: приложение выставляет Cookie
34
MongoDB
35
CAP Теорема
• Consistency (Согласованность)• Availability (Доступность)• Partition tolerance (Устойчивать
к разделению)
Выберите два
36
MongoDB
Проблема: SQL не справляется на запись
Решение: NoSQL, т.к данные поддаются разделению
37
MongoDB Cluster
38
MongoDB проблемы
• Backups• Upgrades• BUGS
39
Backups
40
Backups
Админы делятся на тех, кто:• Делает бэкапы• Делает бэкапы в географически
разные места(правило 3-2-1)• Проверяет бэкапы
41
Как это заливать Все?
42
Обычная заливка
• Миграции• Сайты• Краулеры
43
Заливка
Проблема: сложный и неочевидный процесс заливки, правя конфиги
Решение: трансформации, скрипты заливки
44
Заливка
Проблема: монстрообразные скрипты
Решение: переход к объектам – можно выбирать что залить
45
Monitoring
46
Monitoring
• Отрицание• Гнев• Смирение
47
Monitoring
Система лучше или хуже работает после заливки?
48
Monitoring
А всем ли удобно читать письма?
49
Заключение
2012 2014
Серверов 3 60RAM GB 72 800SSD GB 200 10 000MsSQL GB 150 700MongoDB GB 0 700Статей за сутки
10 000 150 000