Загрузка больших объемов данных для бизнес-аналитикиBadoo DevelopmentВ Badoo мы разрабатываем собственную систему Business intelligence (сокращённо BI). И прежде, чем приступать к анализу данных, их необходимо извлечь (Extract) из источников, преобразовать (Transform) и загрузить (Load) в аналитическую базу.
Я расскажу об этом процессе - ETL (Extract, Transform, Load). Какие бывают источники данных, какие методы сбора мы используем. И самое главное - об инструменте под названием ETLMaster, созданным в нашей компании для автоматизации управления процессом трансформации и загрузки данных.
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...OnticoRethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
Хранение данных на виниле / Константин Осипов (tarantool.org)OnticoВ rfc1149 дан исчерпывающий обзор преимуществ голубиной почты для протокола IP: низкая пропускная способность, невысокая надёжность, простая топология сети. Для того чтобы дать адекватный ответ вызовам эпохи мемристоров и квантовых вычислений, Tarantool 1.7 содержит новый движок для хранения данных на классических жёстких дисках и флэш-накопителях: Vinyl. Tarantool известен своей скоростью, и мы постарались не ударить в грязь лицом и на этот раз.
В докладе я расскажу об устройстве нашего нового storage engine:
- как мы объединили in-memory технологию и LSM (log structured merge) деревья для достижения оптимальной производительности и утилизации ресурса накопителя,
- как работает multiversion concurrency control в Vinyl,
- основной компонент в промышленной реализации LSM дерева - merge scheduler, т.е. планировщик слияний и сборки мусора дерева. Я расскажу о подходе, который позволяет максимально снизить износ накопителя, при этом уложиться в заданные рамки производительности запросов.
Как устроена 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-операторы подробно рассматривать НЕ будем, эти скучные мелочи необходимо будет затем самостоятельно смотреть в документации (или не смотреть).
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...OnticoШироко распространено мнение, что SQL СУБД обречены быть медлительными и неповоротливыми, поскольку несут груз совместимости с предыдущими версиями. Это расхожее мнение широко эксплуатируется маркетингом NoSQL СУБД. Однако, это не всегда действительно так.
Разработка в Open Source сообществе позволяет продукту развиваться достаточно гибко, чтобы отвечать требованиям времени. В MySQL и PostgreSQL – самых популярных Open Source СУБД – недавно были проведены оптимизации для работы на больших серверах, что позволило им выполнять более миллиона SQL-запросов в секунду на одном экземпляре БД.
В данном докладе будут рассмотрены конкретные оптимизации, которые позволили добиться таких результатов, которые раньше могли бы показаться фантастическими. И можно сказать, что Open Source СУБД вошли в эру миллионов запросов в секунду.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...OnticoДовольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Где живут Ваши объявления / Тюрин Михаил (Avito)OnticoАвито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
Anton Turetckii "What does it take to build a host?"FwdaysReal hardware in the data center: everything you wanted to know but didn’t know how to ask.
2020: how to build a server if you don’t use clouds
How to get rid of or reduce problems when ordering, allocating, and mounting the hardware
Yes, there are people working in your data center (If you have one)!
What is hidden in between the server’s power button activation and its appearance in your internal system
Automation and its role in the process: do exactly what is necessary and enough!
Alexandr Serbul "The Rust language for a high-load network service - a quick ...FwdaysIn this talk, we will talk about the evolution of the development of a high-load network cluster for sending push notifications using technologies from Unix / bash and PHP to asynchronous non-blocking multithreaded connections based on Rust / Tokio. Let's talk about the intricacies of Rust development, language features, pitfalls, and ways to quickly learn and use it for web developers with LAMP skills. Let's also talk about Go, Java, and the reasons for our technological decisions.
The talk will be useful for developers wishing to master the latest and popular Rust programming language, functional programming, Haskell ideas with PHP / Python / JavaScript web development experience.
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)OnticoThis document describes the architecture of a sharded Redis cluster. It discusses having multiple Redis shards, each with a master and slave configuration for high availability. A proxy server is used to route commands to the appropriate shard master. The system uses Python and Twisted for the implementation.
Загрузка больших объемов данных для бизнес-аналитикиBadoo DevelopmentВ Badoo мы разрабатываем собственную систему Business intelligence (сокращённо BI). И прежде, чем приступать к анализу данных, их необходимо извлечь (Extract) из источников, преобразовать (Transform) и загрузить (Load) в аналитическую базу.
Я расскажу об этом процессе - ETL (Extract, Transform, Load). Какие бывают источники данных, какие методы сбора мы используем. И самое главное - об инструменте под названием ETLMaster, созданным в нашей компании для автоматизации управления процессом трансформации и загрузки данных.
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...OnticoRethinkDB - это распределенное документо-ориентированное хранилище данных с открытым исходным кодом. Данная система ориентирована на разработку систем обработки данных реального времени, позволяя клиентскому приложению подписываться на изменение тех или иных данных.
В данном докладе я бы хотел осветить не только вопросы разработки приложений на базе RethinkDB, но и поговорить о том, как все это работает. Мы поговорим о ReQL (язык запросов), “changefeeds”, индексах, шардинге, репликациях, а также затронем вопросы особенностей проектирования баз данных под данную платформу.
Хранение данных на виниле / Константин Осипов (tarantool.org)OnticoВ rfc1149 дан исчерпывающий обзор преимуществ голубиной почты для протокола IP: низкая пропускная способность, невысокая надёжность, простая топология сети. Для того чтобы дать адекватный ответ вызовам эпохи мемристоров и квантовых вычислений, Tarantool 1.7 содержит новый движок для хранения данных на классических жёстких дисках и флэш-накопителях: Vinyl. Tarantool известен своей скоростью, и мы постарались не ударить в грязь лицом и на этот раз.
В докладе я расскажу об устройстве нашего нового storage engine:
- как мы объединили in-memory технологию и LSM (log structured merge) деревья для достижения оптимальной производительности и утилизации ресурса накопителя,
- как работает multiversion concurrency control в Vinyl,
- основной компонент в промышленной реализации LSM дерева - merge scheduler, т.е. планировщик слияний и сборки мусора дерева. Я расскажу о подходе, который позволяет максимально снизить износ накопителя, при этом уложиться в заданные рамки производительности запросов.
Как устроена 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-операторы подробно рассматривать НЕ будем, эти скучные мелочи необходимо будет затем самостоятельно смотреть в документации (или не смотреть).
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...OnticoШироко распространено мнение, что SQL СУБД обречены быть медлительными и неповоротливыми, поскольку несут груз совместимости с предыдущими версиями. Это расхожее мнение широко эксплуатируется маркетингом NoSQL СУБД. Однако, это не всегда действительно так.
Разработка в Open Source сообществе позволяет продукту развиваться достаточно гибко, чтобы отвечать требованиям времени. В MySQL и PostgreSQL – самых популярных Open Source СУБД – недавно были проведены оптимизации для работы на больших серверах, что позволило им выполнять более миллиона SQL-запросов в секунду на одном экземпляре БД.
В данном докладе будут рассмотрены конкретные оптимизации, которые позволили добиться таких результатов, которые раньше могли бы показаться фантастическими. И можно сказать, что Open Source СУБД вошли в эру миллионов запросов в секунду.
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...OnticoДовольно часто как адинистраторы, так и разработчики жалуются на низкую производительность приложений, работающих с базой данных, и нередко при этом ищут решения возникших проблем с помощью различных настроек как СУБД, так и операционной системы, пренебрегая при этом самым действенным способом - оптимизацией запросов к собственно БД.
Тому, как понимать, где же узкие места, и как их можно попробовать избежать на примере PostgreSQL и посвящен этот доклад.
Где живут Ваши объявления / Тюрин Михаил (Avito)OnticoАвито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
Anton Turetckii "What does it take to build a host?"FwdaysReal hardware in the data center: everything you wanted to know but didn’t know how to ask.
2020: how to build a server if you don’t use clouds
How to get rid of or reduce problems when ordering, allocating, and mounting the hardware
Yes, there are people working in your data center (If you have one)!
What is hidden in between the server’s power button activation and its appearance in your internal system
Automation and its role in the process: do exactly what is necessary and enough!
Alexandr Serbul "The Rust language for a high-load network service - a quick ...FwdaysIn this talk, we will talk about the evolution of the development of a high-load network cluster for sending push notifications using technologies from Unix / bash and PHP to asynchronous non-blocking multithreaded connections based on Rust / Tokio. Let's talk about the intricacies of Rust development, language features, pitfalls, and ways to quickly learn and use it for web developers with LAMP skills. Let's also talk about Go, Java, and the reasons for our technological decisions.
The talk will be useful for developers wishing to master the latest and popular Rust programming language, functional programming, Haskell ideas with PHP / Python / JavaScript web development experience.
Решардинг Redis "на живую" (Андрей Смирнов, Василий Евсеенко)OnticoThis document describes the architecture of a sharded Redis cluster. It discusses having multiple Redis shards, each with a master and slave configuration for high availability. A proxy server is used to route commands to the appropriate shard master. The system uses Python and Twisted for the implementation.
Архитектура поиска в Avito / Андрей Смирнов (Avito)OnticoИз доклада вы узнаете о том, как в Avito используется Sphinx search, почему было выбрано это решение, какие подводные камни встретились на пути, и как их преодолеть.
Андрей поделится практическим опытом настройки и оптимизации Sphinx search, который позволяет добиться стабильной работы кластера и высокой скорости индексации и поиска. В Avito Sphinx индексирует 35 млн. объявлений каждые 7 минут!
Сергей Чернов — Yandex Data Factory — ICBDA 2015rusbaseВыступление Сергея Чернова (Yandex Data Factory) на International Conference on Big Data and its Applications (ICBDA).
ICBDA — конференция для предпринимателей и разработчиков о том, как эффективно решать бизнес-задачи с помощью анализа больших данных.
http://icbda2015.org/
Обзор перспективных баз данных для highload / Юрий НасретдиновOnticoРИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 10:00
Тезисы:
http://backendconf.ru/2017/abstracts/2773.html
В этом докладе я рассмотрю несколько перспективных, на мой взгляд, баз данных, которые пока еще не очень популярны, но которые определенно ждет успех в будущем, особенно для highload-проектов. Я расскажу о Tarantool, ClickHouse и CockroachDB, о том, как они устроены, и почему я считаю, что они в будущем станут стандартом де-факто, как раньше был MySQL, а сейчас — MongoDB.
...
Анатолий Полицын, агентство интернет-маркетинга «Синапс» — Корпоративный хост...Dev_PartyКонференция Dev Party (http://devparty.ru).
Вологда, 25.03.2017
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey XekПолмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения. Сергей Аверин, Badoo.
Доклад рассказывает о реально примененных способах оптимизации производительности API компании Badoo для собственных десктоп-приложений: как специфика «много постоянных соединений/однотипные запросы/большая нагрузка» повлияла на стратегию оптимизации производительности.
Что было сделано:
• Планирование архитектуры изначально (fault-tolerance, адаптивные апдейты и тайм-ауты, отказ от попыток восстановления после ошибок для единичных команд).
• Переехали с redis на handlersocket.
• Rate-limiting запросов к демонам.
• Синхронизация записей.
• Асинхронность.
• Записи при достижении порога изменения параметров.
• Профилирование кода, анализ потребления CPU, времени ответа.
• Статистика, статистика и еще раз статистика.
• Pconnect.
Доклад будет интересен:
• системным архитекторам,
• server-side разработчикам.
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Демоны в большом проекте – проблемы и их решения (Redis, RabbitMQ, Skytools, Node.JS, HBase)", Александр Чистяков (ведущий разработчик Cezurity)
Аннотация
Когда команда разработчиков собирается написать новый сервис, у нее, как правило, отсутствует свободное время, но есть необходимый энтузиазм. Из-за нехватки времени многие архитектурные решения приходится принимать, руководствуясь общими соображениями, так как провести всесторонние тесты имеющихся на рынке средств в краткие сроки невозможно. Мы, специалисты компании Cezurity, начали свой проект не вчера, и уже накопили некоторый опыт использования технологий, появившихся сравнительно недавно - таких как Skytools, Node.JS, RabbitMQ и Redis. О том, какие возникли проблемы при внедрении этих средств, и какие их ограничения пришлось преодолевать и учитывать - мой доклад. Кроме того, я расскажу о новом направлении в нашей деятельности - внедрении HBase для хранения большого объема данных.
Биография
Докладчик - узкий специалист широкого профиля, относит себя к виду, называемому в современной англоязычной литературе термином "DevOps". Любит принимать участие в создании сложных систем и постоянно это делает. Никогда не работал в Яндексе, компенсировав это работой в Mail.Ru и некоторых других местах.
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya DenisyukВ нашей компании есть система для запуска PHP-скриптов по расписанию, которая позволяет распределять нагрузку на множество узлов и обеспечивать отказоустойвость. И в этой системе необходимо уметь собирать логи скриптов с сотен (и даже тысяч) машин, желательно в режиме реального времени. У нас раньше была система сбора логов, собранная «на коленке», и выдающая относительно невысокую производительность. Производительности стало не хватать, и мы переписали систему на Go. Новая система не использует scribe и обладает некоторыми уникальными фичами, например «вытесняющей многозадачностью» при доставке - если один из скриптов пишет столько логов, что мы не успеваем их всех доставить, логи всех остальных скриптов продолжают доставляться, с небольшой фиксированной задержкой. Система легко забивает гигабитную сетевую карту на нашем сервере-приемнике логов и не слишком «тормозит» доставку в случае, когда пропускной способности всё же не хваетает. В докладе я расскажу о том, как мы делали эту систему и про то, как она работает изнутри. Исходные тексты доступны на github: https://github.com/badoo/thunder
3. О проекте
● В TOP10 сайтов Рунета
● 90М+ запросов в сутки (AVITO, TORG, API)
● 130К+ запросов в минуту
● 230К+ новых объявлений в сутки
● 400K+ картинок в день
● 8М+ пользователей размещали объявления
● 50М новых объявлений за последний год
4. О Redis
● Хранит и работает с данными только из памяти
● На диск пишет только для сохранности
● Поддерживает различные структуры данных
(Strings, Hash, List, Sets, Sorted Sets, Pub/Sub)
● Подобие транзакций в рамках одного процесса
● Репликация из коробки
● С версии 2.6 появились «хранимые операции» на Lua 5
● 1 инстанс использует > 1 ядра CPU
5. Клиентский протокол Redis
*<number of arguments> CR LF
$<number of bytes of argument 1> CR LF
<argument data> CR LF
...
$<number of bytes of argument N> CR LF
<argument data> CR LF
Подробнее http://redis.io/topics/protocol
6. Протокол репликации Redis
1. Слейв посылает команду SYNC мастеру
2. Мастер стартует синхронизацию rdb-снапшота + запускает лог
запросов
3. По завершении SYNC мастер отправляет rdb-снапшот слейву
4. Слейв вычитывает rdb-снапшот и начинает принимать команды
от мастера
Подробнее о репликации http://redis.io/topics/replication
Подробнее о формате rdb http://clck.ru/1AyyU
7. Почему мы используем Redis?
● 400М постоянно обновляемых документов
● 3К+ уникальных запросов write/read в секунду (8K пик)
● Данные должны одинаково быстро отдаваться на всем
протяжении их жизни
● Целостностью в маленьких масштабах можно пренебречь
● Коробочное решение, поставил и забыл (почти правда)
● Прост в развертывании и администрировании
8. Для чего мы используем Redis
● Счетчики для статистики и мониторинга
● Закладки пользователей
● Очереди сообщений
9. Проблемы роста данных
2009 год:
● 100К запросов/сутки
● 5 нод с заделом на будущее
2012 год:
● 20М запросов/сутки
● 250М документов
● 35ГБ данных
Проблема одна — медленная синхронизация данных на диск
10. Решение медленной синхронизации
● Разбиваем ноды на более мелкие
● Поднимаем несколько нод на 1 сервере
● Получаем равномерную нагрузку на диск
11. Задачи и требования
1. Распределить данные по новым нодам
2. Изменить алгоритм распределения ключей
3. Вычистить старые версии данных
4. Не потерять данные
5. Не просидеть за этой задачей «год»
12. Ищем решение
● Переместить данные со старых на новые ноды скриптом
○ нужен длительный downtime
○ нужно получить список ключей (keys *)
● Прослойка в протокол репликации (как делал Skype)
http://www.slideshare.net/profyclub_ru/redis-9518928
○ нельзя перераспределить данные по нодам
○ необходима небольшая остановка на запись в Redis
(в нашем случае много подготовительной работы)
15. Что включает Proxy
● Надежный сетевой демон
● Протокол репликации Redis
○ Парсер формата rdb
○ Парсер протокола Redis
● Алгоритм распределения ключей
● Фильтры устаревших данных
16. В Redis уже все есть, почти все...
● Надежный сетевой демон
● Протокол репликации Redis
○ Парсер формата rdb
○ Парсер протокола Redis
● Алгоритм распределения ключей
● Фильтры устаревших данных
17. Форкаем Redis и вбиваем в него костыли
1. Добавляем в код redis-клиентов для новых нод
2. В разбор rdb добавляем функцию, транслирующую
документы в команды
3. Добавляем фильтр на старые версии данных
4. Заменяем проигрывание команд собственной функцией
5. Собственная функция игнорирует данные или отправляет их
на новые ноды
18. Процесс решардинга ноды
1. Разворачиваем инстансы для нового кластера
2. Настраиваем мониторинг и резервное копирование
3. Поднимаем под каждой старой нодой по Proxy-инстансу
4. Последовательно стартуем Proxy-инстансы, чтобы не забить
сеть rdb-снапшотами
5. Когда Proxy всех нод перешел в режим проигрывания комманд
с мастера, значит уже можно переключать приложение на
новый кластер
19. Результаты
Разработка 2 недели
В фоновом режиме в паре с системным
администратором.
Процесс решардинга 6 часов
20. Patch
1. replication.c : int connectWithMaster(void)
2. redis.c : int processCommand(redisClient *c)
3. rdb.c : int rdbLoad(char *filename)
4. resharding.c *
Исходники https://github.com/prn/redis-resharding
Diff http://clck.ru/1AzbW
21. WARNING!
1. Избегайте тяжелых запросов, Redis не для этого
2. Используйте максимум 1 инстанс на ядро, а лучше 0,75 :)
3. Несколько коллекций (баз) синхронизируется на диск в общий
файл
4. Тщательно тестируйте новые версии Redis перед
обновлением, особенно если версии RDB меняются
5. Не храните очень ценные данные в Redis
22. Ищем разработчиков
HTML/JavaScript, PHP, PostgreSQL, Sphinx, Unix
Если вы считаете, что вы эксперт в какой-нибудь
из перечисленных технологий, отправляйте резюме!
http://www.avito.ru/job