SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Downloaden Sie, um offline zu lesen
«Облако» в Badoo 
год спустя 
Юрий Насретдинов
О компании 
225M пользователей 
4M загрузок фото в день 
40K RPS на PHP-FPM 2K серверов 
160K регистраций в сутки 
50 языков интерфейса
О чём доклад 
• Общая архитектура: история создания, распределение 
нагрузки, отказоустойчивость. 
• Логи скриптов: сбор, индексация, различные виды 
просмотра. 
• Влияние Google App Engine — «облачный» разборщик 
очередей. 
• Планы на будущее 
• Как мы бы реализовали «облако» сейчас
Стек технологий 
• OS — SLES (SUSE Linux Enterprise Server) 
• ЯП — PHP 5.5, C/C++, Go, Java 
• Базы данных — MySQL, Tarantool, SQLite 
• Кеширование — Memcached 
• Веб-сервер — Nginx
Общая архитектура 
• «Старая система»: mcron — утилита для 
раскладки crontab по машинам 
• Общая архитектура новой системы («облака») 
• Распределение нагрузки по машинам, «попугаи» 
• Способы обеспечения отказоустойчивости
mcron 
sendSMS.php 
anonChat.php #1 
moderation.php 
config 
facebook.php 
anonChat.php #2 
errorlogs.php 
scripts1 scripts2 
translate.php 
anonChat.php #9 
cleanup.php 
scripts50 
…
mcron 
sendSMS.php 
anonChat.php #1 
moderation.php 
config 
facebook.php 
anonChat.php #2 
errorlogs.php 
scripts1 scripts2 
translate.php 
anonChat.php #9 
cleanup.php 
scripts50 
…
mcron 
sendSMS.php 
facebook.php 
anonChat.php #1 
moderation.php 
config 
google.php 
anonChat.php #2 
anonChat.php #3 
migration.php 
scripts1 scripts3 
translate.php 
errorlogs.php 
anonChat.php #9 
cleanup.php 
scripts50 
…
Недостатки старой системы 
• Ручное распределение нагрузки по серверам 
• Ручной перенос скриптов с «упавших» машин — 
очень большой downtime 
• Наличие «особенных» машин, на которых 
установлен дополнительный софт
«Облако» 
• Запуск заданий по расписанию / через API 
• Автоматическая балансировка нагрузки 
• Отсутствие «особенных» машин (на всех 
машинах стоит весь необходимый софт) 
• Отказоустойчивость к «падению» машин — 
автоматический перезапуск после таймаута
«Облако» (для разработчика)
«Облако» (для разработчика) 
script 
job #1 
job #2 job #3 
job #4 
job #5
Архитектура 
MySQL 
MySQL 
cloudsys1 
cloudsys2 
cloud1 
• 
• 
• 
cloudN 
Легенда: 
master 
replication 
mysql 
phproxyd 
heartbeat
«Облако» 
• Около 1 000 машин* 
• 15K SQL RPS (50/50 read/write) 
• 1 000 запусков скриптов в секунду 
• «Запускалка» на PHP, 16 процессов 
• Планировщик на go 
* Цифры приведены для 1 ДЦ, у нас их 2
Планировщик 
PHP 
Go
Балансировка нагрузки 
1000 
300 
600 
250 
2000 
230 
1000 
200 
2000 
180 
weighted round-robin
Балансировка нагрузки
Отказоустойчивость 
• MySQL — ручное (!) переключение на slave в случае 
аварии 
• Управляющая логика работает «циклами» — перед 
началом цикла берется лок в базе, по окончании цикла 
лок отпускается 
• Если машина «упала» в середине цикла, то через 
wait_timeout на сервере соединение будет разорвано 
и, соответственно, отпущен лок, давая возможность 
работать логике другой машине
Отказоустойчивость 
• По умолчанию wait_timeout составляет 8 часов… 
• Мы выставили wait_timeout = 60 сек 
• Cпецифичная для Percona настройка 
innodb_kill_idle_transaction = 60 сек 
• Таким образом, при любых проблемах с сетью 
или с машинами, максимальный простой 
управляющей логики составляет 1 минуту
Отказоустойчивость 
• «Задания» запускаются с лимитом на максимальное 
время их работы, который задает пользователь 
• При наступлении лимита скриптами присылается 
SIGTERM 
• Если машина не отвечает — скрипт сам «погибает» от 
SIGALRM, поскольку при запуске скрипта мы вызываем 
alarm(макс.время работы + 3 секунды) 
• Часы на всех машинах идут с точностью до 1 секунды
Сбор логов 
• Каждое задание получает уникальный id 
• Задание — запуск скрипта, с перенаправлением 
вывода в файлы «logs/phproxyd.<id>.(out|err).log» 
• С помощью inotify слушаем изменения в директории 
с логами и отправляем новые строки в scribe 
• С задержкой доставки scribe (несколько секунд) логи 
скапливаются на отдельной logs-машине
Просмотр логов 
• Логи для каждого скрипта складываются в отдельный 
файл 
• Файлы «ротируются» (с использованием logrotate) раз в 
неделю 
• Каждая строчка в логе содержит id запуска и hostname, 
где скрипт запускался 
• Логи «индексируются» в MyISAM-таблички для 
быстрого просмотра истории по конкретному id
Разборщик очередей 
• У нас все «важные» очереди хранятся в MySQL, 
для сохранности и транзакционности посылки 
событий 
• В MySQL довольно тяжело «правильно» 
разбирать очереди во много потоков
Разборщик очередей 
• Существует много стратегий «разбора очереди» 
в MySQL: 
• 1) SELECT … WHERE id % N = M 
• 2) UPDATE … SET instance_id = N WHERE 
instance_id IS NULL 
• 3) SELECT … WHERE shard_id = N
Разборщик очередей 
• Почти все стратегии плохо масштабируются при 
увеличении числа воркеров 
• Подход с shard_id масштабируется, но нужно 
следить за равномерностью распределения + 
требуется решардинг при смене числа воркеров 
• Решили написать обработчик очереди, используя 
API по добавлению заданий в «облако»
Разборщик очередей 
• Реализация: На каждую очередь создается 2 «скрипта»: 
• 1) мастер, который выбирает id новых событий из 
очереди (однопоточный) 
• 2) воркеры, которые обрабатывают пачки заданий 
(получают набор id заданий, которые нужно 
обработать) 
• Мастер «помнит» все id, которые он уже выдал и 
выбирает из очереди с помощью SELECT id … NOT IN(…)
Разборщик очередей 
• Мастер группирует события в «пачки» для 
большей эффективности обработки 
• Равномерное распределение по воркерам 
• Динамическое число воркеров (on demand) 
• Можно сделать такой разборщик без API, через 
fork(), со всеми воркерами на одной машине
Причины «падений» 
• Суммарный downtime системы составил 3 часа за год 
эксплуатации, что дает uptime 99,97%: 
• 1 час — Duplicate key в MySQL :) 
• 1 час — «кривой» merge (неправильно разрешены 
конфликты) — забыли прогнать тесты 
• 30 минут — «сломанный» cron на машинах (баг в 
одной из версий vixie cron) — не отправлялся heartbeat
Проблемы MySQL 
• Основные проблемы возникают из-за 
глобальных mutex’ов или однопоточных 
подсистем: 
• Медленный DROP TABLE больших таблиц — 
перед unlink() берется глобальный metadata lock 
и «висят» все транзакции
Проблемы MySQL 
• Медленный (однопоточный) purge thread — из-за 
MVCC «удаленные» записи могут очень 
медленно «пуржиться» из таблиц — в InnoDB 
возможна ситуация, когда SELECT COUNT(*) из 
«пустой» таблицы идет минуты и возвращает 0 
• Однопоточная репликация (до MySQL 5.6) — 
изменения могут не успевать применяться на 
реплике
Проблемы MySQL 
• Высокие накладные расходы на подключение — 
MySQL плохо «держит» больше N подключений, 
где N составляет 2-3 тысячи 
• В новых версиях MySQL и в MariaDB есть 
«connection pooling», причём для MySQL эта 
возможность отсутствует в Community Edition
Проблемы ядра Linux 
• Баг с выводом ps и «[migration/N]», который якобы 
«ест 100% CPU» (на самом деле не ест) 
• Очень медленный unlink() больших файлов, даже с 
ext4 (возникает из-за высокой фрагментации) 
• «Плохая» реализация inotify — если в директории 
активно создают файлы и у вас много «свободной» 
ОЗУ, inotify_add_watch() будет занимать секунды (!) 
и полностью блокировать запись в эту директорию
Планы на будущее 
• Полностью перевести управляющую логику на Go: 
иметь по одной goroutine на машину «облака» — 
одна «затупившая» машина не будет тормозить 
обработку остальных заданий 
• Перевести phproxyd на PHP (уже написан, нужно 
запустить в production) — экономия на запуске 
интерпретатора 
• Возможно, открыть исходные тексты системы
Как бы мы реализовывали сейчас 
• Управляющая логика на Go — отличный выбор, 
если вы почему-то не любите Erlang 
• Хранение текущего состояния заданий — 
Tarantool + Lua процедуры 
• Сразу написать новый демон для запуска 
заданий вместо существующего (на PHP, конечно 
же)
Вопросы 
Юрий Насретдинов 
@YNasretdinov 
y.nasretdinov@corp.badoo.com

