Your SlideShare is downloading. ×
0
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Badoo в облаках. Решение для запуска cli-скриптов в облаке собственной разработки

424

Published on

Доклад Юрия Насретдинова на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Доклад Юрия Насретдинова на конференции Application Developer Days-4. г.Минск 13 декабря 2013

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
424
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Badoo в облаках (решение для запуска cli-скриптов в облаке собственной разработки) ! Юрий Насретдинов, Badoo
  • 2. Badoo • 199+ млн пользователей • PHP-FPM: 40+ тыс запросов в сек • 160 тыс регистраций в день • 4 млн фото / видео в день • 50 языков интерфейса • 2 000+ серверов
  • 3. О чём этот доклад • Как мы запускали cron-задания до введения «облака» • Требования к новому «облаку» • Существующие решения • Общая архитектура • Концепция «заданий» • Распределение нагрузки • Отказоустойчивость
  • 4. Cron • 1 000 различных скриптов (cron-заданий) • Время работы — от 0,1 сек до нескольких суток • Мало CPU-bound скриптов (в основном нужна память или сеть) • Параллельная обработка с помощью fork() • 2 000 000 строк кода
  • 5. Cron: mcron config sendSMS.php anonChat.php #1 moderation.php facebook.php anonChat.php #2 errorlogs.php scripts1 scripts2 … translate.php anonChat.php #9 cleanup.php scripts50
  • 6. Cron: mcron config sendSMS.php anonChat.php #1 moderation.php facebook.php anonChat.php #2 errorlogs.php scripts1 scripts2 … translate.php anonChat.php #9 cleanup.php scripts50
  • 7. Cron: mcron config sendSMS.php facebook.php anonChat.php #1 moderation.php google.php anonChat.php #2 anonChat.php #3 migration.php scripts1 scripts3 … translate.php errorlogs.php anonChat.php #9 cleanup.php scripts50
  • 8. Cron: недостатки • Жесткая привязка скриптов к конкретным машинам • «Ручная» балансировка нагрузки • Сложный мониторинг запуска заданий • Ручной перенос скриптов в случае «падения» • Downtime — несколько часов
  • 9. «Облако» • Равномерное распределение нагрузки по серверам • Отказоустойчивость • Понятный мониторинг • Запуск заданий по расписанию
  • 10. Существующие решения: • Gearman • SLURM • Mesos • ZooKeeper • Beanstalk • Scalr
  • 11. Существующие решения: SLURM • SLURM мы больше всего исследовали • 2 базовых алгоритма балансировки: round-robin и последовательная полная загрузка машины • Заточен под математические расчеты, MPI • Не учитывает нагрузку на машине?
  • 12. Существующие решения: Gearman • Создан для синхронной обработки событий • Непрозрачный failover • Предполагает наличие фиксированных worker’ов • Нам придется переписывать весь наш код
  • 13. Решили писать своё решение
  • 14. Общая архитектура phproxyd phproxyd phproxyd phproxyd
  • 15. Общая архитектура phproxyd phproxyd phproxyd phproxyd
  • 16. Введение в строй новой машины • Админ: Поставить сервер в стойку • Админ: Поставить ОС (xCAT) • Админ: Поставить PHP и phproxyd (puppet) • Админ: Прописать heartbeat в cron • Программист: радоваться
  • 17. Добавление нового скрипта Никакой консоли, никакого SVN, никаких mcron через SSH!
  • 18. «Задания» • Задание — запуск скрипта (!) • Генерируются с заданной периодичностью или добавляются через специальный API • Должно обрабатываться строго одним потребителем • CAP-теорема (Consistency, Availability, Partition Tolerance) • «Поколения» заданий
  • 19. Распределение нагрузки • «Попугаи» • Round-robin с весами (по машинам с наибольшим количеством свободных «попугаев») • Виртуальное потребление ресурсов • Учитывается только свободные CPU и память на машине
  • 20. Распределение нагрузки обновляется каждые 10 секунд 1000 300 600 250 2000 230 round-robin 1000 200 2000 180
  • 21. Распределение нагрузки
  • 22. Распределение нагрузки • Много «облачных» машин (около 100) • Хотим добавить все машины (около 1000) • Если машина загружена выше 70% — новые задания на неё не попадают • Алгоритм постоянно улучшается с учётом потребностей и полученных результатов
  • 23. Реализация • Java? • Erlang? • C? • Go? • PHP !
  • 24. Реализация: phproxyd • Демон на C, писался для других целей • Умеет запускать PHP-скрипты • А также следить за ними • Пишется на Go примерно за 2 дня • Что мы и сделали
  • 25. Реализация: управляющая логика • Несколько процессов, работающих в while(true) • Раз в 10 минут всем посылается SIGTERM • Максимальное время простоя «облака» — 10 минут • Генерация заданий — один процесс • Запуск заданий — N процессов, зависит от общего числа машин в облаке
  • 26. Пример скрипта (до «облака»)
  • 27. Пример скрипта (наше время)
  • 28. Отказоустойчивость • «Падение» машины в облаке • Проблемы с сетью • Проблемы с конфигурацией машин • «Падение» базы данных • «Падение» мастер-узла
  • 29. Падение «облачной» машины • Машина не отвечает нам по сети, но может продолжать выполнять отданные ей задания • Решение — alarm(2), SIGALRM • Если задание выполняется больше отведенного времени, благодаря alarm(2) мы можем быть уверены, что оно завершилось • Максимальный простой определяется временем работы скрипта
  • 30. Проблемы с сетью • Heartbeat перестанет работать — мониторинг это увидит • Жесткие таймауты на обращения к phproxyd • PHP-скрипты «зависнут» — через 10 минут придет SIGTERM • Нарушение связности сети: alarm(2) нас спасет
  • 31. Проблемы с конфигурацией Проблемы с конфигурацией машин решает мониторинг
  • 32. Падение управляющей машины Другая машина автоматически становится «мастером» (без задержки)
  • 33. «Падение» базы данных • Master-slave репликация • В случае «падения» мастера переключение происходит автоматически с помощью service ip
  • 34. Вопросы Юрий Насретдинов, Badoo (http://badoo.com/) ! http://habrahabr.ru/company/badoo/ http://habrahabr.ru/users/yourock/ @YNasretdinov y.nasretdinov@corp.badoo.com

×