SlideShare a Scribd company logo
1 of 36
Download to read offline
«Облако» в 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

More Related Content

What's hot

Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Ontico
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереBadoo Development
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Ontico
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Ontico
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...Ontico
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Ontico
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...SQALab
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 

What's hot (18)

Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
Опыт миграции между дата-центрами / Михаил Тюрин, Сергей Бурладян (Avito)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)Евгений Потапов (Сумма Айти)
Евгений Потапов (Сумма Айти)
 
Ровная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластереРовная балансировка нагрузки на фронтенд-кластере
Ровная балансировка нагрузки на фронтенд-кластере
 
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
Как devops исчерпывает себя, и что будет дальше / Кирилл Вечера (Jetware)
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)Тестируем производительность распределённых систем, Александр Киров (Parallels)
Тестируем производительность распределённых систем, Александр Киров (Parallels)
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
 
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
Опыт работы с LuaJIT в нагруженных интернет-проектах / Александр Гладыш (Logi...
 
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 

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

Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разраб...Badoo Development
 
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
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой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
Жизнь проекта на 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
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 

Similar to Облако в 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
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
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
Жизнь проекта на 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
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
Как мы учились чинить самолеты в воздухе / Евгений Коломеец (Virtuozzo)
 

Облако в 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