Weitere ähnliche Inhalte

Was ist angesagt?

Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон ТурецкийCodeFest
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав БахмутовCodeFest
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Anton Turetsky
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Ontico
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Ontico
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)Ontico
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Fwdays
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Ontico
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDAlex Chistyakov
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
 

Was ist angesagt? (20)

Антон Турецкий
Антон ТурецкийАнтон Турецкий
Антон Турецкий
 
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...
 
Вячеслав Бахмутов
Вячеслав БахмутовВячеслав Бахмутов
Вячеслав Бахмутов
 
Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?Docker & Puppet: как их скрестить и надо ли вам это?
Docker & Puppet: как их скрестить и надо ли вам это?
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
Микросервисы: опыт использования в нагруженном проекте / Вадим Мадисон (М-Тех)
 
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
smart balancing with nginx+lua / Андрей Кононов (IPONWEB)
 
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...Alexandr Serbul "The Rust language for a high-load network service - a quick ...
Alexandr Serbul "The Rust language for a high-load network service - a quick ...
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
Benchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSDBenchmarking PostgreSQL in Linux and FreeBSD
Benchmarking PostgreSQL in Linux and FreeBSD
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 

Andere mochten auch

Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Badoo Development
 
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре..."Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...Badoo Development
 
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Badoo Development
 
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан..."Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...Badoo Development
 
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Badoo Development
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй DockerBadoo Development
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияBadoo Development
 
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...Andrey Sas
 
Информационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игрИнформационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игрCisco Russia
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Badoo Development
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеBadoo Development
 
Case Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software SafetyCase Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software SafetyPhilip Koopman
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Ontico
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoBadoo Development
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma Badoo Development
 

Andere mochten auch (20)

Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
 
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре..."Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
"Выбраться из спама - как повысить CTR рассылки без потери активности". Андре...
 
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
Приём платежей в Badoo - взгляд изнутри, Анатолий Панов (Badoo)
 
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан..."Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
"Sharding - patterns & antipatterns". Доклад Алексея Рыбака (Badoo) и Констан...
 
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
Docker & Puppet - как их скрестить и надо ли вам это, Антон Турецкий (Badoo)
 
Docker networking
Docker networkingDocker networking
Docker networking
 
Мониторь, автоматизируй Docker
Мониторь, автоматизируй DockerМониторь, автоматизируй Docker
Мониторь, автоматизируй Docker
 
Docker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрацияDocker в Badoo: ПМЖ или временная регистрация
Docker в Badoo: ПМЖ или временная регистрация
 
Docker penetration
Docker penetrationDocker penetration
Docker penetration
 
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
Как слать 100М писем каждый день - секреты емейл-рассылок компании Badoo (Анд...
 
Информационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игрИнформационная безопасность Олимпийских игр
Информационная безопасность Олимпийских игр
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации"
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Near-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проектеNear-realtime аналитика событий в высоконагруженном проекте
Near-realtime аналитика событий в высоконагруженном проекте
 
Case Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software SafetyCase Study of Toyota Unintended Acceleration and Software Safety
Case Study of Toyota Unintended Acceleration and Software Safety
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
Лучшие практики Continuous Delivery с Docker / Дмитрий Столяров (Флант)
 
TechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, ErlyvideoTechLeads meetup: Макс Лапшин, Erlyvideo
TechLeads meetup: Макс Лапшин, Erlyvideo
 
TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma TechLeads meetup: Евгений Потапов, ITSumma
TechLeads meetup: Евгений Потапов, ITSumma
 

Ähnlich wie Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)

Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновOntico
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Andrey Smirnov
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya Denisyuk
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9Technopark
 

Ähnlich wie Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo) (20)

Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Sivko
SivkoSivko
Sivko
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Анатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей СмирновАнатомия веб-сервиса, Андрей Смирнов
Анатомия веб-сервиса, Андрей Смирнов
 
Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)Анатомия веб-сервиса (РИТ-2014)
Анатомия веб-сервиса (РИТ-2014)
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
Web осень 2013 лекция 9
Web осень 2013 лекция 9Web осень 2013 лекция 9
Web осень 2013 лекция 9
 

Mehr von Badoo Development

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationBadoo Development
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUBadoo Development
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерBadoo Development
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, AvitoBadoo Development
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicBadoo Development
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentBadoo Development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityBadoo Development
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsBadoo Development
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноBadoo Development
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruBadoo Development
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooBadoo Development
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL Badoo Development
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Badoo Development
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоадаBadoo Development
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кодаBadoo Development
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal APIBadoo Development
 

Mehr von Badoo Development (20)

Viktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel AutomationViktar Karanevich – iOS Parallel Automation
Viktar Karanevich – iOS Parallel Automation
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Григорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RUГригорий Джанелидзе, OK.RU
Григорий Джанелидзе, OK.RU
 
Андрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.БраузерАндрей Сидоров, Яндекс.Браузер
Андрей Сидоров, Яндекс.Браузер
 
Филипп Уваров, Avito
Филипп Уваров, AvitoФилипп Уваров, Avito
Филипп Уваров, Avito
 
Cocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magicCocoaheads Meetup / Alex Zimin / Swift magic
Cocoaheads Meetup / Alex Zimin / Swift magic
 
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature developmentCocoaheads Meetup / Kateryna Trofimenko / Feature development
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
 
Alex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High AvailabilityAlex Krasheninnikov – Hadoop High Availability
Alex Krasheninnikov – Hadoop High Availability
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Александр Зобнин, Grafana Labs
Александр Зобнин, Grafana LabsАлександр Зобнин, Grafana Labs
Александр Зобнин, Grafana Labs
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественноИлья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
 
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ruTechLeads meetup: Андрей Шелёхин, Tinkoff.ru
TechLeads meetup: Андрей Шелёхин, Tinkoff.ru
 
TechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, BadooTechLeads meetup: Алексей Рыбак, Badoo
TechLeads meetup: Алексей Рыбак, Badoo
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Как мы готовим MySQL
 Как мы готовим MySQL  Как мы готовим MySQL
Как мы готовим MySQL
 
Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo Архитектура хранения и отдачи фотографий в Badoo
Архитектура хранения и отдачи фотографий в Badoo
 
5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада5 способов деплоя PHP-кода в условиях хайлоада
5 способов деплоя PHP-кода в условиях хайлоада
 
ChromeDriver Jailbreak
ChromeDriver JailbreakChromeDriver Jailbreak
ChromeDriver Jailbreak
 
Git хуки на страже качества кода
Git хуки на страже качества кодаGit хуки на страже качества кода
Git хуки на страже качества кода
 
