HighLoad++ 2015

Nikita Vaniasin | Nov 5, 2015 min read

Скатались на конференцию.

Краткий отчет по докладам, на которых я побывал.

1) Как выбрать In-Memory NoSQL БД с умом… — Д. Калугин-Балашов (Mail.ru)

Вышел чувак из Mail.ru в ковбойской шляпе, и сообщил что выбирать БД на основе «самая распиаренная» и «друг посоветовал» это не круто и что нужно тестить производительность самому.

Показал кучу графиков, как он тестил Memcache/Redis/Tarantool/CouchBase.

Tarantool почти по всем параметрам чуть-чуть обходит Redis. Показалось что доклад именно про это.

Использовал тулзу от Yahoo: YCSB, доработанную им же.

 

2) Что особенного в СУБД для данных в оперативной памяти — К. Осипов (tarantool.org)

Суровый технический доклад о внутрянке In-Memory баз данных. С уклоном в сторону Тарантул, конечно-же.

В целом понравился, досадно что засыпал из-за ночного перелета.

К сожалению, не было примеров реального использования таких БД.

 

3) Учебный план для HighLoad guru — А. Аксенов (Sphinx)

Похоже, один из самых ожидаемых докладчиков HighLoad.

В целом — никак не связано с Highload и больше похоже, что Аксенову снова дали время на небольшое stand-up выступление.

В этот раз искрометного юмора было меньше, но все равно получился годный доклад о том, что нужно программисту загуглить, чтобы обладать более широкими знаниями.

Основная идея — нормальный инженер должен хотя бы немного обладать компетенцией во всех смежных областях. То есть если я пишу код для сервера, я должен понимать не только ООП, но и как работает железо, сеть и как установить Debian.

Расширяй туннельное  зрение!

Пришла на ум метафора про T-shaped person:

Доклад Аксенова здесь (pulp fiction): http://shodan.ru/ppt/

Крут тем, что реально перечислил все ключевые фразы для поиска.

TODO: сделать mindmap на основе ключевиков.

4) Real time processing on big data usinx XAP and SSD… — Ron Zavner (GigaSpaces)

Доклад про фичи платформы XAP. Суть — набор программных компонентов для работы с кучей данных InMemory. Интеграция с JAVA, облаками и прочим.

Нормальных примеров использования опять-же не было.

 

5) Ужимай и властвуй.. алгоритмы компресси в БД — П. Зайцев (Percona)

Данный доклад успешно простоял в очереди за кофе. Когда пришёл — Петр уже заканчивал рассказывать про преимущества различных алгоритмов компрессии в разных движках.

 

6) Строим сервисы на базе Nginx и Tarantool (Mail.ru)

Тезисы доклада гласят: «Слушатели этого доклада получат представление о том, как построить отказоустойчивое, быстрое, простое и легко масштабируемое решение на базе nginx и Tarantool».

Из доклада запомнилась демонстрация реального использования Tarantool: wiki.build.tarantool.org

Очень кратко рассказали об интеграции с nginx, хотя это было самое интересное. Как эта интеграция работает в демке, и на чем она реализовано так и не сказали.

Остальное время заняли рассказы о Тарантуле и о том, как он хорош.

 

7) Modern Web App Development using ClosureScript & React.js (Helpshift)

Тоже попал не начало доклада. Скорее всего ходил по общему залу, где тоже было куча всего интересного.

Чувак рассказывал про собственно разработку фронтенда при помощи Closure Script.

Очень много писал фломастером на бумажном стенде размером 1×1.5, код почти не было видно. Но в целом показалось что интеграция этих инструментов не самая лучшая идея. Код выглядел жутковато и очень плохо читаемым.

 

8) Изоморфные React-приложения: производительность и масштабирование — Д. Измайлов (Startup Makers)

Показалось, что докладчик рассказал о всё тех же Single-page приложениях, о которых уже давно всё известно.

Тулзы:

 фреймворк от Facebook: https://facebook.github.io/relay/

 

9) StackOverflow — it’s all about performance — Marco Cecconi

Второй день конференции. На первый доклад не успели.

 

10) Где живут ваши объявления — М. Тюрин (Avito)

Крупнейший сервис объявлений в Европе.

Чувак рассказал о пути от простого прототипа с небольшим количеством компонентов (который не мог выдержать и небольшой нагрузки) до сложной системы с кучей компонентов.

В данный момент система обрабатывает 15000 RPS к frontend, 4000-7000 RPS к БД.

Используется Sphinx, Rabbit, Memcache, DWH.

