Open Source  разработка в  Badoo Довгаль Антон, Нигматулин Андрей, Рыбак Алексей Badoo.com
В этой презентации <ul><li>Open Source  в  Badoo </li></ul><ul><li>PHP-FPM:  менеджер  FastCGI  процессов для  PHP </li></...
Badoo <ul><li>dating network </li></ul><ul><li>47  млн пользователей на сентябрь 2009 </li></ul><ul><li>17 языков </li></u...
PHP-FPM <ul><li>Менеджер  FastCGI -процессов для  PHP </li></ul><ul><li>Архитектура сервера напоминает  nginx  ( master + ...
PHP-FPM:  эксплуатация <ul><li>Плавно обновляться, не теряя соединения </li></ul><ul><li>Видеть все ошибки </li></ul><ul><...
PHP-PFM:  основные возможности <ul><li>Плавный перезапуск / обновление кода </li></ul><ul><li>Мастер ловит  stderr  воркер...
PHP-PFM:  доп. возможности <ul><li>Error header  снимает проклятие пустой белой страницы (200  OK  на ошибку) </li></ul><u...
PHP- FPM:  развитие <ul><li>2004-2006:  набор разрозненных патчей </li></ul><ul><li>2007 :  один патч поверх  PHP   (5.3.0...
PINBA <ul><li>Сервер статистики для  PHP- приложений </li></ul><ul><li>P HP  I s  N ot  B ottleneck  A nymore </li></ul><u...
Эксплуатация веб-кластера <ul><li>Число запросов (полное, на сервер …) </li></ul><ul><li>Время ответа (среднее, распределе...
PINBA:  архитектура <ul><li>Клиентский модуль для  PHP </li></ul><ul><li>Для любого запроса собираем  script_name, host, t...
PINBA:  данные <ul><li>request: script_name, host, domain, time, rusage, mempeak, output size, timers </li></ul><ul><li>ti...
авария пофиксили   Посмотрим внимательнее…
WTF?
Берём отчет по скриптам. Периоды ? ...   Это базы грузит регулярно запускаемый скрипт! Имея «разрез» по тегам (что за опер...
Blitz <ul><li>Ещё один движок шаблонов </li></ul><ul><li>Написан на  C , модуль для  PHP </li></ul><ul><li>Исторически – з...
 
Blitz: причина PHP is awesome!
Blitz :  дизайн (1 /2 ) <ul><li>View  в  MVC  –  это не шаблон! </li></ul><ul><li>View –  это шаблон (только  HTML +  «раз...
Blitz:  дизайн (2 /2 ) <ul><li>Принцип напоминает  XML/XSLT </li></ul><ul><li>Только всё значительно проще </li></ul><ul><...
Спасибо! <ul><li>Время задавать вопросы </li></ul><ul><li>[email_address] </li></ul><ul><li>BADOO </li></ul>
Upcoming SlideShare
Loading in …5
×

Highload2009 Rybak Badoo Os

3,513 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,513
On SlideShare
0
From Embeds
0
Number of Embeds
1,994
Actions
Shares
0
Downloads
44
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Highload2009 Rybak Badoo Os

  1. 1. Open Source разработка в Badoo Довгаль Антон, Нигматулин Андрей, Рыбак Алексей Badoo.com
  2. 2. В этой презентации <ul><li>Open Source в Badoo </li></ul><ul><li>PHP-FPM: менеджер FastCGI процессов для PHP </li></ul><ul><li>PINBA: сервер статистики для PHP- приложений </li></ul><ul><li>Blitz: ещё один шаблонный движок для PHP </li></ul>
  3. 3. Badoo <ul><li>dating network </li></ul><ul><li>47 млн пользователей на сентябрь 2009 </li></ul><ul><li>17 языков </li></ul><ul><li>LNMP stack: linux, nginx, MySQL, PHP , С /C++ </li></ul><ul><li>Почти вся OS- разработка – на C “ вокруг ” PHP </li></ul><ul><li>Маленькая команда </li></ul><ul><li>Наши OS- проекты направлены на достижение удобства в эксплуатации , повышение управляемости, надёжности, производительности и снижение совокупной стоимости владения. </li></ul>
  4. 4. PHP-FPM <ul><li>Менеджер FastCGI -процессов для PHP </li></ul><ul><li>Архитектура сервера напоминает nginx ( master + N workers ) </li></ul>
  5. 5. PHP-FPM: эксплуатация <ul><li>Плавно обновляться, не теряя соединения </li></ul><ul><li>Видеть все ошибки </li></ul><ul><li>Автоматически реагировать на подозрительное поведение воркеров (выход, тормоза, массовые падения) </li></ul>
  6. 6. PHP-PFM: основные возможности <ul><li>Плавный перезапуск / обновление кода </li></ul><ul><li>Мастер ловит stderr воркеров </li></ul><ul><li>Автоматический трейсинг и завершение работы медленных воркеров </li></ul><ul><li>Аварийный перезапуск при массовом падении воркеров </li></ul>
  7. 7. PHP-PFM: доп. возможности <ul><li>Error header снимает проклятие пустой белой страницы (200 OK на ошибку) </li></ul><ul><li>fastcgi_finish_request() – отдать output клиенту, но продолжить работу (сессии, статистика и т.д.) </li></ul><ul><li>Accelerated upload ( поддержка request_body_file - nginx 0.5.9+) </li></ul>
  8. 8. PHP- FPM: развитие <ul><li>2004-2006: набор разрозненных патчей </li></ul><ul><li>2007 : один патч поверх PHP (5.3.0-0.5.12, http://php-fpm.org ) </li></ul><ul><li>2009 : проект отнимает массу времени, руководство берёт Michael Shadle, http://launchpad.net/php-fpm </li></ul><ul><li>Groups: highload-php-(en|ru)@googlegroups.com </li></ul><ul><li>Вы будете смеяться, но мы тоже не знаем, когда FPM войдет в PHP </li></ul>
  9. 9. PINBA <ul><li>Сервер статистики для PHP- приложений </li></ul><ul><li>P HP I s N ot B ottleneck A nymore </li></ul><ul><li>Какой-то попугай на одном из диалектов языка австралийских аборигенов </li></ul><ul><li>http://pinba.org </li></ul>
  10. 10. Эксплуатация веб-кластера <ul><li>Число запросов (полное, на сервер …) </li></ul><ul><li>Время ответа (среднее, распределение, по скриптам, по серверам …) </li></ul><ul><li>Использование ресурсов ( rusage ) </li></ul><ul><li>Непрерывный мониторинг в реальном времени </li></ul><ul><li>Качество приложений - что меняется при релизах ? </li></ul>
  11. 11. PINBA: архитектура <ul><li>Клиентский модуль для PHP </li></ul><ul><li>Для любого запроса собираем script_name, host, time, rusage … </li></ul><ul><li>При завершении отправляем UDP </li></ul><ul><li>И так со всех машин веб-кластера </li></ul><ul><li>Серверный тред внутри MySQL (v. 5.1.0+) </li></ul><ul><li>SQL- интерфейс ко всем данным </li></ul>
  12. 12. PINBA: данные <ul><li>request: script_name, host, domain, time, rusage, mempeak, output size, timers </li></ul><ul><li>timers: время + пары “ ключ (тэг) – значение ” </li></ul><ul><li>пример : (0.001 sec; {group => db::update, server => dbs42}) </li></ul><ul><li>SQL: “ сырые ” данные или отчеты </li></ul><ul><li>Отчеты : отдельные таблицы , на лету </li></ul><ul><li>Базовые отчёты ( ~ 10) : по системе, по скриптам, по хост+скрипт… </li></ul><ul><li>Отчеты по произвольным тегам (ENGINE=PINBA COMMENT='report:foo,bar‘) => {script_name , foo_value, bar_value, count, time} </li></ul>
  13. 13. авария пофиксили  Посмотрим внимательнее…
  14. 14. WTF?
  15. 15. Берём отчет по скриптам. Периоды ? ... Это базы грузит регулярно запускаемый скрипт! Имея «разрез» по тегам (что за операции, какие базы) – ещё быстрее найдем причину
  16. 16. Blitz <ul><li>Ещё один движок шаблонов </li></ul><ul><li>Написан на C , модуль для PHP </li></ul><ul><li>Исторически – замена php_templates </li></ul><ul><li>Быстрый (нам очень важен CPU usage на веб-машинах) </li></ul><ul><li>Принуждает к разделению труда </li></ul><ul><li>Верстальщик ничего не программирует </li></ul><ul><li>Неожиданно удобен для мультиязычных проектов </li></ul><ul><li>http://alexeyrybak.com/blitz/blitz_en.html </li></ul><ul><li>В продакшене Bad о o с 2006 года </li></ul>
  17. 18. Blitz: причина PHP is awesome!
  18. 19. Blitz : дизайн (1 /2 ) <ul><li>View в MVC – это не шаблон! </li></ul><ul><li>View – это шаблон (только HTML + «разметка») и логика отображения ( PHP ) </li></ul><ul><li>Исторически в Blitz шаблон и логика отображения были строго разделены </li></ul><ul><li>Никакого совместного владения </li></ul><ul><li>Никаких “ недопрограммистов ” -верстальщиков </li></ul><ul><li>Минус : маргинален и неудобен одиночкам </li></ul><ul><li>За время жизни проекта по многочисленным заявкам пришлось-таки добавлять логику в шаблоны </li></ul><ul><li>Нынче в Blitz есть условные операторы, инклюды, callbacks , et cetera , но в Badoo нет ничего подобного </li></ul>
  19. 20. Blitz: дизайн (2 /2 ) <ul><li>Принцип напоминает XML/XSLT </li></ul><ul><li>Только всё значительно проще </li></ul><ul><li>Шаблон накладывается на данные </li></ul><ul><li>Переменная - скаляр </li></ul><ul><li>Список - массив </li></ul><ul><li>Вложенные блоки – структура с соответствующими именами ключей </li></ul><ul><li>Любая логика реализуема в этих прототипах </li></ul><ul><li>Мультиязычность : «чистый» шаблон – прегенерация шаблонов на всех языках , без динамических подстановок </li></ul><ul><li>Мультиязычность : можно получить всю структуру итераций, сохранить «снэпшот» и переводить страницы по «снэпшотам» (в контексте любой ситуации) </li></ul>
  20. 21. Спасибо! <ul><li>Время задавать вопросы </li></ul><ul><li>[email_address] </li></ul><ul><li>BADOO </li></ul>

×