Самоучитель: PHP под капотом: runtime и стандартная библиотека
Глава 19 из 20VI. Эксплуатация и миграция145 минут

Глава 19. Долгоживущий worker, сигналы и наблюдаемость

Worker считается управляемым, когда ограничивает работу, принимает остановку между атомарными единицами и оставляет оператору достаточный сигнал без секретов.

После главы вы сможете
  • проектировать graceful stop
  • разводить stdout и stderr
  • строить bounded metrics

Долгоживущий процесс меняет риски

Worker Pulse не получает чистый runtime после каждого сообщения. Статические кэши, соединения и обработчики живут дольше; конфигурация не перечитывается сама; память наблюдается по пакетам. Цикл имеет верхний размер batch и точку проверки остановки.

Ошибка одного повреждённого события не обязана завершить весь worker, а потеря соединения с базой может требовать controlled retry. Политика записана для каждого класса причины.

Graceful stop

Остановка между пакетамиHandler сигнала выполняет минимальную работу; завершение происходит в безопасной точке основного цикла.SignalTERMFlagstop requestedFinishcurrent unitFlushcursor/logCloseresourcesExitcode 0
Handler сигнала выполняет минимальную работу; завершение происходит в безопасной точке основного цикла.

Сигнал не место для бизнес-логики

POSIX handler устанавливает флаг или даёт scheduler знать об отмене. Он не начинает транзакцию и не отправляет HTTP. Основной цикл завершает текущую атомарную единицу, сохраняет cursor и закрывает ресурс.

Жёсткое завершение всё равно возможно, поэтому exactly-once не строится на надежде о graceful stop. Идемпотентный ключ и транзакционная запись позволяют безопасно повторить batch.

Каналы CLI

STDOUT содержит отчёт или данные pipeline, STDERR — человекочитаемую диагностику, exit code — компактный машинный исход. Progress bar не печатается в stdout команды, которую вызывает другая программа.

Exit code 0 означает выполненный контракт, отдельные ненулевые коды различают invalid input, временную зависимость и внутренний дефект. Их список документирован и тестируется.

Structured logs и метрики

PSR-3 задаёт интерфейс журнала и placeholders, но схема события принадлежит Pulse. Поля включают batch_id, event_type, outcome, duration_ms и correlation id. Raw payload, password, token и email исключены.

Metric labels имеют ограниченную cardinality: route или event family, но не event id. Counter считает исходы, histogram — latency, gauge — очередь. Trace связывает этапы одного batch, а не заменяет журнал.

Лаборатория

Запустите worker на бесконечном тестовом источнике, отправьте TERM во время batch и проверьте cursor. Затем сформируйте лог и метрики для успеха, invalid event и временной ошибки базы.

  • Handler только устанавливает флаг.
  • Повтор batch не дублирует данные.
  • Labels не содержат произвольные id.
Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Контрольная карта лаборатории

Выполнено: 0 из 3

Локальный тест

1. Что безопасно делать в signal handler?
2. Можно ли event_id использовать label метрики?

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/features.commandline.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php-fig.orghttps://www.php-fig.org/psr/psr-3/Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/manual/en/language.errors.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie