Выбор ответа Senior Laravel: контейнер и очереди обновлено
Laravel Octane и состояние
Вопрос
Приложение перевели на Laravel Octane (Swoole или FrankenPHP). Какая ошибка стала опасной?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Хранить данные запроса в статике или синглтонах: они утекают дальше. В PHP-FPM каждый запрос начинается с чистого состояния, поэтому статика и синглтоны «сбрасываются сами».
Варианты ответа
- Использовать Eloquent: соединения с базой не переживают запрос
- Использовать очереди: воркер Octane конфликтует с воркером очереди
- Хранить данные запроса в статике или синглтонах: они утекают дальшеправильный ответ
- Писать свои middleware: они выполняются один раз при старте процесса
Разбор
В PHP-FPM каждый запрос начинается с чистого состояния, поэтому статика и синглтоны «сбрасываются сами». Octane загружает приложение один раз и обслуживает им тысячи запросов. Статический кеш текущего пользователя, синглтон с внедрённым Request или растущий статический массив ведут к утечке данных между пользователями и памяти. Решения: scoped-привязки, не держать запрос в синглтонах, сбрасывать состояние в слушателях Octane.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.