highload2009 rybak badoo os

21
Open Source разработка в Badoo Довгаль Антон, Нигматулин Андрей, Рыбак Алексей Badoo.com

Upload: highload2009

Post on 16-Jun-2015

3.312 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Highload2009 Rybak Badoo Os

Open Source разработка в Badoo

Довгаль Антон, Нигматулин Андрей,Рыбак Алексей

Badoo.com

Page 2: Highload2009 Rybak Badoo Os

В этой презентации• Open Source в Badoo

• PHP-FPM: менеджер FastCGI процессов для PHP

• PINBA: сервер статистики для PHP-приложений

• Blitz: ещё один шаблонный движок для PHP

Page 3: Highload2009 Rybak Badoo Os

Badoo• dating network• 47 млн пользователей на сентябрь 2009• 17 языков• LNMP stack: linux, nginx, MySQL, PHP, С/C++• Почти вся OS-разработка – на C “вокруг” PHP• Маленькая команда• Наши OS-проекты направлены на достижение

удобства в эксплуатации, повышение управляемости, надёжности, производительности и снижение совокупной стоимости владения.

Page 4: Highload2009 Rybak Badoo Os

PHP-FPM• Менеджер FastCGI-процессов для

PHP

• Архитектура сервера напоминает nginx (master + N workers)

Page 5: Highload2009 Rybak Badoo Os

PHP-FPM: эксплуатация• Плавно обновляться, не теряя

соединения• Видеть все ошибки• Автоматически реагировать на

подозрительное поведение воркеров (выход, тормоза, массовые падения)

Page 6: Highload2009 Rybak Badoo Os

PHP-PFM: основные возможности• Плавный перезапуск/обновление кода• Мастер ловит stderr воркеров• Автоматический трейсинг и завершение

работы медленных воркеров• Аварийный перезапуск при массовом падении

воркеров

Page 7: Highload2009 Rybak Badoo Os

PHP-PFM: доп. возможности• Error header снимает проклятие пустой белой

страницы (200 OK на ошибку)• fastcgi_finish_request() – отдать output

клиенту, но продолжить работу (сессии, статистика и т.д.)

• Accelerated upload (поддержка request_body_file - nginx 0.5.9+)

Page 8: Highload2009 Rybak Badoo Os

PHP-FPM: развитие• 2004-2006: набор разрозненных патчей• 2007: один патч поверх PHP (5.3.0-0.5.12,

http://php-fpm.org)• 2009: проект отнимает массу времени, руководство

берёт Michael Shadle, http://launchpad.net/php-fpm• Groups: highload-php-(en|ru)@googlegroups.com• Вы будете смеяться, но мы тоже не знаем, когда FPM

войдет в PHP

Page 9: Highload2009 Rybak Badoo Os

PINBA• Сервер статистики для PHP-приложений• PHP Is Not Bottleneck Anymore• Какой-то попугай на одном из диалектов

языка австралийских аборигенов• http://pinba.org

Page 10: Highload2009 Rybak Badoo Os

Эксплуатация веб-кластера• Число запросов (полное, на сервер …)• Время ответа (среднее, распределение, по скриптам,

по серверам …)• Использование ресурсов (rusage)• Непрерывный мониторинг в реальном времени• Качество приложений - что меняется при релизах?

Page 11: Highload2009 Rybak Badoo Os

PINBA: архитектура• Клиентский модуль для PHP• Для любого запроса собираем script_name,

host, time, rusage …• При завершении отправляем UDP• И так со всех машин веб-кластера • Серверный тред внутри MySQL (v. 5.1.0+)• SQL-интерфейс ко всем данным

Page 12: Highload2009 Rybak Badoo Os

PINBA: данные• request: script_name, host, domain, time, rusage, mempeak, output

size, timers• timers: время + пары “ключ (тэг) – значение” • пример: (0.001 sec; {group => db::update, server => dbs42})• SQL: “сырые” данные или отчеты• Отчеты: отдельные таблицы, на лету• Базовые отчёты (~10): по системе, по скриптам, по хост+скрипт…• Отчеты по произвольным тегам (ENGINE=PINBA

COMMENT='report:foo,bar‘) => {script_name, foo_value, bar_value, count, time}

Page 13: Highload2009 Rybak Badoo Os

аварияпофиксили

Посмотрим внимательнее…

Page 14: Highload2009 Rybak Badoo Os

WTF?

Page 15: Highload2009 Rybak Badoo Os

Берём отчет по скриптам.

Периоды?... Это базы грузит регулярно запускаемый скрипт!

Имея «разрез» по тегам (что за операции, какие базы) – ещё быстрее найдем причину

Page 16: Highload2009 Rybak Badoo Os

Blitz• Ещё один движок шаблонов• Написан на C, модуль для PHP• Исторически – замена php_templates• Быстрый (нам очень важен CPU usage на веб-машинах)• Принуждает к разделению труда• Верстальщик ничего не программирует• Неожиданно удобен для мультиязычных проектов• http://alexeyrybak.com/blitz/blitz_en.html• В продакшене Badоo с 2006 года

Page 17: Highload2009 Rybak Badoo Os
Page 18: Highload2009 Rybak Badoo Os

Blitz:причина

PHP is awesome!

Page 19: Highload2009 Rybak Badoo Os

Blitz: дизайн (1/2)• View в MVC – это не шаблон!• View – это шаблон (только HTML + «разметка») и логика

отображения (PHP)• Исторически в Blitz шаблон и логика отображения были строго

разделены• Никакого совместного владения• Никаких “недопрограммистов”-верстальщиков• Минус: маргинален и неудобен одиночкам• За время жизни проекта по многочисленным заявкам пришлось-

таки добавлять логику в шаблоны• Нынче в Blitz есть условные операторы, инклюды, callbacks, et

cetera, но в Badoo нет ничего подобного

Page 20: Highload2009 Rybak Badoo Os

Blitz: дизайн (2/2)• Принцип напоминает XML/XSLT• Только всё значительно проще• Шаблон накладывается на данные• Переменная - скаляр• Список - массив• Вложенные блоки – структура с соответствующими именами ключей• Любая логика реализуема в этих прототипах• Мультиязычность: «чистый» шаблон – прегенерация шаблонов на всех

языках, без динамических подстановок• Мультиязычность: можно получить всю структуру итераций, сохранить

«снэпшот» и переводить страницы по «снэпшотам» (в контексте любой ситуации)

Page 21: Highload2009 Rybak Badoo Os

Спасибо!

Время задавать вопросы

[email protected]

BADOO