Демонизированный php - before it was cool

43
Демонизированный PHP - before it was cool Arvīds Godjuks Areto Development Москва, 2015

Upload: andrey-tokarchuk

Post on 14-Aug-2015

381 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Демонизированный PHP - before it was cool

Демонизированный PHP - before it was cool

Arvīds Godjuks

Areto Development

Москва, 2015

Page 2: Демонизированный PHP - before it was cool

О себе

• PHP – Разработчик?– Архитектор?– Web Developer?– Сделай то, незнаю что!

Page 3: Демонизированный PHP - before it was cool

О себе

Page 4: Демонизированный PHP - before it was cool

Если вы...

• Думаете потоками

• Писали на phpDaemon

• Использовали libevent

• Просто человекоподобный робот

Page 5: Демонизированный PHP - before it was cool

Доклад – баян ;)

Page 6: Демонизированный PHP - before it was cool
Page 7: Демонизированный PHP - before it was cool

Лёгкий экскурс в историю

Page 8: Демонизированный PHP - before it was cool

PHP < 5.3

• GC

• Утечки памяти

• Баги

Page 9: Демонизированный PHP - before it was cool

PHP >= 5.3

• GC как ультимативное средство

• Стабилизация 5-ки как таковой

• Libevent, phpDaemon – поспособствовали развитию

Page 10: Демонизированный PHP - before it was cool

Однако

В большинстве случаев – обыкновенно отсутствие знаний и/или интереса

Page 11: Демонизированный PHP - before it was cool

Демон – это не сложно

Практически не отличается от того, как это делается в C/C++ под Linux.

Page 12: Демонизированный PHP - before it was cool

Демон – это не сложно

Материал для разработки демонизированных приложений на C/C++ похож на то, как это нужно

делать в PHP.

Page 13: Демонизированный PHP - before it was cool

Демон – это не сложно

Но дъявол в деталях :)

Page 14: Демонизированный PHP - before it was cool

Хорошо, убедил...

Page 15: Демонизированный PHP - before it was cool

НО ВО ИМЯ КТУЛХУ

Page 16: Демонизированный PHP - before it was cool

Архитектура

• Единая кодовая база– Бизнес логика– Валидация– Переиспользование кода

Page 17: Демонизированный PHP - before it was cool

Издержки

• Время на синхронизацию проектов

• Поиск персонала– Не редко большие зарплаты

• Обучение существующего персонала

Page 18: Демонизированный PHP - before it was cool

С точки зрения здравого смысла, гораздо быстрее и

дешевле реализовать прототип на PHP и

судить о необходимости смены

инструмента по результатам

Page 19: Демонизированный PHP - before it was cool

PHP - быстрый

• Особенно с выходом 5.4

• Ну а тесты PHP7 вообще показывают цифры, в которые не сразу вериться– 50%-90% прироста скорости

Page 20: Демонизированный PHP - before it was cool

PHP - быстрый

• Тонкая прослойка над C/C++ библиотеками– Иногда накладные расходы минимальны

• Сам язык прилично оптимизирован

Page 21: Демонизированный PHP - before it was cool

Когда не стоит

• У вас много данных– С PHP7 сильно улучшит ситуацию

• Вам нужна математика• Производительность любой ценой• Ну очень большой и сложный проект

• Инстинкт говорит “ни-наааа-до!”

Page 22: Демонизированный PHP - before it was cool

Когда не только можно,но и нужно

Если у вас проект на фреймворке, который имеет приличные CLI

компоненты.

В таких проектах до 60-70% кода может реюзаться между WEB и CLI частями, что

экономит время и силы комманды

Page 23: Демонизированный PHP - before it was cool

Когда не только можно,но и нужно

Вы начинаете новый проект, в котором можете изначально заложить

необходимый фундамент

Page 24: Демонизированный PHP - before it was cool

PhpDaemon

• Не об этом речь

• Создание FastCGI приложения на PHP возможно и неплохая идея, но тут я вам не могу помочь.– Сделайте доклад, если реализовывали

успешно :)

Page 25: Демонизированный PHP - before it was cool

Libevent

• Опять же, не о том доклад

• С ней не работал

Page 26: Демонизированный PHP - before it was cool

pnctl_fork()

• Это только начало

• Хабр, StackOverflow и документация содержат все ответы, какие только можно придумать.

Page 27: Демонизированный PHP - before it was cool

pnctl_fork()

• Кто , прочитав статью про сабж, задались вопросом “А что дальше?”

Page 28: Демонизированный PHP - before it was cool

Что-ж, побояним...

Page 29: Демонизированный PHP - before it was cool

Прежде чем начать,прочитайте

• Документацию

• Статьи

• Особенности работы PHP в CLI режиме

Page 30: Демонизированный PHP - before it was cool

Полезняшки

• cli_set_process_title– PHP 5.5+

• PECL – proctitle– Если у вас PHP < 5.5

Page 31: Демонизированный PHP - before it was cool

Обработка ошибок

• Логируйте всё.• Валидируйте все данные, не зависимо откуда они

пришли.• Пишите параноидальный код.

– Всё вокруг хочет вас нае**ть.

• error_reporting(E_ALL), только хардкор– Это вам не веб скриптики...

Page 32: Демонизированный PHP - before it was cool

Exceptions

• Хорошо продуманная система исключений сделает вашу жизнь простой

• Возможность выбрасывать исключения разных типов и их ловить на практике очень сильно упрощает и облегчает код– Однако не стоит увлекаться их кол-вом – слишком много тоже

плохо.

• Если у вас фреймворк – как правило у него уже есть структура исключений – не надо велосипедить.

Page 33: Демонизированный PHP - before it was cool

PHP ошибки в Exception

• Весьма полезный механизм– Помогает записать все обстоятельства и

валидно отключить демон.– Само собой бывают исключения

Page 34: Демонизированный PHP - before it was cool

Управление памятью

• Да-да! Глаза вас не подводят.

Page 35: Демонизированный PHP - before it was cool

Управление памятью

• Всегда удаляйте данные за собой– unset() ваш друг

Page 36: Демонизированный PHP - before it was cool

Управление памятью

• По возможности явно удаляйте объекты– Поможет от проблем с зацикленными

ссылками

Page 37: Демонизированный PHP - before it was cool

Управление памятью

• Проверяйте компоненты на утечки памяти– Пишите патчи– Шлите в апстрим

Page 38: Демонизированный PHP - before it was cool

Управление памятью

• GC– Периодически запускайте

gc_collect_cycles() сами

Page 39: Демонизированный PHP - before it was cool

Сетевые соединения

• У них есть таймауты– Их нужно конфигурировать– А так же учитывать в разработке– Поддерживать соединения в активном

состоянии

• Ping? Pong!

Page 40: Демонизированный PHP - before it was cool

Сетевые соединения

• Подключение к MySQL тоже сетевое соединение– Даже если это Unix socket– У MySQL сервера есть таймаут на inactivity, по

которому он закрывает соединение со своей стороны

• wait_timeout опция

Page 41: Демонизированный PHP - before it was cool

Сетевые соединения

• Memcached

• Mongodb

• и.т.д.

Page 42: Демонизированный PHP - before it was cool

Я обещал HHVM?

• Так и не добрался :(

Page 43: Демонизированный PHP - before it was cool

Вопросы?