Выбор ответа Senior Laravel: контейнер и очереди обновлено

Laravel Octane и состояние

Вопрос

Приложение перевели на Laravel Octane (Swoole или FrankenPHP). Какая ошибка стала опасной?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Хранить данные запроса в статике или синглтонах: они утекают дальше. В PHP-FPM каждый запрос начинается с чистого состояния, поэтому статика и синглтоны «сбрасываются сами».

Варианты ответа

  1. Использовать Eloquent: соединения с базой не переживают запрос
  2. Использовать очереди: воркер Octane конфликтует с воркером очереди
  3. Хранить данные запроса в статике или синглтонах: они утекают дальшеправильный ответ
  4. Писать свои middleware: они выполняются один раз при старте процесса

Разбор

В PHP-FPM каждый запрос начинается с чистого состояния, поэтому статика и синглтоны «сбрасываются сами». Octane загружает приложение один раз и обслуживает им тысячи запросов. Статический кеш текущего пользователя, синглтон с внедрённым Request или растущий статический массив ведут к утечке данных между пользователями и памяти. Решения: scoped-привязки, не держать запрос в синглтонах, сбрасывать состояние в слушателях Octane.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.