SlideShare a Scribd company logo
Демонизированный PHP -
before it was cool
Arvīds Godjuks
Areto Development
Москва, 2015
О себе
• PHP
– Разработчик?
– Архитектор?
– Web Developer?
– Сделай то, незнаю что!
О себе
Если вы...
• Думаете потоками
• Писали на phpDaemon
• Использовали libevent
• Просто человекоподобный робот
Доклад – баян ;)
Демонизированный PHP - before it was cool
Лёгкий экскурс в историю
PHP < 5.3
• GC
• Утечки памяти
• Баги
PHP >= 5.3
• GC как ультимативное средство
• Стабилизация 5-ки как таковой
• Libevent, phpDaemon –
поспособствовали развитию
Однако
В большинстве случаев – обыкновенно
отсутствие знаний и/или интереса
Демон – это не сложно
Практически не отличается от того, как
это делается в C/C++ под Linux.
Демон – это не сложно
Материал для разработки
демонизированных приложений на
C/C++ похож на то, как это нужно
делать в PHP.
Демон – это не сложно
Но дъявол в деталях :)
Хорошо, убедил...
НО ВО ИМЯ КТУЛХУ
Архитектура
• Единая кодовая база
– Бизнес логика
– Валидация
– Переиспользование кода
Издержки
• Время на синхронизацию проектов
• Поиск персонала
– Не редко большие зарплаты
• Обучение существующего персонала
С точки зрения
здравого смысла,
гораздо быстрее и
дешевле реализовать
прототип на PHP и
судить о
необходимости смены
инструмента по
результатам
PHP - быстрый
• Особенно с выходом 5.4
• Ну а тесты PHP7 вообще показывают
цифры, в которые не сразу вериться
– 50%-90% прироста скорости
PHP - быстрый
• Тонкая прослойка над C/C++
библиотеками
– Иногда накладные расходы минимальны
• Сам язык прилично оптимизирован
Когда не стоит
• У вас много данных
– С PHP7 сильно улучшит ситуацию
• Вам нужна математика
• Производительность любой ценой
• Ну очень большой и сложный проект
• Инстинкт говорит “ни-наааа-до!”
Когда не только можно,
но и нужно
Если у вас проект на фреймворке,
который имеет приличные CLI
компоненты.
В таких проектах до 60-70% кода может
реюзаться между WEB и CLI частями, что
экономит время и силы комманды
Когда не только можно,
но и нужно
Вы начинаете новый проект, в котором
можете изначально заложить
необходимый фундамент
PhpDaemon
• Не об этом речь
• Создание FastCGI приложения на PHP
возможно и неплохая идея, но тут я вам
не могу помочь.
– Сделайте доклад, если реализовывали
успешно :)
Libevent
• Опять же, не о том доклад
• С ней не работал
pnctl_fork()
• Это только начало
• Хабр, StackOverflow и документация
содержат все ответы, какие только
можно придумать.
pnctl_fork()
• Кто , прочитав статью про сабж,
задались вопросом “А что дальше?”
Что-ж, побояним...
Прежде чем начать,
прочитайте
• Документацию
• Статьи
• Особенности работы PHP в CLI режиме
Полезняшки
• cli_set_process_title
– PHP 5.5+
• PECL – proctitle
– Если у вас PHP < 5.5
Обработка ошибок
• Логируйте всё.
• Валидируйте все данные, не зависимо откуда они
пришли.
• Пишите параноидальный код.
– Всё вокруг хочет вас нае**ть.
• error_reporting(E_ALL), только хардкор
– Это вам не веб скриптики...
Exceptions
• Хорошо продуманная система исключений сделает вашу
жизнь простой
• Возможность выбрасывать исключения разных типов и их
ловить на практике очень сильно упрощает и облегчает код
– Однако не стоит увлекаться их кол-вом – слишком много тоже
плохо.
• Если у вас фреймворк – как правило у него уже есть
структура исключений – не надо велосипедить.
PHP ошибки в Exception
• Весьма полезный механизм
– Помогает записать все обстоятельства и
валидно отключить демон.
– Само собой бывают исключения
Управление памятью
• Да-да! Глаза вас не подводят.
Управление памятью
• Всегда удаляйте данные за собой
– unset() ваш друг
Управление памятью
• По возможности явно удаляйте объекты
– Поможет от проблем с зацикленными
ссылками
Управление памятью
• Проверяйте компоненты на утечки
памяти
– Пишите патчи
– Шлите в апстрим
Управление памятью
• GC
– Периодически запускайте
gc_collect_cycles() сами
Сетевые соединения
• У них есть таймауты
– Их нужно конфигурировать
– А так же учитывать в разработке
– Поддерживать соединения в активном
состоянии
• Ping? Pong!
Сетевые соединения
• Подключение к MySQL тоже сетевое
соединение
– Даже если это Unix socket
– У MySQL сервера есть таймаут на inactivity, по
которому он закрывает соединение со своей
стороны
• wait_timeout опция
Сетевые соединения
• Memcached
• Mongodb
• и.т.д.
Я обещал HHVM?
• Так и не добрался :(
Вопросы?

More Related Content

PPTX
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
PDF
Алексей Иванкин: Highload + PHP
PDF
Макс Волошин: Php + shell = ♥
PPTX
Какой фреймворк нам нужен для Web? Денис Цыплаков
PPTX
мир без Jsp. thymeleaf 2.0
PDF
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
PDF
Per! А что дальше?
PPTX
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Куда катится PHP, а также про Yii и другие фреймворки / Александр Макаров (St...
Алексей Иванкин: Highload + PHP
Макс Волошин: Php + shell = ♥
Какой фреймворк нам нужен для Web? Денис Цыплаков
мир без Jsp. thymeleaf 2.0
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Per! А что дальше?
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...

What's hot (20)

PDF
dont badmouth mojo
PPTX
Как писать на PHP и не стать быдло-кодером
PPTX
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PDF
Performance engineering stories from #fdminicon Saransk
PPTX
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
PPTX
Опыт эксплуатации большого проекта на Ruby
PDF
Максим Лапшин. Erlang production
PDF
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
ODP
Top10 доводов против языка Ruby
PPT
История проекта, который никогда не падает / Андрей Шетухин
PDF
My talk at YouCon Saratov 2016
PPTX
YAPC Russia: Анализ памяти в perl
PDF
Всему своё время / Роман Ивлиев (Банки.ру)
PDF
My talk on PgDay Russia 2014
PDF
My talk on administering PostgreSQL
PDF
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
PDF
Быстрое расширение Robot Framework под свои нужды с использованием Python
PPTX
BlackBox testing
PDF
Как устроен мониторинг в Badoo
dont badmouth mojo
Как писать на PHP и не стать быдло-кодером
Учебный план для highload гуру / Андрей Аксёнов (Sphinx Technologies Inc.)
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Performance engineering stories from #fdminicon Saransk
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
Опыт эксплуатации большого проекта на Ruby
Максим Лапшин. Erlang production
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
Top10 доводов против языка Ruby
История проекта, который никогда не падает / Андрей Шетухин
My talk at YouCon Saratov 2016
YAPC Russia: Анализ памяти в perl
Всему своё время / Роман Ивлиев (Банки.ру)
My talk on PgDay Russia 2014
My talk on administering PostgreSQL
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Быстрое расширение Robot Framework под свои нужды с использованием Python
BlackBox testing
Как устроен мониторинг в Badoo
Ad

Viewers also liked (20)

PPTX
PHP Anamnes 2015
PDF
HighLoad systems: tips & tricks
PPTX
UFADevCom'13#1 Шерыхалин Олег
PPTX
High load для начинающих
PDF
Лекция 5: B-деревья (B-trees, k-way merge sort)
PDF
Векторизация кода (семинар 2)
PPTX
ClassDojo guía para estudiantes
PPT
TSH - Focusing on Excellence
PPTX
Partner update 17 October 2014
PPTX
Lectores y escritores
PPSX
Centrifuge slide show
PDF
Termodinamica carnot
PPSX
Centrifuge slide show
PPTX
Home Party Company Fast Start Training on the My Success Rocket Platform
PPT
писатели юбиляры
PDF
2 q10 conference call
PPTX
Partner Update Meeting 18 September 2014
PDF
NewcastleGateshead Initiative partner update meeting 25 Feb 2016
PPTX
ClassDojo Guía para padres
PDF
Windows 8 apps dev.整理及分享
PHP Anamnes 2015
HighLoad systems: tips & tricks
UFADevCom'13#1 Шерыхалин Олег
High load для начинающих
Лекция 5: B-деревья (B-trees, k-way merge sort)
Векторизация кода (семинар 2)
ClassDojo guía para estudiantes
TSH - Focusing on Excellence
Partner update 17 October 2014
Lectores y escritores
Centrifuge slide show
Termodinamica carnot
Centrifuge slide show
Home Party Company Fast Start Training on the My Success Rocket Platform
писатели юбиляры
2 q10 conference call
Partner Update Meeting 18 September 2014
NewcastleGateshead Initiative partner update meeting 25 Feb 2016
ClassDojo Guía para padres
Windows 8 apps dev.整理及分享
Ad

Similar to Демонизированный PHP - before it was cool (20)

PDF
Проходим тест Джоэла
PDF
Tech Talks @NSU: Проходим тест Джоэла
PPT
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PDF
Как разраба
PDF
CodeFest 2011. Макаров А. — Как разрабатывается Yii
PDF
PPTX
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
PDF
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
PDF
"Девопс - это не только для программистов. Практические примеры из жизни одно...
PDF
Собеседование на позицию Java Developer
PDF
REPL в Node.js: улучшаем быт разработчик
PPT
Презентация: 1С-Bitrix — как начать
PDF
Serghei Iakovlev "Chaos engineering in action"
PDF
Барнаул15
PDF
SymfonyConf IV.2016 - Реанимация проектов на Symfony
PDF
2 bdw.key
PDF
Роман Еникеев - PHP обязан умирать
PDF
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
PPTX
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
Как разраба
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
"Девопс - это не только для программистов. Практические примеры из жизни одно...
Собеседование на позицию Java Developer
REPL в Node.js: улучшаем быт разработчик
Презентация: 1С-Bitrix — как начать
Serghei Iakovlev "Chaos engineering in action"
Барнаул15
SymfonyConf IV.2016 - Реанимация проектов на Symfony
2 bdw.key
Роман Еникеев - PHP обязан умирать
Zabbix: Прошлое, настоящее и будущее (Zabbix: Past, present and the future)
Как перестать хранить секреты в git и начать использовать Hashicorp Vault

More from Andrey Tokarchuk (20)

PDF
PDF
Vrealize automotion
PDF
Vmware any-cloud
PDF
Nvidia grid-2
PDF
Интеллектуальная собственность в IT
PDF
Тестируем инфраструктуру как код
PDF
OpenStack сегодня
PDF
Релиз PHP7 - что нас ждет в октябре 2015
PDF
My sql 5.6-new-stable-mmug
PDF
Модули в zend framework 2.ростислав михайлив
PDF
Zend cache evolution.владимир дубина
PDF
Очередь задач и многопоточность с помощью gearman и zf.станислав прокопив
PDF
Highload не кусается.антон шевчук
PDF
Соблазнительные формы в zend framework 2.даниил кожемяко
PDF
mms или как просто работать с моделями данных.иван кутузов
PDF
Cобытийная модель zend framework 2, event manager. александр вронский
PDF
PDF
PDF
Rails and security
Vrealize automotion
Vmware any-cloud
Nvidia grid-2
Интеллектуальная собственность в IT
Тестируем инфраструктуру как код
OpenStack сегодня
Релиз PHP7 - что нас ждет в октябре 2015
My sql 5.6-new-stable-mmug
Модули в zend framework 2.ростислав михайлив
Zend cache evolution.владимир дубина
Очередь задач и многопоточность с помощью gearman и zf.станислав прокопив
Highload не кусается.антон шевчук
Соблазнительные формы в zend framework 2.даниил кожемяко
mms или как просто работать с моделями данных.иван кутузов
Cобытийная модель zend framework 2, event manager. александр вронский
Rails and security

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

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