Upload
tanya-denisyuk
View
362
Download
8
Embed Size (px)
DESCRIPTION
Будет показан пример архитектуры популярной социальной сети в Англии, переработанной на новом стеке, чтобы решить проблемы производительности, отказоустойчивости и горизонтального масштабирования. Новый стек базируется на технологиях: .NET, SignalR, Couchbase, RabbitMQ, ElasticSearch, Amazon Services (CloudFront, S3, EC2, Route 53, Balancer), Windows, Linux. Цель: показать одну из моделей архитектуры нагруженных веб-систем, практики и возможные подводные камни при разработке высоконагруженных Интернет систем.
Citation preview
Денис Колошко
HDCONFHDCONF
Денис Колошко
Технический директор компании Айти Бэнд (ITBand.by)
12+ лет работы в промышленной разработке ПО Системный архитектор Технический консультант Активный разработчик Тренер mobile: +375 29 774 89 05 E-mail: [email protected] Skype: d.koloshko Blog: http://it-consulting.koloshko.com LinkedIn: http://www.linkedin.com/pub/denis-koloshko/14/89a/862
Докладчик
Сервис по разработке
.NET, Node.js
От защищённых бизнес систем до производительных интернет систем
Консалтинг
Анализ безопасности веб-систем
Оптимизация производительности
Анализ архитектур
Айти Бэнд (IT-Band.by)
GoneTooSoon.org
50 млн документов в No-Sql
14 млн фотографий и аудио файлов
800 000 пользователей
200 000 мемориалов
Couchbase – до 5-7k операций в секунду
Пик – 2 млн пользователя в месяц
До 50 тыс. фотографий у некоторых пользователей
Статистика
Первая архитектура
2007
Новый стек
(Amazon)
2013
Смена провайдера
(Amazon+Hetzner)
2014
Развитие архитектуры
PHP
PostgreSQL
NFS, GlusterFS
Apache
Nginx
Первоначальный стек
Производительность
Сложность масштабирования
Старый стек. Проблемы
Высокая производительность
Высокая масштабируемость
Высокая доступность
Август 2013. Атрибуты качества новой архитектуры
2.5 месяца на первый релиз
Высокая производительность
Горизонтальное масштабирование
Бесшовная миграция и переключение пользователей
Живая среда
Трансформация реляционной модели в документо-ориентированную модель
Вызов
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
Новый стек
Front-end Windows сервер: c1.medium, 2 cores, RAM 1.7 Gb
Сервер данных: m2.2xlarge, 4 cores, RAM 34.2GB, EBS 100Gb
Стоимость: Всего: 1200 – 1400 USD 80% всей стоимости 5 виртуальных серверов Подписка на зарезервированные инстансы
серверов
Хостинг
Немного о дата миграции
SPA дизайн
KnockoutJs
Лучшим решением был бы AngularJS
Routing на клиентской стороне
SignalR для получения от сервера сообщений
Шаблонизатор Razor
Кэширование всех шаблонов в памяти ASP.NET процесса
Организация очереди
Любые операции выполняющиеся > 0.5 сек
С внешним миром общается только WorkHorse
Обратная связь организуется на базе SignalR (временное открытие)
WorkHorse масштабирование: На уровне потоков Новые инстансы на новых
машинах
От 20 до 40 одновременных
обработчиков на каждую очередь
Откуда требование в 0.5 секунды
ASP.NET MVC, IIS
Конфиги одинаковые
Master
Выполнение запланированных задач
Периодические платежи
Генерация SiteMaps
WorkHorse
Lucene.NET -> Solr -> ElasticSearch
2 млн документов (профили пользователей, мемориалы, форум)
AutoComplete
Отдельная бизнес-модель для поиска (только необходимые поля с метаинформацией)
Boosting полей
Фильтрация, сортировка
Поиск. ElasticSearch
Couchbase 2.0: Membase (memcached + file sync) + CouchDB
Использование как key-value хранилища и как документ-ориентированного хранилища
> 50 млн документов
Кластер 60 Gb из 2 машин (ограничение – Сouchbase версии Enterpise на 2 прод. машины)
Средняя нагрузка – 500 запросов/сек
Максимальные пики –5-7K запросов/секунду
Дата миграция – 70К запросов/секунду
Пик – 250К запросов/секунду
Хранилище. Couchbase
Couchbase. Немного статистики
Обычный режим
Дата миграция
[JsonProperty("ldf")]
[JsonIgnore]
Couchbase. Оптимизация размеров
50 индексов в 20 дизайн документах
Разработка индексов в дизайн тайме на Javascript
Размер индексов ~6 гигабайт
Couchbase. Индексирование
Подсистема для SEO
Переезд
Изначальная подписка у Амазона была на 1 год, и она заканчивается. Продление подписки нет.
Нехватка размера памяти на дата серверах
Оптимизация расходов
Причины
Переключение пользователей
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% с увеличением мощности системы
Хостинг
Amazon балансировщик не поддерживает прямых TCP соединений => проблема с websocket-ами
Couchbase требует как минимум 2 сервера – любой потерянный пакет в сети => сервер помечается как dead на 10 секунд
Couchbase обновляет индексы не сразу (в течение 5 секунд или 5000 обновлённых документов)
Окончание подписки на Amazon увеличивает цену на EC2 в 3-4 раза
Необходимо разделение документов по бакетам в Couchbase, индексирование новой вьюхи – около 1 часа нестабильной работы всей системы
Выученные уроки