392просмотров
25 августа 2024 г.
Score: 431
Ну и финалимся по теме 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 но вы можете проверить самостоятельно ради интереса ) Ну, собственно, на этом всё)