Highload2009 Rybak Badoo Os - Presentation Transcript
Open Source разработка в Badoo Довгаль Антон, Нигматулин Андрей, Рыбак Алексей Badoo.com
В этой презентации
Open Source в Badoo
PHP-FPM: менеджер FastCGI процессов для PHP
PINBA: сервер статистики для PHP- приложений
Blitz: ещё один шаблонный движок для PHP
Badoo
dating network
47 млн пользователей на сентябрь 2009
17 языков
LNMP stack: linux, nginx, MySQL, PHP , С /C++
Почти вся OS- разработка – на C “ вокруг ” PHP
Маленькая команда
Наши OS- проекты направлены на достижение удобства в эксплуатации , повышение управляемости, надёжности, производительности и снижение совокупной стоимости владения.
PHP-FPM
Менеджер FastCGI -процессов для PHP
Архитектура сервера напоминает nginx ( master + N workers )
PHP-FPM: эксплуатация
Плавно обновляться, не теряя соединения
Видеть все ошибки
Автоматически реагировать на подозрительное поведение воркеров (выход, тормоза, массовые падения)
PHP-PFM: основные возможности
Плавный перезапуск / обновление кода
Мастер ловит stderr воркеров
Автоматический трейсинг и завершение работы медленных воркеров
Аварийный перезапуск при массовом падении воркеров
PHP-PFM: доп. возможности
Error header снимает проклятие пустой белой страницы (200 OK на ошибку)
fastcgi_finish_request() – отдать output клиенту, но продолжить работу (сессии, статистика и т.д.)
Accelerated upload ( поддержка request_body_file - nginx 0.5.9+)
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
PINBA
Сервер статистики для PHP- приложений
P HP I s N ot B ottleneck A nymore
Какой-то попугай на одном из диалектов языка австралийских аборигенов
http://pinba.org
Эксплуатация веб-кластера
Число запросов (полное, на сервер …)
Время ответа (среднее, распределение, по скриптам, по серверам …)
Использование ресурсов ( rusage )
Непрерывный мониторинг в реальном времени
Качество приложений - что меняется при релизах ?
PINBA: архитектура
Клиентский модуль для PHP
Для любого запроса собираем script_name, host, time, rusage …
При завершении отправляем UDP
И так со всех машин веб-кластера
Серверный тред внутри MySQL (v. 5.1.0+)
SQL- интерфейс ко всем данным
PINBA: данные
request: script_name, host, domain, time, rusage, mempeak, output size, timers
timers: время + пары “ ключ (тэг) – значение ”
пример : (0.001 sec; {group => db::update, server => dbs42})
SQL: “ сырые ” данные или отчеты
Отчеты : отдельные таблицы , на лету
Базовые отчёты ( ~ 10) : по системе, по скриптам, по хост+скрипт…
Берём отчет по скриптам. Периоды ? ... Это базы грузит регулярно запускаемый скрипт! Имея «разрез» по тегам (что за операции, какие базы) – ещё быстрее найдем причину
Blitz
Ещё один движок шаблонов
Написан на C , модуль для PHP
Исторически – замена php_templates
Быстрый (нам очень важен CPU usage на веб-машинах)
Принуждает к разделению труда
Верстальщик ничего не программирует
Неожиданно удобен для мультиязычных проектов
http://alexeyrybak.com/blitz/blitz_en.html
В продакшене Bad о o с 2006 года
Blitz: причина PHP is awesome!
Blitz : дизайн (1 /2 )
View в MVC – это не шаблон!
View – это шаблон (только HTML + «разметка») и логика отображения ( PHP )
Исторически в Blitz шаблон и логика отображения были строго разделены
Никакого совместного владения
Никаких “ недопрограммистов ” -верстальщиков
Минус : маргинален и неудобен одиночкам
За время жизни проекта по многочисленным заявкам пришлось-таки добавлять логику в шаблоны
Нынче в Blitz есть условные операторы, инклюды, callbacks , et cetera , но в Badoo нет ничего подобного
Blitz: дизайн (2 /2 )
Принцип напоминает XML/XSLT
Только всё значительно проще
Шаблон накладывается на данные
Переменная - скаляр
Список - массив
Вложенные блоки – структура с соответствующими именами ключей
Любая логика реализуема в этих прототипах
Мультиязычность : «чистый» шаблон – прегенерация шаблонов на всех языках , без динамических подстановок
Мультиязычность : можно получить всю структуру итераций, сохранить «снэпшот» и переводить страницы по «снэпшотам» (в контексте любой ситуации)
0 comments
Post a comment