php daemons into social games

30
РНР демоны на примере социальных игр Календарёв Александр РБК Медиа

Upload: alexandre-kalendarev

Post on 23-Jun-2015

365 views

Category:

Technology


0 download

DESCRIPTION

использование РНР демонов в социальных играх слайды к докладу

TRANSCRIPT

Page 1: PHP daemons into social games

РНР демонына примере социальных игр

Календарёв Александр

РБК Медиа

Page 2: PHP daemons into social games

Содержание

• Демоны изнутри• Варианты Архитектур• Прочие плюшки

Page 3: PHP daemons into social games

Демон. Терминология

• Демон (англ. daemon) — в системах класса UNIX — служба, ́работающая в фоновом режиме без прямого общения с пользователем.

• Термин был придуман в Массачусетском технологическом институте

• Символизирует персонаж мысленного эксперимента, демону Максвелла, занимающегося сортировкой молекул в фоновом режиме.

Page 4: PHP daemons into social games

Демоны. Использование.

• Расчетные и вычислительные задачи• Обработка медиа контента (фото, видео)• Работа с базой (статистика, перемещение данных)• Хранение информации• Взаимодействие с WEB-клиентом• On-line Общение (чат, мессенжеры)

Page 5: PHP daemons into social games

Демоны. Требования

• Cброс маски создания файлов в 0: umask()• Вызвать fork() и завершить родительский процесс.• Создать новую сессию: setsid().• Сделать корневой каталог текущим каталогом: chroot(‘/’)• Закрыть все файловые дескрипторы: close()• Перенаправить дескрипторы 0,1 и 2 в /dev/null• Записать pid в /var/run/mydaemon.pid• Обработать SIGTERM и SIGHUP

Page 6: PHP daemons into social games

Демоны. Реализация

• PCNTL• POSIX• Libevent, Libevent2

Page 7: PHP daemons into social games

Обработка сигналов

• SIGTERM - закрытие всех файловых дескрипторов - окончание всех дочерних процессов - мягкое завершение процесса• SIGHUP - перечитываем конфигурацию - закрытие всех соединений - переоткрываем log файл - перезапускаем сервер

Page 8: PHP daemons into social games

Классическое WEB App

HTMLPHP - fpm

Page 9: PHP daemons into social games

Социальная игра

Proxy

Page 10: PHP daemons into social games

Преимущество использования

• Постоянное соединение с клиентом• Одноразовая инициализация справочных данных• Одноразовое соединение с БД, кешем и т.д.• Возможность мгновенного общения между разными

клиентами

Page 11: PHP daemons into social games

Демоны. Преимущество

Распределение трафика

Socket

Page 12: PHP daemons into social games

Найди 10 отличий

Proxy

HTMLPHP - fpm

Page 13: PHP daemons into social games

Демоны. Как хотелось бы

Proxy

Page 14: PHP daemons into social games

Демоны. Инициатива клиента

Proxy

8080

8099

8080

8089

Page 15: PHP daemons into social games

Демоны. Инициатива Proxy

Proxy

8080

8081

8099

. . .

Page 16: PHP daemons into social games

Демоны. Масштабирование

10.10.0.1 Proxy

Proxy

Proxy10.10.0.3

Page 17: PHP daemons into social games

Демоны.Управление

fork()Master

Worker

Page 18: PHP daemons into social games

Мастер процесс

• Следит за worker• Перезапускает при необходимости• Собирает статистику• Отдает информацию на мониторинг

Page 19: PHP daemons into social games

Как не надо делать

• exec( “php mydaemon.php > error.log 2>1 &” ); exec( “nohup php mydaemon.php >> error.log &” ); РНР Worker не явл. прямым потомком master process Не возможно обработать SIGCHLD

Page 20: PHP daemons into social games

Демоны. Запуск

• Осуществляем через rcd скрипт /etc/init.d/mydaemon

Page 21: PHP daemons into social games

Демоны. Мониторинг

• Жизнедеятельность (память, pid, )• Производительность (rps, uptime )• Функциональность (длину очереди, кол-во online )

Page 22: PHP daemons into social games

Демоны. Мониторинг

statsSTAT rev 20513STAT pid 16299 Используем memcached протоколSTAT uptime 688647STAT curent_connections 264STAT total_connections 22877STAT total_memory 8308748STAT data_memory 8240892STAT current_rps 1210.00STAT users_count 40583

Page 23: PHP daemons into social games

Демоны. Мониторинг

Page 24: PHP daemons into social games

Демоны. Тестирование

• Функциональное• Тестирование АПИ

Эмулятор Flash

Debug Client

Page 25: PHP daemons into social games

Обмен

Текстовые протоколы- URI- JSON- XMLБинарные протоколы- AMF- Protobuf

Proxy

Бинарные протоколы:- Более компактная передача данных- Более защищенные

Текстовые протоколы:- Человеко-понятные- Проще отладка

Page 26: PHP daemons into social games

Google Protobuf

• Бинарный протокол от «корпорации добра»• Поддержка всех основных языков программирования• Файл .proto описания структуры данных• Компилятор трансформации .proto в нативные структуры и классы

Proxy

Page 27: PHP daemons into social games

Демоны. Ускорение и перестройка

• Кеширование• Предварительная инициализация и финализация• Вынос обмена с БД в бэкграунд

Page 28: PHP daemons into social games

Вынос обмена с БД в фоновый процесс

Proxy

Обмен c фоновым процессом через очередь

• RabbitMQ, ActiveMQ, 0MQ• Redis, RestMQ• Gearman• MemcachedQ• Tarantool

Page 29: PHP daemons into social games

Вопросы

Page 30: PHP daemons into social games

РНР -демоны в социальных играх

Александр Календарёв

[email protected]

@mail.ru

http://akalend.habrahabr.ru

http://github.com/akalend

http://highloadblog.com