34
Денис Колошко HDCONF HDCONF

Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Embed Size (px)

DESCRIPTION

Будет показан пример архитектуры популярной социальной сети в Англии, переработанной на новом стеке, чтобы решить проблемы производительности, отказоустойчивости и горизонтального масштабирования. Новый стек базируется на технологиях: .NET, SignalR, Couchbase, RabbitMQ, ElasticSearch, Amazon Services (CloudFront, S3, EC2, Route 53, Balancer), Windows, Linux. Цель: показать одну из моделей архитектуры нагруженных веб-систем, практики и возможные подводные камни при разработке высоконагруженных Интернет систем.

Citation preview

Page 1: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Денис Колошко

HDCONFHDCONF

Page 2: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Денис Колошко

Технический директор компании Айти Бэнд (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

Докладчик

Page 3: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Сервис по разработке

.NET, Node.js

От защищённых бизнес систем до производительных интернет систем

Консалтинг

Анализ безопасности веб-систем

Оптимизация производительности

Анализ архитектур

Айти Бэнд (IT-Band.by)

Page 4: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

GoneTooSoon.org

Page 5: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Page 6: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

50 млн документов в No-Sql

14 млн фотографий и аудио файлов

800 000 пользователей

200 000 мемориалов

Couchbase – до 5-7k операций в секунду

Пик – 2 млн пользователя в месяц

До 50 тыс. фотографий у некоторых пользователей

Статистика

Page 7: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Первая архитектура

2007

Новый стек

(Amazon)

2013

Смена провайдера

(Amazon+Hetzner)

2014

Развитие архитектуры

Page 8: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

PHP

PostgreSQL

NFS, GlusterFS

Apache

Nginx

Первоначальный стек

Page 9: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Производительность

Сложность масштабирования

Старый стек. Проблемы

Page 10: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Высокая производительность

Высокая масштабируемость

Высокая доступность

Август 2013. Атрибуты качества новой архитектуры

Page 11: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

2.5 месяца на первый релиз

Высокая производительность

Горизонтальное масштабирование

Бесшовная миграция и переключение пользователей

Живая среда

Трансформация реляционной модели в документо-ориентированную модель

Вызов

Page 12: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

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

Новый стек

Page 13: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Page 14: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Page 15: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

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 виртуальных серверов Подписка на зарезервированные инстансы

серверов

Хостинг

Page 16: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Немного о дата миграции

Page 17: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

SPA дизайн

KnockoutJs

Лучшим решением был бы AngularJS

Routing на клиентской стороне

SignalR для получения от сервера сообщений

Шаблонизатор Razor

Кэширование всех шаблонов в памяти ASP.NET процесса

Page 18: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Организация очереди

Любые операции выполняющиеся > 0.5 сек

С внешним миром общается только WorkHorse

Обратная связь организуется на базе SignalR (временное открытие)

WorkHorse масштабирование: На уровне потоков Новые инстансы на новых

машинах

От 20 до 40 одновременных

обработчиков на каждую очередь

Page 19: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Откуда требование в 0.5 секунды

Page 20: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

ASP.NET MVC, IIS

Конфиги одинаковые

Master

Выполнение запланированных задач

Периодические платежи

Генерация SiteMaps

WorkHorse

Page 21: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Lucene.NET -> Solr -> ElasticSearch

2 млн документов (профили пользователей, мемориалы, форум)

AutoComplete

Отдельная бизнес-модель для поиска (только необходимые поля с метаинформацией)

Boosting полей

Фильтрация, сортировка

Поиск. ElasticSearch

Page 22: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Couchbase 2.0: Membase (memcached + file sync) + CouchDB

Использование как key-value хранилища и как документ-ориентированного хранилища

> 50 млн документов

Кластер 60 Gb из 2 машин (ограничение – Сouchbase версии Enterpise на 2 прод. машины)

Средняя нагрузка – 500 запросов/сек

Максимальные пики –5-7K запросов/секунду

Дата миграция – 70К запросов/секунду

Пик – 250К запросов/секунду

Хранилище. Couchbase

Page 23: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Couchbase. Немного статистики

Обычный режим

Дата миграция

Page 24: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

[JsonProperty("ldf")]

[JsonIgnore]

Couchbase. Оптимизация размеров

Page 25: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

50 индексов в 20 дизайн документах

Разработка индексов в дизайн тайме на Javascript

Размер индексов ~6 гигабайт

Couchbase. Индексирование

Page 26: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Page 27: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Подсистема для SEO

Page 28: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Переезд

Page 29: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Изначальная подписка у Амазона была на 1 год, и она заканчивается. Продление подписки нет.

Нехватка размера памяти на дата серверах

Оптимизация расходов

Причины

Page 30: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Page 31: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Переключение пользователей

Page 32: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

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% с увеличением мощности системы

Хостинг

Page 33: Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source

Amazon балансировщик не поддерживает прямых TCP соединений => проблема с websocket-ами

Couchbase требует как минимум 2 сервера – любой потерянный пакет в сети => сервер помечается как dead на 10 секунд

Couchbase обновляет индексы не сразу (в течение 5 секунд или 5000 обновлённых документов)

Окончание подписки на Amazon увеличивает цену на EC2 в 3-4 раза

Необходимо разделение документов по бакетам в Couchbase, индексирование новой вьюхи – около 1 часа нестабильной работы всей системы

Выученные уроки