Поездка на High Load Strategy

Поездка на High Load Strategy High Load Strategy 2015

В наши дни, когда приложение может быть запущено одновременно на миллионах устройств, а обычный пользователь синхронизирует гигабайты данных, вопрос высоких нагрузок актуален как никогда. Поэтому прошедшая в Вильнюсе конференция High Load Strategy крайне актуальна, и мы не упустили возможности послушать знающих о масштабировании не понаслышке.

Конференция собрала около 500 человек, проходила в выставочном центре LitExpo и заняла один день, а доклады шли в три потока: “Архитектура”, “Инфраструктура” и “Базы данных”. Основным языком конференции был английский, но при этом в перерывах всюду была слышна исключительно литовская речь.

Организаторы порадовали отличной организацией, огромными конференц- залами, доступной ценой в 29 евро (с учетом питания), а также оригинальными идеями для развлечений. Также стоит отметить мобильные приложения конференции для iOS и Android, позволявшие участникам не только изучать расписание докладов, но и общаться - а главное, задавать вопросы докладчикам. Организаторы даже делали упор на вопросы из мобильного приложения, отдавая им приоритет и после каждого доклада зачитывая первую пару вопросов со смартфона. Приложение было построено на платформе EventPen, которую смело можно взять на заметку: при использовании багов замечано не было :)

А вот что и от кого мы узнали:

Keynote, AdForm.

COO Mats Persson рассказал о том, что они обрабатывают 300 тысяч запросов в секунду от рекламных площадок, за ~10 миллисекунд успевая обработать запрос и на базе cookies выдать любому пользователю таргетированную на него рекламу. Весь зал сочувствовал, когда Dionizas Antipenkovas рассказал об ошибке, которая стоила компании $100 000 за 1 час: такие случаи показывают, как важно мониторить сервисы, избавляться от ненужной информации и следить за тем, чтобы в лог попадали только важные данные.

На один из слайдов стоит обратить особое внимание: мы в AXIOMA придерживаемся той же политики, считая, что для каждой задачи должен быть свой инструмент.

BUILDING A DISTRIBUTED DATA INGESTION SYSTEM WITH RABBITMQ

Благодаря Alvaro Videla из RabbitMQ мы для начала узнали, что RabbitMQ написан на Erlang, драйвера к нему написаны практически на всех языках программирования, а используется он в Instagram и Mozilla. Затем он показал нам с помощью инструмента RabbitMQSimulator на реальных примерах, каким образом можно строить очереди сообщений, на каких этапах сообщения можно обрабатывать или, наоборот, нельзя. Также рассказал о RabbitMQ Federation и о простоте построения кластера на нём, даже если речь о межконтинентальном. Отдельно стоит отметить RabbitMQSimulator: с его помощью, прежде чем реализовывать вашу очередь сообщений, вы можете протестировать и визуально увидеть, как данные будут идти от клиента до обработчика через все узлы.

TYPICAL PROBLEMS OF HIGH-LOAD PROJECTS AND HOW WARGAMING SOLVES THEM

Максим Барышников из Wargaming рассказывал о типичных проблемах, с которыми сталкиваются разработчики средних и выше проектов, и методах их решения. Основные освещенные проблемы вызваны отсутствием фоновой обработки данных - к счастью для нас, все эти проблемы мы уже пережили много лет назад.

С вопросов Барышникову я ушел на доклад RULE BOOK FOR BUILDING HIGHLY SCALABLE APPLICATIONS ON AWS - в основном он содержал рекламную информацию, которую можно получить без проблем на сайте AWS. Денис Баталов рассказал об оригинальном варианте, с помощью которого они с коллегами держат себя в тонусе: представляют ситуацию “а что, если сейчас упадет сервер №…” и полностью прорабатывают её.

SCALING E-COMMERCE WITH PHP

Simonas Šerlinskas затронул больные темы: инвалидацию кэша (кэширование не решает реальной проблемы производительности вашего приложения) и проблемы со старыми проектами, которые не хотят или не могут переписывать. В качестве решения предложил опробовать платформу ongr.io, которую с командой разработал для e-commerce решений вроде Magento. Она построена на базе Symfony2, и их вместе с ElasticSearch, RabbitMQ и новейшими инструментами Bower, Grunt можно назвать frontend-движком, полностью перекрывающим предыдующий. Клиенты работают именно с ней, производительность такого решения в разы лучше и, как заверяют на сайте, ответ от сервера посетители магазина увидят менее чем за 100 миллисекунд. При этом e-commerce решение Magento остается нетронутым, используясь только в качестве панели администрирования для управления товарами, заказами и т.д.

PROCESSING EVENTS AT SCALE

Mariusz Gil объяснял на примере Twitter и отправки уведомлений о новых твитах, что очень важно уходить от модели Request -> Response. Это довольно распостраненная ошибка, при которой разработчики пытаются за один запрос от пользователя сделать множество задач, ненужных в данный момент времени, которые можно было вынести в фоновую обработку событий. Снова нам рассказали о том, как прекрасен инструмент RabbitMQ, а также показали основные подходы организации очередей: примеры были на бандле Symfony2 от докладчика Alvaro Videla из RabbitMQ - http://knpbundles.com/videlalvaro/RabbitMqBundle . Но, как мы поняли из объяснений докладчика, RabbitMQ - инструмент для отложенных “задач”, когда вам не важно время их обработки, а для данных в реальном времени используется Apache Storm. Один из важных аспектов разработки очередей: нужно понимать, что после обработки сообщения из очереди данные **удаляются навсегда**. У докладчика были случаи неправильной обработки данных из очередей и, кроме как прогнать очередь снова, но уже с исправленными скриптами, ничего не оставалось. И напоследок рекомендация: не стоит использовать тяжелые инструменты вроде RabbitMQ и Apache Storm для простых очередей, тот же Redis поддерживает Pub/Sub и отлично справляется с этим Redis Pub/Sub.

YANDEX.TANK: A PERFORMANCE MEASUREMENT TOOL

Алексей Лавренюк из Yandex поведал историю создания Yandex.Tank: проект вырос внутри компании, с помощью скриптов и модулей на Python обрастал вокруг очень быстрого I/O движка, написанного на C++ Phantom.

О Yandex.Tank я и раньше читал на Хабрахабре, но не знал, например, что конфигурируется он очень просто с помощью блоков в .ini конфиг-файле, имеет встроенный агент мониторинга (который можно установить по SSH и замерять производительность сервера сразу при тестировании), встроенные HTML отчеты с простыми графиками, а также возможность установить Graphite для вывода данных отчетов на графики более серьезного уровня. К сожалению, пакеты собраны только для дистрибутивов Ubuntu, но, как выяснилось, уже есть Docker-образы, которые можно опробовать и на моём офисном Mac Mini.

Слайды:

RabbitMQ Data Ingestion : http://www.slideshare.net/old_sound/rabbitmq-data-ingestion

Yandex.Tank: http://www.slideshare.net/AlexeyLavrenuke/yandextank-44162563

Scaling Microservices in Go: https://speakerdeck.com/mattheath/scaling-microservices-in-go-high-load-strategy-2015

Processing events at scale: https://speakerdeck.com/mariuszgil/processing-events-at-scale

Write optimization in external memory data structures: http://www.slideshare.net/leifwalsh/write-optimization-in-external-memory-data-structures

Лучший твит :)

 

7 февраля 2015
Последние посты