Будет показан пример архитектуры популярной социальной сети в Англии, переработанной на новом стеке, чтобы решить проблемы производительности, отказоустойчивости и горизонтального масштабирования. Новый стек базируется на технологиях: .NET, SignalR, Couchbase, RabbitMQ, ElasticSearch, Amazon Services (CloudFront, S3, EC2, Route 53, Balancer), Windows, Linux. Цель: показать одну из моделей архитектуры нагруженных веб-систем, практики и возможные подводные камни при разработке высоконагруженных Интернет систем.
2. Докладчик
Денис Колошко
Технический директор компании Айти Бэнд (ITBand.by)
12+ лет работы в промышленной разработке ПО
Системный архитектор
Технический консультант
Активный разработчик
Тренер
mobile: +375 29 774 89 05
E-mail: denis@koloshko.com
Skype: d.koloshko
Blog: http://it-consulting.koloshko.com
LinkedIn: http://www.linkedin.com/pub/denis-koloshko/14/89a/862
3. Айти Бэнд (IT-Band.by)
Сервис по разработке
.NET, Node.js
От защищённых бизнес систем до
производительных интернет систем
Консалтинг
Анализ безопасности веб-систем
Оптимизация производительности
Анализ архитектур
6. Статистика
50 млн документов в No-Sql
14 млн фотографий и аудио файлов
800 000 пользователей
200 000 мемориалов
Couchbase – до 5-7k операций в
секунду
Пик – 2 млн пользователя в месяц
До 50 тыс. фотографий у некоторых
пользователей
10. Август 2013. Атрибуты качества
новой архитектуры
Высокая производительность
Высокая масштабируемость
Высокая доступность
11. Вызов
2.5 месяца на первый релиз
Высокая производительность
Горизонтальное масштабирование
Бесшовная миграция и переключение
пользователей
Живая среда
Трансформация реляционной модели в
документо-ориентированную модель
12. Новый стек
Couchbase 2.2.0
RabbitMQ 3.1.5
ElasticSearch 0.90.5
ASP.NET WebAPI, ASP.NET MVC5, .NET 4.5
Amazon EC2 (виртуальные сервера)
Amazon CloudFront (CDN)
Amazon S3 (файловое хранилище)
Amazon Route 53 (DNS)
Amazon Load Balancer (балансировщик)
Amazon CloudWatch (Мониторинг)
Windows Server 2012 Standard Edition
Ubuntu Server 14
17. SPA дизайн
KnockoutJs
Лучшим решением
был бы AngularJS
Routing на клиентской
стороне
SignalR для получения
от сервера сообщений
Шаблонизатор Razor
Кэширование всех
шаблонов в памяти
ASP.NET процесса
18. Организация очереди
Любые операции
выполняющиеся > 0.5 сек
С внешним миром общается
только WorkHorse
Обратная связь организуется
на базе SignalR (временное
открытие)
WorkHorse масштабирование:
На уровне потоков
Новые инстансы на новых
машинах
От 20 до 40 одновременных
обработчиков на каждую
очередь
29. Причины
Изначальная подписка у Амазона была на 1 год, и
она заканчивается. Продление подписки нет.
Нехватка размера памяти на дата серверах
Оптимизация расходов
32. Хостинг
Front-end сервера (Windows): ex40ssd, Intel Core™
i7-4770 (8 ядер), RAM 32 Gb, 2x240 SSD RAID 1
Cервер баз данных (Linux): px90ssd, Intel Xeon E5-
1650 v2 (12 ядер), RAM 64 Gb, 2x240 SSD RAID 1
Стоимость:
700-800$ в месяц
Достижение: уменьшили стоимость на 40-50% с
увеличением мощности системы
33. Выученные уроки
Amazon балансировщик не поддерживает прямых TCP
соединений => проблема с websocket-ами
Couchbase требует как минимум 2 сервера – любой
потерянный пакет в сети => сервер помечается как dead
на 10 секунд
Couchbase обновляет индексы не сразу (в течение 5
секунд или 5000 обновлённых документов)
Окончание подписки на Amazon увеличивает цену на
EC2 в 3-4 раза
Необходимо разделение документов по бакетам в
Couchbase, индексирование новой вьюхи – около 1 часа
нестабильной работы всей системы