Нашел для себя новый термин: DWH — БД и тулзы для сбора статистики и последующей аналитики. Возможно стоит по исследовать в сторону прикручивания его в бэкенд вместо существующего statcollector.

Были классные схемы обработки запросов. Будут презентации — выложу.

 

11) Node JS в higload проекте — В. Акрицкий (iAge Engineering)

Немного неоднозначный доклад, который так и не ответил на вопрос, насколько хорош Node JS в Highload проекте. Никаких сравнений не было.

Рассказывал в основном про то, как здорово и быстро делать прототипы проектов. Изобрел ООП для Node JS и ещё пару старых парадигм под новыми именами. На вопросы из зала откровенно слился. Впрочем в зале оказалось много агрессивных противников Node JS, так что не удивительно.

 

12) Управление релизами, как оно есть — Андрей Рыжкин (AGIMA)

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

Чувак рассказал про то, как здорово проводить CodeReview, использовать Git и continuous integration.

Хотелось услышать больше про тулзы для выкладывания и сам процесс написания скриптов. Не было.

 

13) Архитектура HAWQ — А. Грищенко (Pivotal)

Годный доклад, который наконец прояснил смысл использования тулзов типа Hadoop.

HAWQ — бранч от PostgreSQL, ставший надстройкой для Hadoop для собственно доступа к данным Hadoop через SQL — команды.

Рассказал немного о внутрянке — как работает хэширование записей BigTable и как они превращаются в реляционные-таблицы.

Сравнил Hive/SparkSQL/HAWQ/Impala. HAWQ конечно же победил, кроме пункта про коммьюнити — в опен сорс вторая версия HAWQ пока не собирается, а первую никто толком не использует.

Узнал кучу слов для гугления:

Cognos

hdfs

pxf

yarn

Apache Parachute

 

14) Слон желтого цвета и его друзья — А. Чистяков (Налог-Сервис)

Ещё один любитель stand-up выступлений. Забавный дядька-админ рассказывал свою историю, о том как админил сервера аналитики в налоговой службе.

Опять же немного прояснился смысл BigTable — решений и возможностей его применения. В остальном — истории, как он исследовал баги в настройке кластера.

В результате оказалось, что корявый алгоритм не использовал весь кластер на полную и фактически 15 из 16 машин простаивали.

 

15) From nothing to a video under 2 seconds — М. Сычев (YouTube)

Пожалуй один из самых лучших докладов на конференции.

Типы загрузок страницы:

Cold

что можно сделать: pre-browse/preconnect/pre-fetch/pre-render. Выполняет браузер когда только начинаем открывать ссылку. Можем сделать сами, если используем SPF

для видосов ускорили при помощи QUIC — кастомный протокол, есть только в Chromium

WebP — формат для картинок, позволяет сжимать картинки лучше чем PNG/JPEG на том же уровне качества.

Внутри страницы реализовали Менеджер приоритетов загрузки — сначала грузится плеер и видос, только потом остальные части страницы.

 

Warm

помогает: chunking/keep-alive. Решено в HTTP/2 и SPDY

SPF — фреймворк от гугла. Непременно надо попробовать.

 

Hot

Когда почти всё берется из кэша.

Но и тут поцаны нашли что улучшить. Например вместо того чтобы подгружать данные после mouse up, они начинают это делать сразу после mouse down.

Натолкнуло на раздумья, хочется сранить:

Полностью статическая HTML-страница   vs. Максимальный Single Page и вычисления на клиенте

по параметрам: скорость загрузки страницы/ нагрузка на сервер / HA / QPS

 

16) Understanding Page Load — Ziling Zhao (Google)

Ещё одна классная презентация от гугла. Понравился стиль оформления (даже здесь вкрутили Material Design).

Чувак очень подробно рассказал о том, от чего зависит скорость загрузки страницы и куда надо смотреть, чтобы её подтюнить. Очень здорово прокачивает понимание работы веб-браузера.

Из того, что захотелось записать:

Перерисовывайте экран как можно реже.

Откладывайте выполнение неважных скриптов на самый конец загрузки.

Debounce event handlers

Limit animation frame (or use requestAnimationFrame)

Не запускайте скрипты, которые работают слишком долго.

Лучший способ добавить HTML в дерево — использовать копирование существующего узла (templating) либо createNode вместо innerHTML

Следите за кол-вом узлов в DOM: больше 3000 не круто.

Скрывайте невидимые элементы (display: none), чтобы браузер точно не пытался их перерисовать.