Я и моя группа занимаемся разработкой страницы Яндекс.Браузера, весь наш фронтенд построен на Node.js. Для нас очень важно максимально быстро отвечать нашим пользователям, и не только потому, что тем самым мы снижаем потребление нами системных ресурсов, а прежде всего для того, чтобы наш пользователь не ожидал лишние десятки миллисекунд и не терял интерес к нашим страницам.
Многие исследования подтверждают — каждые 100мс ожидания загрузки страницы вы теряете долю пользователей, которые ждать не захотели. Именно поэтому после того, как некоторые страницы сильно разрослись и время ответа перестало удовлетворять нас, я начал исследование узких мест.
Я перебрал множество доступных на данный момент инструментов профилирования Node.js приложений, покопался с работой оптимизаторов V8 и в результате за две недели уменьшил время ответа нашей страницы в 2.5 раза, а теперь я бы хотел поделиться с вами своим опытом.
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
В эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
Какая вообще в природе бывает репликация (sync vs. async vs. semisync, master-master vs. master-slave), как оно устроено конкретно в MySQL, в каких версиях что добавили. Про binary/relay log, про SBR/RBR/mixed форматы, про глупости с позициями и про GTID, про то, как из-за всяких бед возникают дополнительные продукты типа Tungsten и Galera. Несколько занятных фактов и парочка фокусов, которые можно учинять конкретно с MySQL-репликацией.
Доклад вчистую про внутреннее устройство, по результатам должно появляться общее понимание того, как оно работает внутри и почему именно так. Конкретные SQL-операторы подробно рассматривать НЕ будем, эти скучные мелочи необходимо будет затем самостоятельно смотреть в документации (или не смотреть).
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
Тезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
Я и моя группа занимаемся разработкой страницы Яндекс.Браузера, весь наш фронтенд построен на Node.js. Для нас очень важно максимально быстро отвечать нашим пользователям, и не только потому, что тем самым мы снижаем потребление нами системных ресурсов, а прежде всего для того, чтобы наш пользователь не ожидал лишние десятки миллисекунд и не терял интерес к нашим страницам.
Многие исследования подтверждают — каждые 100мс ожидания загрузки страницы вы теряете долю пользователей, которые ждать не захотели. Именно поэтому после того, как некоторые страницы сильно разрослись и время ответа перестало удовлетворять нас, я начал исследование узких мест.
Я перебрал множество доступных на данный момент инструментов профилирования Node.js приложений, покопался с работой оптимизаторов V8 и в результате за две недели уменьшил время ответа нашей страницы в 2.5 раза, а теперь я бы хотел поделиться с вами своим опытом.
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)Ontico
В эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Ontico
Какая вообще в природе бывает репликация (sync vs. async vs. semisync, master-master vs. master-slave), как оно устроено конкретно в MySQL, в каких версиях что добавили. Про binary/relay log, про SBR/RBR/mixed форматы, про глупости с позициями и про GTID, про то, как из-за всяких бед возникают дополнительные продукты типа Tungsten и Galera. Несколько занятных фактов и парочка фокусов, которые можно учинять конкретно с MySQL-репликацией.
Доклад вчистую про внутреннее устройство, по результатам должно появляться общее понимание того, как оно работает внутри и почему именно так. Конкретные SQL-операторы подробно рассматривать НЕ будем, эти скучные мелочи необходимо будет затем самостоятельно смотреть в документации (или не смотреть).
Андрей Дроздов "Создание высокопроизводительных rest api на tarantool"Tanya Denisyuk
Тезисы:
За последние 2 года экосистема tarantool пополнилась огромным количеством батареек: дисковое хранение, lua-шардинг, работа со схемами данных и версиями, nginx upstream модуль. Используя эти компоненты, можно создавать высокопроизводительные приложения без использования дополнительных технологий.
В докладе будет описан опыт использования Tarantool для разработки performance-critical restful api: расскажу в чем плюсы и минусы текущей реализации lua-шардинга, как создать restful api прямо в базе данных и почему это быстрее многих популярных решений на примере реальных данных. Кроме того, будет рассмотрен подход использования avro схем для валидации, версионирования и хранения json документов в Tarantool. Для наглядности во время доклада будет разработан микросервис и проведено нагрузочное тестирование.
Массовые операции над письмами в Яндекс.Почте — Денис КутуковYandex
Операции над письмами (пометка спамовым, удаление или перемещение) — неотъемлемая часть почтового сервиса, которая создает заметную нагрузку на бэкенд и может сильно увеличить время отклика системы. В докладе я расскажу, как эволюционировал наш модуль операций над письмами, как мы сделали его асинхронным, на какие грабли мы наступили с Zookeeper’ом и какие выводы сделали.
Леонид Васильев "Python в инфраструктуре поиска"Yandex
Леонид Васильев "Python в инфраструктуре поиска"
Я.Субботник в Санкт-Петербурге
О докладе:
Что такое инфраструктура поиска. Какие задачи приходится решать. Какие инструменты для управления кластером используются в поиске. Как они устроены изнутри. Что можно посоветовать проектам с большой инфраструктурой. Какие существуют open-source аналоги.
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Ontico
AVRO - система сериализации данных, созданная сообществом Apache Hadoop. Включает в себя различные структуры данных, компактный формат хранения в бинарном виде, язык описания схем данных и правила миграции данных между разными версиями схемы. С помощью инструментария AVRO можно валидировать данные по схеме, совершать преобразования из одной версии в другую и даже восстанавливать неполные данные при помощи значений по-умолчанию. Поддержка Apache AVRO была добавлена в Tarantool в этом году и уже используются в production.
Tarantool можно использовать как документо-ориентированную СУБД. В докладе я расскажу про подход к версионированию данных, разработанный командой tarantool: использование avro схемы для валидации входных данных, преобразования от одной версии к другой в runtime, оптимальное хранение версий документа, изменение схемы данных без избыточности и проблем в предыдущих версиях.
Также я расскажу, как применять этот подход для создания бэкендов restful api прямо в базе данных (без дополнительной разработки). Для наглядности мы сравним получившуюся систему с популярными веб-фреймворками: django-rest-framework, go-restful, node.js и посмотрим, кто окажется в лидерах по производительности. Кроме того, во время выступления я покажу live пример создания restful api на стеке технологий tarantool в облаке amazon.
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
Авито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
Массовые операции над письмами в Яндекс.Почте — Денис КутуковYandex
Операции над письмами (пометка спамовым, удаление или перемещение) — неотъемлемая часть почтового сервиса, которая создает заметную нагрузку на бэкенд и может сильно увеличить время отклика системы. В докладе я расскажу, как эволюционировал наш модуль операций над письмами, как мы сделали его асинхронным, на какие грабли мы наступили с Zookeeper’ом и какие выводы сделали.
Леонид Васильев "Python в инфраструктуре поиска"Yandex
Леонид Васильев "Python в инфраструктуре поиска"
Я.Субботник в Санкт-Петербурге
О докладе:
Что такое инфраструктура поиска. Какие задачи приходится решать. Какие инструменты для управления кластером используются в поиске. Как они устроены изнутри. Что можно посоветовать проектам с большой инфраструктурой. Какие существуют open-source аналоги.
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Ontico
AVRO - система сериализации данных, созданная сообществом Apache Hadoop. Включает в себя различные структуры данных, компактный формат хранения в бинарном виде, язык описания схем данных и правила миграции данных между разными версиями схемы. С помощью инструментария AVRO можно валидировать данные по схеме, совершать преобразования из одной версии в другую и даже восстанавливать неполные данные при помощи значений по-умолчанию. Поддержка Apache AVRO была добавлена в Tarantool в этом году и уже используются в production.
Tarantool можно использовать как документо-ориентированную СУБД. В докладе я расскажу про подход к версионированию данных, разработанный командой tarantool: использование avro схемы для валидации входных данных, преобразования от одной версии к другой в runtime, оптимальное хранение версий документа, изменение схемы данных без избыточности и проблем в предыдущих версиях.
Также я расскажу, как применять этот подход для создания бэкендов restful api прямо в базе данных (без дополнительной разработки). Для наглядности мы сравним получившуюся систему с популярными веб-фреймворками: django-rest-framework, go-restful, node.js и посмотрим, кто окажется в лидерах по производительности. Кроме того, во время выступления я покажу live пример создания restful api на стеке технологий tarantool в облаке amazon.
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
Авито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
18. SELECT * FROM coubs LIMIT 10;
SELECT * FROM coubs LIMIT 10 OFFSET 10;
INSERT INTO coubs ........;
SELECT * FROM coubs LIMIT 10 OFFSET 20;
18
19. SELECT * FROM coubs LIMIT 10;
SELECT * FROM coubs LIMIT 10 OFFSET 10;
DELETE FROM coubs WHERE ........;
SELECT * FROM coubs LIMIT 10 OFFSET 20;
19
20. SELECT * FROM coubs LIMIT 10;
SELECT * FROM coubs LIMIT 10 OFFSET 10;
UPDATE coubs ........;
SELECT * FROM coubs LIMIT 10 OFFSET 20;
20
21. — Большой JSON ~140 Kb
— Нетривиальная выборка
— Записи обновляются часто
— Tree
— Нет старого контента
21
22. — Большой JSON ~140 Kb
— Нетривиальная выборка
— Записи обновляются часто
— Tree
— Нет старого контента
22
23. SELECT * FROM coubs
ORDER BY key LIMIT 10;
SELECT * FROM coubs WHERE key < ...
ORDER BY key LIMIT 10;
INSERT INTO coubs ……..;
SELECT * FROM coubs WHERE key < ...
ORDER BY key LIMIT 10;
23
24. SELECT * FROM coubs
ORDER BY key DESC LIMIT 10;
SELECT * FROM coubs WHERE key < ...
ORDER BY key DESC LIMIT 10;
DELETE FROM coubs WHERE ...;
SELECT * FROM coubs WHERE key < ...
ORDER BY key DESC LIMIT 10;
24
36. 36
— Берем все кобы, которые попадают в подписки
— Среди этих кобов ищем дублирующиеся рекобы
— Выкидываем их, оставляем только первые
— Выкидываем все то, что не должно быть видно
ÁБÛЫËЛÎО ÊКÀАÊК-ÒТÎО ÒТÀАÊК