SlideShare a Scribd company logo
Денис Колошко 
HHDDCCOONNFF
Докладчик 
Денис Колошко 
Технический директор компании Айти Бэнд (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
Айти Бэнд (IT-Band.by) 
 Сервис по разработке 
 .NET, Node.js 
 От защищённых бизнес систем до 
производительных интернет систем 
 Консалтинг 
 Анализ безопасности веб-систем 
 Оптимизация производительности 
 Анализ архитектур
GoneTooSoon.org
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Статистика 
 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
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Денис Колошко, Пример нагруженной системы на базе продуктов 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 виртуальных серверов 
 Подписка на зарезервированные инстансы 
серверов
Немного о дата миграции
SPA дизайн 
 KnockoutJs 
 Лучшим решением 
был бы AngularJS 
 Routing на клиентской 
стороне 
 SignalR для получения 
от сервера сообщений 
 Шаблонизатор Razor 
 Кэширование всех 
шаблонов в памяти 
ASP.NET процесса
Организация очереди 
 Любые операции 
выполняющиеся > 0.5 сек 
 С внешним миром общается 
только WorkHorse 
 Обратная связь организуется 
на базе SignalR (временное 
открытие) 
 WorkHorse масштабирование: 
 На уровне потоков 
 Новые инстансы на новых 
машинах 
 От 20 до 40 одновременных 
обработчиков на каждую 
очередь
Откуда требование в 0.5 секунды
WorkHorse 
 ASP.NET MVC, IIS 
 Конфиги одинаковые 
 Master 
 Выполнение 
запланированных задач 
 Периодические платежи 
 Генерация SiteMaps
Поиск. ElasticSearch 
 Lucene.NET -> Solr -> ElasticSearch 
 2 млн документов (профили 
пользователей, мемориалы, форум) 
 AutoComplete 
 Отдельная бизнес-модель для поиска 
(только необходимые поля с 
метаинформацией) 
 Boosting полей 
 Фильтрация, сортировка
Хранилище. Couchbase 
 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 гигабайт
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon, Open-Source
Подсистема для SEO
Переезд
Причины 
 Изначальная подписка у Амазона была на 1 год, и 
она заканчивается. Продление подписки нет. 
 Нехватка размера памяти на дата серверах 
 Оптимизация расходов
Денис Колошко, Пример нагруженной системы на базе продуктов 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% с 
увеличением мощности системы
Выученные уроки 
 Amazon балансировщик не поддерживает прямых TCP 
соединений => проблема с websocket-ами 
 Couchbase требует как минимум 2 сервера – любой 
потерянный пакет в сети => сервер помечается как dead 
на 10 секунд 
 Couchbase обновляет индексы не сразу (в течение 5 
секунд или 5000 обновлённых документов) 
 Окончание подписки на Amazon увеличивает цену на 
EC2 в 3-4 раза 
 Необходимо разделение документов по бакетам в 
Couchbase, индексирование новой вьюхи – около 1 часа 
нестабильной работы всей системы
? 
denis@koloshko.com

More Related Content

PDF
Клиентские приложения под нагрузкой (HighLoad 2014)
PDF
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
PPTX
MongoDB. Как готовить, с чем едят?
PDF
Консольные приложения на Go
PDF
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
PDF
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
PDF
Twisted Framework - сетевые приложения в Python
PDF
Анатомия веб-сервиса (РИТ-2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
MongoDB. Как готовить, с чем едят?
Консольные приложения на Go
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - сетевые приложения в Python
Анатомия веб-сервиса (РИТ-2014)

What's hot (17)

PDF
Загрузка больших объемов данных для бизнес-аналитики
PPTX
MongoDB первые впечатления
PPT
Lobanov_Cloud-Comput..
PDF
Анатомия веб сервиса (HighLoad-2014)
PDF
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
PDF
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
PPTX
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
PDF
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
PDF
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
PDF
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
PPTX
Поиск наизнанку
PPTX
Денис Иванов
PPTX
SOA: строим свой service mesh / Иван Круглов (Booking.com)
PPTX
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
PPTX
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
PDF
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Загрузка больших объемов данных для бизнес-аналитики
MongoDB первые впечатления
Lobanov_Cloud-Comput..
Анатомия веб сервиса (HighLoad-2014)
Как считать и анализировать сотни гигабит трафика в секунду, Станислав Николо...
Реалтайм статистика скорости работы нативных и веб-приложений у реальных поль...
КРИ 2013. "Базы данных в онлайн играх. От Аллодов до Skyforge". Андрей Фролов
ClickHouse: очень быстро и очень удобно / Виктор Тарнавский, Алексей Миловидо...
Как мы строили аналитическую платформу на несколько миллиардов событии в месяц
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
Поиск наизнанку
Денис Иванов
SOA: строим свой service mesh / Иван Круглов (Booking.com)
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Ad

Viewers also liked (20)

PPTX
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
PDF
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
PDF
кри 2014 elastic search рациональный подход к созданию собственной системы а...
PPTX
Путь мониторинга, DevOps club в Grammarly
PDF
Использование Elasticsearch для организации поиска по сайту
PDF
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
KEY
ElasticSearch at berlinbuzzwords 2010
PDF
Автоматизация анализа логов на базе Elasticsearch
PDF
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
PDF
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
PPT
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
PPTX
Elastic search overview
PDF
Elasticsearch in 15 minutes
PDF
Introduction to Elasticsearch
PPTX
Introduction to Elasticsearch with basics of Lucene
PPTX
Scaling an ELK stack at bol.com
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
PDF
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
PPTX
ElasticSearch Basic Introduction
PDF
Curso completo de Elasticsearch
ElacticSearch в связке с MODX Revo - MODX Meetup Minsk
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
кри 2014 elastic search рациональный подход к созданию собственной системы а...
Путь мониторинга, DevOps club в Grammarly
Использование Elasticsearch для организации поиска по сайту
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"
ElasticSearch at berlinbuzzwords 2010
Автоматизация анализа логов на базе Elasticsearch
Shadow Fight 2: архитектура системы аналитики для миллиарда событий
2013-02-02 03 Голушко. Полнотекстовый поиск с Elasticsearch
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Elastic search overview
Elasticsearch in 15 minutes
Introduction to Elasticsearch
Introduction to Elasticsearch with basics of Lucene
Scaling an ELK stack at bol.com
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
ElasticSearch Basic Introduction
Curso completo de Elasticsearch
Ad

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

PPT
Hl2008 Spy Log Architechture 169
PPT
New SpyLOG architechture (Highload 2008)
PDF
Android Telegram S Optimizations
PDF
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
PPTX
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
PDF
Технологии больших веб проектов завтра и послезавтра
PPTX
Микросервисы в .NET Core
PPTX
мониторинг производительности приложения на PINBA
ODP
Многопользовательские браузерные игры нового типа
PPT
Hl Nekoval
PPT
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
PDF
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
PDF
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
PPTX
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
PDF
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
PPT
1С-Битрикс - Производительность
PPTX
разработка Metro style приложений
PDF
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
PDF
Программируемость коммутаторов для ЦОД Cisco Nexus
Hl2008 Spy Log Architechture 169
New SpyLOG architechture (Highload 2008)
Android Telegram S Optimizations
2015-12-06 Евгений Тюменцев - Разработка надежных параллельных, распределенны...
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Технологии больших веб проектов завтра и послезавтра
Микросервисы в .NET Core
мониторинг производительности приложения на PINBA
Многопользовательские браузерные игры нового типа
Hl Nekoval
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
NVMf: 5 млн IOPS по сети своими руками / Андрей Николаенко (IBS)
Андрей Николаенко, IBS. NVMf: 5 млн IOPS по сети своими руками
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
“Tips&Tricks&Antitricks with .Net Core backend in GameDev”
1С-Битрикс - Производительность
разработка Metro style приложений
IForum 2016: Никита Семенов. Серьезный подход к серьезным проектам
Программируемость коммутаторов для ЦОД Cisco Nexus

More from Tanya Denisyuk (20)

PDF
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
PDF
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
PDF
Вадим Мадисон "Опыт разработки через микросервисы"
PDF
Сергей Аверин "Распространенные ошибки применения баз данных"
PPTX
Сергей Сверчков "Want to build a secure private cloud for IoT with high avail...
PDF
Левон Авакян "Архитектура мета игры Wargaming. Глобальная карта 2.0"
PDF
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
PDF
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
PDF
Артем Гавриченков "The Dark Side of Things: Distributed Denial of Service Att...
PDF
Алексей Лесовский "Тюнинг Linux для баз данных. "
PPTX
Александр Краковецкий "Разработка интеллектуальных ботов с помощью Microsoft ...
PDF
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
PDF
Александр Ломов-«Как перестать беспокоиться и начать использовать Cloud Foundry»
PDF
Алексей Залесов-«Управление контейнерами в облаках»
PDF
Максим Барышиков-«WoT: Geographically distributed cluster of clusters»
PDF
Левон Авакян-«Эволюция кланов в Wargaming. От веб страницы на танковом портал...
PDF
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
PPTX
Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь з...
PPTX
Михаил Серченя-«Построение отказоустойчивой масштабируемой среды для WEB и бе...
PPTX
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Николай Сивко "Хорошо поддерживаемое в продакшне приложение"
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Вадим Мадисон "Опыт разработки через микросервисы"
Сергей Аверин "Распространенные ошибки применения баз данных"
Сергей Сверчков "Want to build a secure private cloud for IoT with high avail...
Левон Авакян "Архитектура мета игры Wargaming. Глобальная карта 2.0"
Дмитрий Хоревич "Cloud native security with UAA \ Как защитить микросервисы с...
Артем Маринов "Сегментируем 600 млн. пользователей в режиме реального времени...
Артем Гавриченков "The Dark Side of Things: Distributed Denial of Service Att...
Алексей Лесовский "Тюнинг Linux для баз данных. "
Александр Краковецкий "Разработка интеллектуальных ботов с помощью Microsoft ...
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Александр Ломов-«Как перестать беспокоиться и начать использовать Cloud Foundry»
Алексей Залесов-«Управление контейнерами в облаках»
Максим Барышиков-«WoT: Geographically distributed cluster of clusters»
Левон Авакян-«Эволюция кланов в Wargaming. От веб страницы на танковом портал...
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь з...
Михаил Серченя-«Построение отказоустойчивой масштабируемой среды для WEB и бе...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...

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

  • 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 тыс. фотографий у некоторых пользователей
  • 7. Развитие архитектуры Первая архитектура 2007 Новый стек (Amazon) 2013 Смена провайдера (Amazon+Hetzner) 2014
  • 8. Первоначальный стек PHP PostgreSQL NFS, GlusterFS Apache Nginx
  • 9. Старый стек. Проблемы Производительность Сложность масштабирования
  • 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
  • 15. Хостинг  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 виртуальных серверов  Подписка на зарезервированные инстансы серверов
  • 16. Немного о дата миграции
  • 17. SPA дизайн  KnockoutJs  Лучшим решением был бы AngularJS  Routing на клиентской стороне  SignalR для получения от сервера сообщений  Шаблонизатор Razor  Кэширование всех шаблонов в памяти ASP.NET процесса
  • 18. Организация очереди  Любые операции выполняющиеся > 0.5 сек  С внешним миром общается только WorkHorse  Обратная связь организуется на базе SignalR (временное открытие)  WorkHorse масштабирование:  На уровне потоков  Новые инстансы на новых машинах  От 20 до 40 одновременных обработчиков на каждую очередь
  • 20. WorkHorse  ASP.NET MVC, IIS  Конфиги одинаковые  Master  Выполнение запланированных задач  Периодические платежи  Генерация SiteMaps
  • 21. Поиск. ElasticSearch  Lucene.NET -> Solr -> ElasticSearch  2 млн документов (профили пользователей, мемориалы, форум)  AutoComplete  Отдельная бизнес-модель для поиска (только необходимые поля с метаинформацией)  Boosting полей  Фильтрация, сортировка
  • 22. Хранилище. Couchbase  Couchbase 2.0: Membase (memcached + file sync) + CouchDB  Использование как key-value хранилища и как документ-ориентированного хранилища  > 50 млн документов  Кластер 60 Gb из 2 машин (ограничение – Сouchbase версии Enterpise на 2 прод. машины)  Средняя нагрузка – 500 запросов/сек  Максимальные пики –5-7K запросов/секунду  Дата миграция – 70К запросов/секунду  Пик – 250К запросов/секунду
  • 23. Couchbase. Немного статистики  Обычный режим  Дата миграция
  • 24. Couchbase. Оптимизация размеров  [JsonProperty("ldf")]  [JsonIgnore]
  • 25. Couchbase. Индексирование  50 индексов в 20 дизайн документах  Разработка индексов в дизайн тайме на Javascript  Размер индексов ~6 гигабайт
  • 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 часа нестабильной работы всей системы