OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
Все мы знаем, что NGINX – отличный прокси, который может качественно и эффективно распределять нагрузку между бэкендами и фильтровать запросы по определенным условиям. Но при этом часто на практике возникают задачи, которые не решаются его декларативной моделью описания конфигурации: иногда для принятия решения нам нужно сходить в базу данных (в Redis или даже в MySQL), другой сервис или произвести какую-то более сложную обработку запроса/ответа. Именно здесь к нам на помощь приходит мощь Lua и OpenResty.
Из доклада вы узнаете:
* зачем нам Lua внутри NGINX, и почему из седьмого айфона убрали разъем под наушники;
* в каких ситуациях NGINX в паре с Lua справятся с задачей лучше вашего любимого PHP/NodeJS/Ruby/Python/Visual Basic и о прелестях асинхронного ввода-вывода без callback'ов;
* как залезть к NGINX под капот, используя только высокоуровневый язык;
* при чем здесь Openresty, или как упростить себе жизнь;
* примеры бизнес-кейсов: от "умного" прокси до самостоятельного веб-приложения;
* как оно ведет себя в продакшне под большой нагрузкой.
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
Все мы знаем, что NGINX – отличный прокси, который может качественно и эффективно распределять нагрузку между бэкендами и фильтровать запросы по определенным условиям. Но при этом часто на практике возникают задачи, которые не решаются его декларативной моделью описания конфигурации: иногда для принятия решения нам нужно сходить в базу данных (в Redis или даже в MySQL), другой сервис или произвести какую-то более сложную обработку запроса/ответа. Именно здесь к нам на помощь приходит мощь Lua и OpenResty.
Из доклада вы узнаете:
* зачем нам Lua внутри NGINX, и почему из седьмого айфона убрали разъем под наушники;
* в каких ситуациях NGINX в паре с Lua справятся с задачей лучше вашего любимого PHP/NodeJS/Ruby/Python/Visual Basic и о прелестях асинхронного ввода-вывода без callback'ов;
* как залезть к NGINX под капот, используя только высокоуровневый язык;
* при чем здесь Openresty, или как упростить себе жизнь;
* примеры бизнес-кейсов: от "умного" прокси до самостоятельного веб-приложения;
* как оно ведет себя в продакшне под большой нагрузкой.
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
In 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.
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
Как быстро развивается сейчас PostgreSQL — общеизвестно. За несколько дней до РИТ++ заканчивается главный мировой форум разработчиков этой СУБД — конференция PGCon в Канаде. Большая команда разработчиков Postgres Professional принимает участие в этой конференции и готова рассказать все последние новости прямо с PGCon.
Параллельное исполнение запросов, новые стораджи, неутихающая тема Postgres vs key-value storage, распределенный Postgres, высокая доступность, многочисленные улучшения производительности, планы и интриги разработчиков — вот основные темы этой конференции.
Я остановлюсь подробнее на нашем вкладе в ожидаемый релиз 9.6 и планах на, возможно, релиз 10.0.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
Авито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
Популярность постгреса в мире и России растет, с каждым новым релизом появляется все новая и новая функциональность, постгрес становится реальной угрозой монополии Оракл, уже подвинул Монго на поле свободных NoSQL СУБД, однако мировое сообщество ждет решения для горизонтального масштабирования. Создание постгресового кластера является крайне трудной задачей, так как постгрес является базой данных, ориентированной на целостность данных, а используемый алгоритм обеспечения конкурентности транзакций ставит серьезные челленджи перед разработчиками алгоритмов распределенных транзакций.
Оказывается, уже целых пять групп работает над этой задачей, и мы расскажем про их подходы, трудности, в том числе, и политические. Отдельно остановимся на российском опыте и нашем вкладе в решение этой задачи.
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...Tanya Denisyuk
В докладе на примере системы метапоиска aviasales будет рассмотрен переход от монолитной архитектуры RoR приложения к многозвенной системе внутренней разработки на базе tornado/python в целях ослабления зависимостей между подсистемами, упрощения контроля за потоком данных и изоляции потенциальных аварийных ситуаций.
Будут рассмотрены побочные эффекты этого перехода, такие как устойчивость к пиковым нагрузкам, упрощение схемы выкатки обновлений и сокращение потребляемых машинных ресурсов.
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцTanya Denisyuk
Доклад про:
– развитие архитектуры этой системы, как менялись и как будут меняться требования к такого рода системам
– анализ подходящих под эту систему БД, с их проблемами, и опытом реальной эксплуатации
– почему мы остановились на MongoDB, со всеми минусами и плюсами
– немного про команду, трудозатраты и поддержку
– как мы используем эту систему и как она помогает растить наши продукты
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
Разговор в докладе пойдёт о веб-программировании.
При изготовлении веб-проектов то и дело пользуются широко распространёнными фреймворками на базе языков программирования — PHP, Python, Perl, Ruby, Go, Rust, Java и т.п.
Я предлагаю отказаться от употребления оных и использовать для разработки веб-приложений только c2h5oh — расширение для высокопроизводительного сервера nginx. Данное расширение позволяет эффективно использовать PostgreSQL в качестве сервера веб-приложений.
Хочу поделиться со слушателями своим личным опытом разработки с использованием подобной связки. Планирую рассказать о плюсах и минусах такого подхода.
Практика применения Pinba в Badoo / Денис Карасик (Badoo)Ontico
При разработке каждого backend приложения рано или поздно встает вопрос об измерении производительности системы и поиска «узких» мест. Для этой цели мы используем Pinba.
Для тех, кто не знаком с этим инструментом, я коротко расскажу о возможностях Pinba и о том, какие задачи мы решаем с её помощью. Основной акцент доклада будет сделан не на внутреннем устройстве Pinba, процессе установки и настройки — всё это есть в документации. Гораздо полезнее на реальных примерах показать, что и как мы измеряем и как агрегируем данные для построения отчетов в режиме реального времени.
Основные аспекты доклада:
- измерение производительности php скриптов;
- измерение времени обращений к внешним сервисам;
- измерение «хитрейта» кэша;
- измерение производительности обработки очередей;
- построение распределений и использование перцентилей.
Я расскажу о том, как использовать Pinba в связке с Nginx и делать различные агрегации в зависимости от параметров URI.
Большинство примеров будет основано на взаимодействии Pinba с PHP. Но сейчас есть плагины, позволяющие отправлять данные в Pinba из программ на различных языках, методология при этом практически не меняется.
Anton Turetckii "What does it take to build a host?"Fwdays
Real 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!
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
В Badoo мы разрабатываем собственную систему Business intelligence (сокращённо BI). И прежде, чем приступать к анализу данных, их необходимо извлечь (Extract) из источников, преобразовать (Transform) и загрузить (Load) в аналитическую базу.
Я расскажу об этом процессе - ETL (Extract, Transform, Load). Какие бывают источники данных, какие методы сбора мы используем. И самое главное - об инструменте под названием ETLMaster, созданным в нашей компании для автоматизации управления процессом трансформации и загрузки данных.
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...Ontico
Десятки миллионов пользователей просматривают Avito и публикуют почти миллион новых объявлений ежедневно. Сокращение времени появления новых объявлений в поиске - одна из важных задач сервиса. Команда поиска Avito провела в этом направлении ряд оптимизаций, значительно уменьшив время индексации, и, в качестве следующего шага, рассматривала вариант c Delta-индексами, но в результате оказалось возможным реализовать Real Time-индексы. Таким образом мы обеспечили техническую возможность практически мгновенного попадания новых объявлений в поиск в условиях высоких нагрузок по чтению (до 17000 rps) и обновлению (до 1000 rps).
Решить эту и ряд других задач нам удалось после перехода на новую версию системы полнотекстового поиска SphinxSearch, появившуюся в этом году. Мы давно и успешно используем Sphinx для решения различных задач, связанных с поиском, но необходимый нам функционал был полностью доступен только в альфа-версии Sphinx 3.0. После ряда экспериментов и общения с командой разработчиков инструмента, мы решили опробовать альфа-версию в бою, чтобы быстрее получить необходимые нам улучшения, а заодно помочь довести Sphinx до стабильной версии.
В докладе мы подробно расскажем:
- чего не хватало в предыдущей версии Sphinx, какие фичи версии 3.0 были наиболее интересны нам;
- каким образом мы организовали инфраструктуру, чтобы плавно перейти на новую версию Sphinx незаметно для остальной команды, не нарушив работу сервиса, как устроены отдельные подсистемы, как они совершенствовались в ходе работы;
- с какими проблемами мы столкнулись в процессе и как их решили;
- как тестировали, фиксили баги и писали репорты, взаимодействовали с командой разработчик
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
In 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.
Последние новости постгреса с PGCon / О.Бартунов, А.Коротков, Ф.Сигаев (Postg...Ontico
Как быстро развивается сейчас PostgreSQL — общеизвестно. За несколько дней до РИТ++ заканчивается главный мировой форум разработчиков этой СУБД — конференция PGCon в Канаде. Большая команда разработчиков Postgres Professional принимает участие в этой конференции и готова рассказать все последние новости прямо с PGCon.
Параллельное исполнение запросов, новые стораджи, неутихающая тема Postgres vs key-value storage, распределенный Postgres, высокая доступность, многочисленные улучшения производительности, планы и интриги разработчиков — вот основные темы этой конференции.
Я остановлюсь подробнее на нашем вкладе в ожидаемый релиз 9.6 и планах на, возможно, релиз 10.0.
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
Некоторое время назад, когда в очередной раз встал вопрос о производительности большого парка mysql sharding серверов, мы не захотели покупать новые сервера и производить resharding. Мы обнаружили, что компания facebook выпустила в opensource большое количество своих разработок, в том числе и модуль ядра flashcache.
Flashcache — модуль для кэширования блоков блочного устройства, предоставляющий 4 разных режима кэширования.
В данном докладе я расскажу, как мы тестировали, поэтапно проверяя под нагрузкой, 3 из 4 режимов кэширования, сравнивая и выбирая оптимальный. Итогом данной работы стало внедрение данного модуля в нашу архитектуру (фотосервера, сервера БД).
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
Авито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...Ontico
Популярность постгреса в мире и России растет, с каждым новым релизом появляется все новая и новая функциональность, постгрес становится реальной угрозой монополии Оракл, уже подвинул Монго на поле свободных NoSQL СУБД, однако мировое сообщество ждет решения для горизонтального масштабирования. Создание постгресового кластера является крайне трудной задачей, так как постгрес является базой данных, ориентированной на целостность данных, а используемый алгоритм обеспечения конкурентности транзакций ставит серьезные челленджи перед разработчиками алгоритмов распределенных транзакций.
Оказывается, уже целых пять групп работает над этой задачей, и мы расскажем про их подходы, трудности, в том числе, и политические. Отдельно остановимся на российском опыте и нашем вкладе в решение этой задачи.
Антон Щербаков, Отказоустойчивость на примере aviasales — почему даже если на...Tanya Denisyuk
В докладе на примере системы метапоиска aviasales будет рассмотрен переход от монолитной архитектуры RoR приложения к многозвенной системе внутренней разработки на базе tornado/python в целях ослабления зависимостей между подсистемами, упрощения контроля за потоком данных и изоляции потенциальных аварийных ситуаций.
Будут рассмотрены побочные эффекты этого перехода, такие как устойчивость к пиковым нагрузкам, упрощение схемы выкатки обновлений и сокращение потребляемых машинных ресурсов.
Михаил Табунов, Аналитическая платформа на несколько миллиардов событий в месяцTanya Denisyuk
Доклад про:
– развитие архитектуры этой системы, как менялись и как будут меняться требования к такого рода системам
– анализ подходящих под эту систему БД, с их проблемами, и опытом реальной эксплуатации
– почему мы остановились на MongoDB, со всеми минусами и плюсами
– немного про команду, трудозатраты и поддержку
– как мы используем эту систему и как она помогает растить наши продукты
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
Разговор в докладе пойдёт о веб-программировании.
При изготовлении веб-проектов то и дело пользуются широко распространёнными фреймворками на базе языков программирования — PHP, Python, Perl, Ruby, Go, Rust, Java и т.п.
Я предлагаю отказаться от употребления оных и использовать для разработки веб-приложений только c2h5oh — расширение для высокопроизводительного сервера nginx. Данное расширение позволяет эффективно использовать PostgreSQL в качестве сервера веб-приложений.
Хочу поделиться со слушателями своим личным опытом разработки с использованием подобной связки. Планирую рассказать о плюсах и минусах такого подхода.
Практика применения Pinba в Badoo / Денис Карасик (Badoo)Ontico
При разработке каждого backend приложения рано или поздно встает вопрос об измерении производительности системы и поиска «узких» мест. Для этой цели мы используем Pinba.
Для тех, кто не знаком с этим инструментом, я коротко расскажу о возможностях Pinba и о том, какие задачи мы решаем с её помощью. Основной акцент доклада будет сделан не на внутреннем устройстве Pinba, процессе установки и настройки — всё это есть в документации. Гораздо полезнее на реальных примерах показать, что и как мы измеряем и как агрегируем данные для построения отчетов в режиме реального времени.
Основные аспекты доклада:
- измерение производительности php скриптов;
- измерение времени обращений к внешним сервисам;
- измерение «хитрейта» кэша;
- измерение производительности обработки очередей;
- построение распределений и использование перцентилей.
Я расскажу о том, как использовать Pinba в связке с Nginx и делать различные агрегации в зависимости от параметров URI.
Большинство примеров будет основано на взаимодействии Pinba с PHP. Но сейчас есть плагины, позволяющие отправлять данные в Pinba из программ на различных языках, методология при этом практически не меняется.
Anton Turetckii "What does it take to build a host?"Fwdays
Real 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!
Загрузка больших объемов данных для бизнес-аналитикиBadoo Development
В Badoo мы разрабатываем собственную систему Business intelligence (сокращённо BI). И прежде, чем приступать к анализу данных, их необходимо извлечь (Extract) из источников, преобразовать (Transform) и загрузить (Load) в аналитическую базу.
Я расскажу об этом процессе - ETL (Extract, Transform, Load). Какие бывают источники данных, какие методы сбора мы используем. И самое главное - об инструменте под названием ETLMaster, созданным в нашей компании для автоматизации управления процессом трансформации и загрузки данных.
Sphinx 3.0 и RT-индексы на основном поиске Avito / Андрей Смирнов, Вячеслав К...Ontico
Десятки миллионов пользователей просматривают Avito и публикуют почти миллион новых объявлений ежедневно. Сокращение времени появления новых объявлений в поиске - одна из важных задач сервиса. Команда поиска Avito провела в этом направлении ряд оптимизаций, значительно уменьшив время индексации, и, в качестве следующего шага, рассматривала вариант c Delta-индексами, но в результате оказалось возможным реализовать Real Time-индексы. Таким образом мы обеспечили техническую возможность практически мгновенного попадания новых объявлений в поиск в условиях высоких нагрузок по чтению (до 17000 rps) и обновлению (до 1000 rps).
Решить эту и ряд других задач нам удалось после перехода на новую версию системы полнотекстового поиска SphinxSearch, появившуюся в этом году. Мы давно и успешно используем Sphinx для решения различных задач, связанных с поиском, но необходимый нам функционал был полностью доступен только в альфа-версии Sphinx 3.0. После ряда экспериментов и общения с командой разработчиков инструмента, мы решили опробовать альфа-версию в бою, чтобы быстрее получить необходимые нам улучшения, а заодно помочь довести Sphinx до стабильной версии.
В докладе мы подробно расскажем:
- чего не хватало в предыдущей версии Sphinx, какие фичи версии 3.0 были наиболее интересны нам;
- каким образом мы организовали инфраструктуру, чтобы плавно перейти на новую версию Sphinx незаметно для остальной команды, не нарушив работу сервиса, как устроены отдельные подсистемы, как они совершенствовались в ходе работы;
- с какими проблемами мы столкнулись в процессе и как их решили;
- как тестировали, фиксили баги и писали репорты, взаимодействовали с командой разработчик
Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим дела...Ontico
В пересчёте на количество транзисторов оперативная память занимает в современном сервере не менее 85% (если добавить сюда внутрипроцессорные кэши, то и сильно за 90%). Все эти транзисторы оплачены, они греются. Хотелось бы использовать их по максимуму. При этом уже с середины 90-х годов именно скорость доступа к данным ограничивает производительность большинства вычислений (фоннеймановское узкое горло, стена памяти).
Мы так привыкли к слову RAM, что порой принимаем название random access за чистую монету. Однако во что на самом деле обходится доступ в память? И как это узнать? И что потом с этим делать?
Подробнее, о чём пойдёт речь:
- Современная иерархия памяти от регистров процессора до ячеек DRAM (кэши, каналы, NUMA, банки, строки, столбцы).
- Задержка (latency), пропускная способность (bandwidth), sustained bandwidth - каковы они на разных уровнях иерархии, и как замерять.
- Возможности по прыжкам через уровни иерархии (prefetch, non-temporal writes, DDIO).
- Виды серверной памяти - DDR3, DDR4, RDIMM (registered), LRDIMM (load-reduced), ECC - замеряем, выбираем...
- Немножко поговорим о тенденциях в эволюции системы памяти и о том, что нас ожидает в будущем.
Архитектура поиска в Avito / Андрей Смирнов (Avito)Ontico
Из доклада вы узнаете о том, как в Avito используется Sphinx search, почему было выбрано это решение, какие подводные камни встретились на пути, и как их преодолеть.
Андрей поделится практическим опытом настройки и оптимизации Sphinx search, который позволяет добиться стабильной работы кластера и высокой скорости индексации и поиска. В Avito Sphinx индексирует 35 млн. объявлений каждые 7 минут!
Sphinx 3.0, поиск 15 лет спустя / Андрей Аксенов (Sphinx)Ontico
За 15 лет разработки концепция немного поменялась и, начиная со Sphinx 3.0, мы теперь, если задуматься, вполне себе самостоятельная распределенная база (с фокусом на полнотекстовый поиск), а не только лишь добавочный к основному хранилищу поисковый движок.
Порядка 2 лет уже пилим ряд больших внутренних переделок под флагом 3.0 и, вот, наконец-то, доделываем. (На момент подачи тезисов "наполовину" готов новый клевый формат индекса; к моменту проведения конференции рассчитываем выложить публично доступную альфу).
Уже приделано всякое интересное:
* новый формат индекса, компактный и быстрый (в разы быстрее индексация и поиск);
* дисковое хранилище для документов и всяких спец. данных;
* полноценные B-tree индексы по атрибутам;
* репликация индексов.
Сделаю краткий обзор внутренней реализации этого всего, расскажу, как мы переложили битики и байтики, и что и почему это дало функционально.
Бенчмарков "а почему не Elastic" сделать не успеем, для этого нужны добровольцы. Добровольцы, подайте 1 громкий зеленый email вверх.
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
Расскажу зачем они вообще нужны. Пройдемся по технологиям и промоем им косточки. Рассмотрим достоинства и недостатки, а также где и когда лучше всего применять ту или иную ORM.
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
Мы прошли довольно большой путь в разработке через микросервисы.
Начинали разработку, когда это за рубежом только входило в тренд. По сути, не было никакой информации о том, как это делать правильно и, вообще, стоит ли это делать. Не было понятно, имеем ли мы дело с очередной модной штукой, или парадигма действительно решает часть проблем, характерных для больших нагруженных проектов.
Мы прошли путь от того, когда 100 микросервисов казалось много ... Сейчас цифры в 1000, 2000 кажутся чем-то обыденным.
В ходе доклада я постараюсь сделать упор на эксплуатацию системы, работающей на микросервисах. Расскажу, какой инструментарий показал себя хорошо на больших объемах, а от какого пришлось отказаться. Покажу на примерах, как эволюционировала наша система управления конфигурацией системы в целом и отдельными сервисами. Расскажу, как корректно предоставлять API сервиса и правильно поставлять его клиентские библиотеки, чтобы избегать внутренних и искусственных зависимостей. Покажу, как мы работаем с распределенными сервисами и обеспечиваем отказоустойчивость.
Как и зачем создавать NginX-модуль - теория, практика, профит / Василий Сошни...Ontico
NginX является фундаментальным элементом практически в любом проекте.
Сегодня многие умеют NginX конфигурировать, писать lua скрипты, использовать как proxy. Другими словами, решать задачи, не выходя за рамки nginx.conf, и в большинстве случаев этого достаточно.
Но с ростом проекта или в рамках некой бизнес-задачи может появиться необходимость в NginX-модуле. И тут возникают вопросы и проблемы:
- Как писать NginX-модули?
- Какие есть особенности?
- Как деплоить?
- Почему нет примеров, а существующие устаревшие?
В этом докладе я расскажу об особенностях разработки под NginX.
Начнем с особенностей memory model, фаз обработки запроса/контента, а закончим ответом на вопрос: "А когда нужен NginX-модуль?".
Леонид Васильев "Python в инфраструктуре поиска"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Леонид Васильев "Python в инфраструктуре поиска"
О докладе:
Описание архитектуры и реализации внутренних инструментов для управления поисковым кластером.
Что такое инфраструктура поиска? Какие задачи приходится решать? Какие инструменты для управления кластером используются в поиске? Как они устроены изнутри? Что можно посоветовать проектам с большой инфраструктурой? Какие существуют open-source аналоги?
SETCON'18 - Vitali Fokin - Kubernetes 101Nadzeya Pus
Обзор возможностей Kubernetes, зачем он нужен, кому и когда, а также немного хороших практик по развертыванию и разработке Kubernetes-powered приложений.
мониторинг производительности Web приложений на pythonSlach
как понять где тормозит твое приложение в реальном времени? как не потеряться в океане метрик и собрать на дашборде только нужные? видео https://youtu.be/JgezdgtoNG8
Владимир Алаев "Разработка на Node.js: инструменты, библиотеки, сервисы"Yandex
Платформа Node.js становится все более популярной. Для нее уже создано много библиотек и инструментов. Рассказ о том, какие из них и для чего мы используем.
1. Нагруженный поиск на Sphinx
Роман Павлушко Михаил Тюрин
rpavlushko@avito.ru mtyurin@avito.ru
Sphinx User Conference 2011, St. Petersburg
2. о проекте
• 60М запросов в сутки (AVITO, TORG, API)
• 80К запросов в минуту
• 75К пользователей online
• 50М объявлений всего
• 4М активных объявлений
• 150К новых объявлений в сутки
• 10 новых объявлений в секунду в пики
Sphinx User Conference 2011, St. Petersburg
3. распределение просмотров на сайте
88%
запросов
связаны
с поиском!
Sphinx User Conference 2011, St. Petersburg
4. динамика роста
постоянный рост
req/day, M
Sphinx User Conference 2011, St. Petersburg
5. используемые технологии
Web-server nginx
Application php-fpm + eaccelerator
DB postgresql + pgbouncer + londiste
NoSQL redis
Search Engine sphinx
Cache/Session memcached + magent
Monitoring munin, monit, bash
... git, python, etc
Sphinx User Conference 2011, St. Petersburg
6. powered by sphinx
● поиск по объявлениям (сайт, api)
● поиск похожих объявлений
● автодополнение (suggest)
● поиск по полной базе объявлений
● внутренняя статистика
Sphinx User Conference 2011, St. Petersburg
9. поиск по объявлениям / цифры
• 80М запросов в сутки
• 1700 запросов в секунду в пики
• 4М документов в индексе
• размер индексов 2GB
• 46 индексов (основной + категории)
• каждые 10 минут полная переиндексация
• 8 серверов (x16 core)
• 69% запросов без query (43 vs 22 ms)
Sphinx User Conference 2011, St. Petersburg
10. поиск по объявлениям / скорость
Query Time
Sphinx User Conference 2011, St. Petersburg
11. поиск по объявлениям / offset
первые 50 страниц 99%
Page
Sphinx User Conference 2011, St. Petersburg
12. поиск по объявлениям / архитектура
clients
sphinxql
M S1 S2 S3 S4 S5 S6 S7
deploy
DB
indexer repca londiste master 1
Sphinx User Conference 2011, St. Petersburg
13. поиск по объявлениям / клиенты
• API SphinxQL
• lazy initialization
• по возможности используем multi-query
• вычисляем оптимальный max_matches
• кешируем поисковую выдачу на 1 минуту
• кешируем похожие объявления до ближайшей
переиндексации
• берем из sphinx только ID документов
Sphinx User Conference 2011, St. Petersburg
14. поиск по объявлениям / настройки sphinx
• отдельные конфиги для индексатора и поиска
• workers = prefork threads (проблемы с HUP!)
• отказ от MVA, на каждый фильтр свой атрибут
• на каждую категорию свой индекс
• дисковые индексы без дельты* хранятся в RAM
• отказ от query_log
• настройки под характеристики железа
(max_children, read_buffer, read_unhinted, etc)
Sphinx User Conference 2011, St. Petersburg
15. поиск по объявлениям / требования
• tmax < 30 минут
• время на применение услуг к объявлению
• время на премодерацию
• время на переиндексацию
• сохранить быстрые настройки поиска
• поддержать целостность данных
• решить проблему селективности выборки из БД
Sphinx User Conference 2011, St. Petersburg
16. построение
снапшота – 18 с
индексация
многопоточная
индексация
items_full – 515 с
items_cat* – 380 c
Sphinx User Conference 2011, St. Petersburg
время переиндексации 11:40
деплой индексов
на слейвы – 120 с
деплой мастера
и ротация – 35 с
17. индексация / хранение объявлений
• одна большая база, одна большая таблица ― всё
очень страшно
• но! ― всё работает: OLTP, index scan (1K+ / sec)
• 1K+ req / sec, выдача до 50 Mbit / sec
• упирались в кеш / диcк
Sphinx User Conference 2011, St. Petersburg
18. индексация / хранение объявлений
• MV -- materialized view, "хитрые" триггеры
• repca и londiste с небольшим патчем
• конфиги pg: master ― размазывем io, repca ―
"in-memory pg", version: 9.1.1
• pgbouncer 'ы : разные пулы под разные задачи
(сайт, индексация, мониторинг, сервисы)
Sphinx User Conference 2011, St. Petersburg
20. индексация
1.1) mv триггеры ( 9.0 )
create constraint trigger имя_триггера
after список_событий on таблица_связанная_с_mv
deferrable initially deferred
for each row execute procedure repca.mv_refresh_trg();
1.2) mv рефреш функция
CREATE OR REPLACE FUNCTION repca.mv_refresh_trg() RETURNS trigger AS
$$
begin
delete from repca.items_mv mv where ( mv.item_id = OLD.item_id );
insert into repca.items_mv select * from repca.items_v v where ( v.item_id = OLD.item_id );
return null;
end;
$$
LANGUAGE 'plpgsql';
Sphinx User Conference 2011, St. Petersburg
21. индексация / построение снапшота
• сфинксы вызывают базу + psql
• транзакция построения ss
• а в ней функция построения ss
• таблицы и hstore, оверхед hstore: 14 sec / 10M
• параллельное вычитывание ss
• ! seq scan из shared buffers
* ss - снапшот / snapshot
Sphinx User Conference 2011, St. Petersburg
22. индексация
2) построение снапшота
begin;
set transaction isolation level serializable;
select sphinx.x_prepare_active_items({{ idx }});
end;
3) hstore
select
...
(x.tag -> 'val188')::smallint as val188,
(x.tag -> 'val187')::smallint as val187,
(x.tag -> 'val184')::smallint as val184,
...
from sphinx.x_a_v_i1 x
where x.category_id = 15
Sphinx User Conference 2011, St. Petersburg
23. индексация
create view repca.items_v as
select
....
ix.item_id as item_id,
...
sphinx.x_get_pure_params (
case ix.category_id
when 9 then (select hstore(cx.*) from options.category_9 cx where cx.active and (cx.item_id = ix.item_id))
when 10 then (select hstore(cx.*) from options.category_10 cx where cx.active and (cx.item_id = ix.item_id))
when 11 then (select hstore(cx.*) from options.category_11 cx where cx.active and (cx.item_id = ix.item_id))
...
when 109 then (select hstore(cx.*) from options.category_109 cx where cx.active and (cx.item_id = ix.item_id))
end
) as tag_params
from
items ix ....
where
( ix.active ) and ( .... )
Sphinx User Conference 2011, St. Petersburg
24. индексация / база в памяти
pg_buffercache b
inner join pg_class c on ( b.relfilenode = pg_relation_filenode(c.oid) )
rel buffers_mb rel_mb all in
memory
items_mv 2359 2358 100 % seq scan и фильтры,
вычитка через вьюшку-
запрос
x_a_v_i1 2202 2201 100 % снапшот -- ! seq scan Ы
items_mv_pkey 266 266 100 % так как londiste
pg_toast_91311 26 26 100 %
pg_toast_19818921 24 24 100 %
pg_toast_2619 9 9 100 %
pg_toast_91311_index 2 2 100 %
Sphinx User Conference 2011, St. Petersburg
26. индексация / время построения и чтения
• psql ... -c 'begin; [строим_снапшот]; end;' (18 с)
• в 9.2 не надо будет строить таблицу в принципе
• можно будет из сессии экспортировать
транзакционный снапшот из mvcc
Sphinx User Conference 2011, St. Petersburg
27. индексация / время построения и чтения
explain (analyze, buffers)
select * from sphinx.x_a_v_i1;
"Seq Scan on x_a_v_i1 (cost=0.00..293363.20 rows=11283200 width=172)
(actual time=0.014..4880.666 rows=4229686 loops=1)"
" Buffers: shared hit=282080"
"Total runtime: 8996.531 ms"
explain (analyze, buffers)
select * from sphinx.x_a_v_i1 where category_id = 27 -- 27 - "шмотки" -- фильтр-предикат
на категорию
"Seq Scan on x_a_v_i1 (cost=0.00..296876.50 rows=56440 width=172) (actual time=0.044..
3593.978 rows=712912 loops=1)"
" Filter: (category_id = 27)"
" Buffers: shared hit=282202"
"Total runtime: 4308.269 ms"
Sphinx User Conference 2011, St. Petersburg
28. рост БД - НО постоянный хитрейт
Sphinx User Conference 2011, St. Petersburg
29. io мастера теперь не влияет на индексацию
Sphinx User Conference 2011, St. Petersburg
30. backoffice
E D
O R
N S
C E
Sphinx User Conference 2011, St. Petersburg
31. backoffice / архитектура
1
1 4/4/16
1
Pool
3
3
3
Group 1
3
3 4
Node 1 Node 2 Node 3 Node 4
Sphinx User Conference 2011, St. Petersburg
32. backoffice / цифры
• 50M документов в индексе
• размер индексов 16GB
• 8 серверов
• 16 нод (по 2 на сервер)
• ежеминутная индексация
• раз в час мерж дельты
• нагрузки нет (в среднем 30 запросов в минуту)
Sphinx User Conference 2011, St. Petersburg
33. backoffice / реализация
• основной индекс + дельта
• MVA для поиска по параметрам категории
• дельта по last_update_txtime с нахлестом
• 3 уровня - ноды/группа/pool
• приложение для управления конфигурацией
• медленная полная переиндексация
Sphinx User Conference 2011, St. Petersburg
34. backoffice / время индексации
Sphinx User Conference 2011, St. Petersburg
36. автодополнение
• обновляем индекс раз в неделю
• source: парсим access_log в БД
• чистим мусор (not found, stop words)
• вычисляем популярные запросы (order by rank)
• enable_star = 1 ― ищем по маске
• sql_attr_string ― храним фразу в sphinx
• учитываем категорию при поиске
• кеш работает (~1% запросов к sphinx)
Sphinx User Conference 2011, St. Petersburg
37. автодополнение / цифры
• размер индекса - 25MВ :)
• 200K документов в индексе
• 1M запросов в сутки (кеш работает)
• среднее время выполнения запроса - 0.0003 s!
Почему suggest сделан на sphinx?
Потому что разработка бекенда заняла день,
и это прекрасно работает
Sphinx User Conference 2011, St. Petersburg
38. cпасибо!
вопросы?
Роман Павлушко Михаил Тюрин
rpavlushko@avito.ru mtyurin@avito.ru
@pavlushko
Sphinx User Conference 2011, St. Petersburg