ݺߣ

ݺߣShare a Scribd company logo
10 СОВЕТОВ, КАК СДЕЛАТЬ
ХОРОШИХ ДЕМОНОВ
Петр Трофимов, onliner.by
Что такое демон?
Термин!
Висит в памяти
<?php
while (true) {
mine_bitcoins();
}
Скрипт
Работает
10 советов, как сделать хороших демонов
GO!
На PHP нельзя
написать стабильно
работающего
демона.
Учите
if (!$pid = pcntl_fork()) {
try {
// child code
} finally {
exit;
}
}
// parent code
pcntl_wait($status);
PHP must die
1/10
★ Master
○ Listening
■ Working
○ Listening
■ Working
○ Listening
○ ...
Структура процессов
2/10
● Нет зомби-процессов
● Нет процессов-сирот
● Рассылка сигналов
● Управление
процессами
Master процесс
3/10
Listening процесс
● Создание подключения
● Первичная инициализация
● Подписка на события
● Форк working-процесса
● Отметка обработки
4/10
Working-процесс
5/10
Обработка ошибок
log_warning("[REQUEUED] failed message {$message-
>name()}, exception: $ex");
log_error("[SKIPPED] failed {$message->name()},
exception: $ex");
6/10
Общение процессов
try {
// hard work
} catch (Exception $ex) {
// ...
exit(self::STATUS_FAIL);
} finally {
exit(self::STATUS_SUCCESS);
}
7/10
Повторная обработка
// working
if ($this->isNeedRequeue($ex)) {
exit(self::STATUS_REQUEUE);
}
// listening
pcntl_wait($status);
if ($status == self::STATUS_REQUEUE) {
$message->requeue(60);
}
8/10
Обработка сигналов
● SIGINT, SIGTERM, SIGHUP
● pcntl_signal
● pcntl_signal_dispatch
● graceful shutdown
9/10
Мониторинг
10/10
СПАСИБО
ЗА ВНИМАНИЕ!

More Related Content

10 советов, как сделать хороших демонов

Editor's Notes

  1. 1.5мин - Добрутр, имя, тоже из этих, Onliner.by, не только страницы, бэкграунд, крон плюс 269 демонов 22 различных типов (не все заняты) Notif 12 po 10, auct 1, b2bpm 8 po 1, cm 15, cs 10, delivery 15, imp 7*5, prices 15, remove_product 30, billing 20, imp 20 = 120+1+8+15+10+15+35+15+30+20=269 w of 22 types
  2. 1.5мин - Что такое, терминология разная, пример скрипта, цена биткойна? Что будет?
  3. 3 мин - Что будет? Вес, потеря(переподключение), завис, фолт, все будет хорошо?
  4. 1м - Нельзя, учите гоу, асинхронный и быстрый (горутины!)
  5. 3m - Meant to die, форки, пид, exit finally?, wait (waitpid), зачем ждать? пецеентеель
  6. 1мин - структура важна, один мастер, несколько слушающих, опциональный работающий
  7. Зомби, сироты, рассылка, управление
  8. Подключение, инициализация, подписка на события, форк, отметка обработки, следит monit (systemd для докер)
  9. Выполнить работу, память, подключение, зависание, фолт
  10. Ошибки и ворнинги, фатальные или нет
  11. Стратегия отложенной обработки, экспоненцианльный
  12. Красная зона предужпредление
  13. Рестарт при деплое кода, пример на гисте кюэр кода, докер - запуск в foreground