Versioning strategy for a complex internal API
Versioning strategy for a complex internal APIVersioning strategy for a complex internal API
Versioning strategy for a complex internal API
 

Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)

  • 1. «Облако» в Badoo год спустя Юрий Насретдинов
  • 2. О компании 225M пользователей 4M загрузок фото в день 40K RPS на PHP-FPM 2K серверов 160K регистраций в сутки 50 языков интерфейса
  • 3. О чём доклад • Общая архитектура: история создания, распределение нагрузки, отказоустойчивость. • Логи скриптов: сбор, индексация, различные виды просмотра. • Влияние Google App Engine — «облачный» разборщик очередей. • Планы на будущее • Как мы бы реализовали «облако» сейчас
  • 4. Стек технологий • OS — SLES (SUSE Linux Enterprise Server) • ЯП — PHP 5.5, C/C++, Go, Java • Базы данных — MySQL, Tarantool, SQLite • Кеширование — Memcached • Веб-сервер — Nginx
  • 5. Общая архитектура • «Старая система»: mcron — утилита для раскладки crontab по машинам • Общая архитектура новой системы («облака») • Распределение нагрузки по машинам, «попугаи» • Способы обеспечения отказоустойчивости
  • 6. mcron sendSMS.php anonChat.php #1 moderation.php config facebook.php anonChat.php #2 errorlogs.php scripts1 scripts2 translate.php anonChat.php #9 cleanup.php scripts50 …
  • 7. mcron sendSMS.php anonChat.php #1 moderation.php config facebook.php anonChat.php #2 errorlogs.php scripts1 scripts2 translate.php anonChat.php #9 cleanup.php scripts50 …
  • 8. mcron sendSMS.php facebook.php anonChat.php #1 moderation.php config google.php anonChat.php #2 anonChat.php #3 migration.php scripts1 scripts3 translate.php errorlogs.php anonChat.php #9 cleanup.php scripts50 …
  • 9. Недостатки старой системы • Ручное распределение нагрузки по серверам • Ручной перенос скриптов с «упавших» машин — очень большой downtime • Наличие «особенных» машин, на которых установлен дополнительный софт
  • 10. «Облако» • Запуск заданий по расписанию / через API • Автоматическая балансировка нагрузки • Отсутствие «особенных» машин (на всех машинах стоит весь необходимый софт) • Отказоустойчивость к «падению» машин — автоматический перезапуск после таймаута
  • 12.
  • 13. «Облако» (для разработчика) script job #1 job #2 job #3 job #4 job #5
  • 14. Архитектура MySQL MySQL cloudsys1 cloudsys2 cloud1 • • • cloudN Легенда: master replication mysql phproxyd heartbeat
  • 15. «Облако» • Около 1 000 машин* • 15K SQL RPS (50/50 read/write) • 1 000 запусков скриптов в секунду • «Запускалка» на PHP, 16 процессов • Планировщик на go * Цифры приведены для 1 ДЦ, у нас их 2
  • 17. Балансировка нагрузки 1000 300 600 250 2000 230 1000 200 2000 180 weighted round-robin
  • 19. Отказоустойчивость • MySQL — ручное (!) переключение на slave в случае аварии • Управляющая логика работает «циклами» — перед началом цикла берется лок в базе, по окончании цикла лок отпускается • Если машина «упала» в середине цикла, то через wait_timeout на сервере соединение будет разорвано и, соответственно, отпущен лок, давая возможность работать логике другой машине
  • 20. Отказоустойчивость • По умолчанию wait_timeout составляет 8 часов… • Мы выставили wait_timeout = 60 сек • Cпецифичная для Percona настройка innodb_kill_idle_transaction = 60 сек • Таким образом, при любых проблемах с сетью или с машинами, максимальный простой управляющей логики составляет 1 минуту
  • 21. Отказоустойчивость • «Задания» запускаются с лимитом на максимальное время их работы, который задает пользователь • При наступлении лимита скриптами присылается SIGTERM • Если машина не отвечает — скрипт сам «погибает» от SIGALRM, поскольку при запуске скрипта мы вызываем alarm(макс.время работы + 3 секунды) • Часы на всех машинах идут с точностью до 1 секунды
  • 22. Сбор логов • Каждое задание получает уникальный id • Задание — запуск скрипта, с перенаправлением вывода в файлы «logs/phproxyd.<id>.(out|err).log» • С помощью inotify слушаем изменения в директории с логами и отправляем новые строки в scribe • С задержкой доставки scribe (несколько секунд) логи скапливаются на отдельной logs-машине
  • 23. Просмотр логов • Логи для каждого скрипта складываются в отдельный файл • Файлы «ротируются» (с использованием logrotate) раз в неделю • Каждая строчка в логе содержит id запуска и hostname, где скрипт запускался • Логи «индексируются» в MyISAM-таблички для быстрого просмотра истории по конкретному id
  • 24. Разборщик очередей • У нас все «важные» очереди хранятся в MySQL, для сохранности и транзакционности посылки событий • В MySQL довольно тяжело «правильно» разбирать очереди во много потоков
  • 25. Разборщик очередей • Существует много стратегий «разбора очереди» в MySQL: • 1) SELECT … WHERE id % N = M • 2) UPDATE … SET instance_id = N WHERE instance_id IS NULL • 3) SELECT … WHERE shard_id = N
  • 26. Разборщик очередей • Почти все стратегии плохо масштабируются при увеличении числа воркеров • Подход с shard_id масштабируется, но нужно следить за равномерностью распределения + требуется решардинг при смене числа воркеров • Решили написать обработчик очереди, используя API по добавлению заданий в «облако»
  • 27. Разборщик очередей • Реализация: На каждую очередь создается 2 «скрипта»: • 1) мастер, который выбирает id новых событий из очереди (однопоточный) • 2) воркеры, которые обрабатывают пачки заданий (получают набор id заданий, которые нужно обработать) • Мастер «помнит» все id, которые он уже выдал и выбирает из очереди с помощью SELECT id … NOT IN(…)
  • 28. Разборщик очередей • Мастер группирует события в «пачки» для большей эффективности обработки • Равномерное распределение по воркерам • Динамическое число воркеров (on demand) • Можно сделать такой разборщик без API, через fork(), со всеми воркерами на одной машине
  • 29. Причины «падений» • Суммарный downtime системы составил 3 часа за год эксплуатации, что дает uptime 99,97%: • 1 час — Duplicate key в MySQL :) • 1 час — «кривой» merge (неправильно разрешены конфликты) — забыли прогнать тесты • 30 минут — «сломанный» cron на машинах (баг в одной из версий vixie cron) — не отправлялся heartbeat
  • 30. Проблемы MySQL • Основные проблемы возникают из-за глобальных mutex’ов или однопоточных подсистем: • Медленный DROP TABLE больших таблиц — перед unlink() берется глобальный metadata lock и «висят» все транзакции
  • 31. Проблемы MySQL • Медленный (однопоточный) purge thread — из-за MVCC «удаленные» записи могут очень медленно «пуржиться» из таблиц — в InnoDB возможна ситуация, когда SELECT COUNT(*) из «пустой» таблицы идет минуты и возвращает 0 • Однопоточная репликация (до MySQL 5.6) — изменения могут не успевать применяться на реплике
  • 32. Проблемы MySQL • Высокие накладные расходы на подключение — MySQL плохо «держит» больше N подключений, где N составляет 2-3 тысячи • В новых версиях MySQL и в MariaDB есть «connection pooling», причём для MySQL эта возможность отсутствует в Community Edition
  • 33. Проблемы ядра Linux • Баг с выводом ps и «[migration/N]», который якобы «ест 100% CPU» (на самом деле не ест) • Очень медленный unlink() больших файлов, даже с ext4 (возникает из-за высокой фрагментации) • «Плохая» реализация inotify — если в директории активно создают файлы и у вас много «свободной» ОЗУ, inotify_add_watch() будет занимать секунды (!) и полностью блокировать запись в эту директорию
  • 34. Планы на будущее • Полностью перевести управляющую логику на Go: иметь по одной goroutine на машину «облака» — одна «затупившая» машина не будет тормозить обработку остальных заданий • Перевести phproxyd на PHP (уже написан, нужно запустить в production) — экономия на запуске интерпретатора • Возможно, открыть исходные тексты системы
  • 35. Как бы мы реализовывали сейчас • Управляющая логика на Go — отличный выбор, если вы почему-то не любите Erlang • Хранение текущего состояния заданий — Tarantool + Lua процедуры • Сразу написать новый демон для запуска заданий вместо существующего (на PHP, конечно же)
  • 36. Вопросы Юрий Насретдинов @YNasretdinov y.nasretdinov@corp.badoo.com