Ну и финалимся по теме Long Running
6 из 8 МониторингLong Running скрипт, который работает около бесконечно, но как понять действительно ли он работает или просто завис?
Есть куча вариантов как сделать мониторинг, всё зависит от ваших потребностей, текущей инфраструктуры и желания её развивать.
Самый простой способ -- это писать логи о каждой итерации. По логам будет понятно, живет скрипт или завис.
Второй способ -- это использование внешних систем мониторинга типа sentry или new relic.
Дальше больше, можно смотреть в сторону реализации healthcheck, который будет использовать кубер и перезапускать скрипт, если тот не отвечает. Есть уйма реализаций, через обновление обычного файла, ключа в редисе, или statsd, через другие способы сбора метрик и т.д.
Вопрос, когда писать лог, или метрики для healthcheck. Здесь опять несколько вариантов:
1) самый простой: где-то в цикле , в самом начале, например;
2) специфичный: используя fibers, особенно если в проекте используются reactphp или amphp;
3) надежный, но и самый неоптимальный — register_tick_function
Совет простой: определитесь с тем, что вы хотите получить от мониторинга, и как этим пользоваться. И не усложняйте.
7 из 8 Деплой
Тут максимально банально: если есть долгоиграющий скрипт, его нужно перезапустить после шага обновления кодовой базы. Иначе скрипт продолжит работать со старым кодом.
В зависимости от способа оркестрации приложение может как перезапускаться, так и нет.
Опять нужно помнить на этом этапе про Graceful Shutdown.
8 из 8 Лимит дескрипторов ресурсов в 8,6 миллиардаК этому пункту отношусь как с забавному факту. В реальности я ещё не встречался с задачами где даже потенциально это могло бы вызывать проблему 🙂
Но существует такой баг.
Дескриптор используется каждый раз, когда открывается какой-то ресурс, сокеты, соединение с БД, открытие файла и т.д. Их доступное кол-во 8,6 миллиардов. Но при закрытии ресурса, дескриптор нельзя переиспользовать.
Более подробно о баге можно почитать здесь
https://bugs.php.net/bug.php?id=47396 Баг был обнаружен в PHP 5.2 , остается открытым. Я не проверял, актуален ли он для поддерживаемых версий php но вы можете проверить самостоятельно ради интереса )
Ну, собственно, на этом всё)