Демонизированный php - before it was cool
TRANSCRIPT
![Page 1: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/1.jpg)
Демонизированный PHP - before it was cool
Arvīds Godjuks
Areto Development
Москва, 2015
![Page 2: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/2.jpg)
О себе
• PHP – Разработчик?– Архитектор?– Web Developer?– Сделай то, незнаю что!
![Page 3: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/3.jpg)
О себе
![Page 4: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/4.jpg)
Если вы...
• Думаете потоками
• Писали на phpDaemon
• Использовали libevent
• Просто человекоподобный робот
![Page 5: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/5.jpg)
Доклад – баян ;)
![Page 6: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/6.jpg)
![Page 7: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/7.jpg)
Лёгкий экскурс в историю
![Page 8: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/8.jpg)
PHP < 5.3
• GC
• Утечки памяти
• Баги
![Page 9: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/9.jpg)
PHP >= 5.3
• GC как ультимативное средство
• Стабилизация 5-ки как таковой
• Libevent, phpDaemon – поспособствовали развитию
![Page 10: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/10.jpg)
Однако
В большинстве случаев – обыкновенно отсутствие знаний и/или интереса
![Page 11: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/11.jpg)
Демон – это не сложно
Практически не отличается от того, как это делается в C/C++ под Linux.
![Page 12: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/12.jpg)
Демон – это не сложно
Материал для разработки демонизированных приложений на C/C++ похож на то, как это нужно
делать в PHP.
![Page 13: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/13.jpg)
Демон – это не сложно
Но дъявол в деталях :)
![Page 14: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/14.jpg)
Хорошо, убедил...
![Page 15: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/15.jpg)
НО ВО ИМЯ КТУЛХУ
![Page 16: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/16.jpg)
Архитектура
• Единая кодовая база– Бизнес логика– Валидация– Переиспользование кода
![Page 17: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/17.jpg)
Издержки
• Время на синхронизацию проектов
• Поиск персонала– Не редко большие зарплаты
• Обучение существующего персонала
![Page 18: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/18.jpg)
С точки зрения здравого смысла, гораздо быстрее и
дешевле реализовать прототип на PHP и
судить о необходимости смены
инструмента по результатам
![Page 19: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/19.jpg)
PHP - быстрый
• Особенно с выходом 5.4
• Ну а тесты PHP7 вообще показывают цифры, в которые не сразу вериться– 50%-90% прироста скорости
![Page 20: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/20.jpg)
PHP - быстрый
• Тонкая прослойка над C/C++ библиотеками– Иногда накладные расходы минимальны
• Сам язык прилично оптимизирован
![Page 21: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/21.jpg)
Когда не стоит
• У вас много данных– С PHP7 сильно улучшит ситуацию
• Вам нужна математика• Производительность любой ценой• Ну очень большой и сложный проект
• Инстинкт говорит “ни-наааа-до!”
![Page 22: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/22.jpg)
Когда не только можно,но и нужно
Если у вас проект на фреймворке, который имеет приличные CLI
компоненты.
В таких проектах до 60-70% кода может реюзаться между WEB и CLI частями, что
экономит время и силы комманды
![Page 23: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/23.jpg)
Когда не только можно,но и нужно
Вы начинаете новый проект, в котором можете изначально заложить
необходимый фундамент
![Page 24: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/24.jpg)
PhpDaemon
• Не об этом речь
• Создание FastCGI приложения на PHP возможно и неплохая идея, но тут я вам не могу помочь.– Сделайте доклад, если реализовывали
успешно :)
![Page 25: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/25.jpg)
Libevent
• Опять же, не о том доклад
• С ней не работал
![Page 26: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/26.jpg)
pnctl_fork()
• Это только начало
• Хабр, StackOverflow и документация содержат все ответы, какие только можно придумать.
![Page 27: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/27.jpg)
pnctl_fork()
• Кто , прочитав статью про сабж, задались вопросом “А что дальше?”
![Page 28: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/28.jpg)
Что-ж, побояним...
![Page 29: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/29.jpg)
Прежде чем начать,прочитайте
• Документацию
• Статьи
• Особенности работы PHP в CLI режиме
![Page 30: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/30.jpg)
Полезняшки
• cli_set_process_title– PHP 5.5+
• PECL – proctitle– Если у вас PHP < 5.5
![Page 31: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/31.jpg)
Обработка ошибок
• Логируйте всё.• Валидируйте все данные, не зависимо откуда они
пришли.• Пишите параноидальный код.
– Всё вокруг хочет вас нае**ть.
• error_reporting(E_ALL), только хардкор– Это вам не веб скриптики...
![Page 32: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/32.jpg)
Exceptions
• Хорошо продуманная система исключений сделает вашу жизнь простой
• Возможность выбрасывать исключения разных типов и их ловить на практике очень сильно упрощает и облегчает код– Однако не стоит увлекаться их кол-вом – слишком много тоже
плохо.
• Если у вас фреймворк – как правило у него уже есть структура исключений – не надо велосипедить.
![Page 33: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/33.jpg)
PHP ошибки в Exception
• Весьма полезный механизм– Помогает записать все обстоятельства и
валидно отключить демон.– Само собой бывают исключения
![Page 34: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/34.jpg)
Управление памятью
• Да-да! Глаза вас не подводят.
![Page 35: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/35.jpg)
Управление памятью
• Всегда удаляйте данные за собой– unset() ваш друг
![Page 36: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/36.jpg)
Управление памятью
• По возможности явно удаляйте объекты– Поможет от проблем с зацикленными
ссылками
![Page 37: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/37.jpg)
Управление памятью
• Проверяйте компоненты на утечки памяти– Пишите патчи– Шлите в апстрим
![Page 38: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/38.jpg)
Управление памятью
• GC– Периодически запускайте
gc_collect_cycles() сами
![Page 39: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/39.jpg)
Сетевые соединения
• У них есть таймауты– Их нужно конфигурировать– А так же учитывать в разработке– Поддерживать соединения в активном
состоянии
• Ping? Pong!
![Page 40: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/40.jpg)
Сетевые соединения
• Подключение к MySQL тоже сетевое соединение– Даже если это Unix socket– У MySQL сервера есть таймаут на inactivity, по
которому он закрывает соединение со своей стороны
• wait_timeout опция
![Page 41: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/41.jpg)
Сетевые соединения
• Memcached
• Mongodb
• и.т.д.
![Page 42: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/42.jpg)
Я обещал HHVM?
• Так и не добрался :(
![Page 43: Демонизированный PHP - before it was cool](https://reader033.vdocuments.mx/reader033/viewer/2022042819/55cd6efcbb61eb5c6c8b4822/html5/thumbnails/43.jpg)
Вопросы?