
Кэширование в Symfony: как мы сломали авторизацию и починили ее через Lock
codesrc 1 час назад Кэширование в Symfony: как мы сломали авторизацию и починили ее через Lock Средний 6 мин 2.4K Symfony * PHP * Высоконагруженные системы * Кейс Привет, Хабр! На связи команда «Исходного...
Вот важная новость с фронта ИИ: codesrc 1 час назад Кэширование в Symfony: как мы сломали авторизацию и починили ее через Lock Средний 6 мин 2. 4K Symfony * PHP * Высоконагруженные системы * Кейс Привет, Хабр! На связи команда «Исходного Кода».
ВведениеКогда бэкенд на Symfony начинает тормозить, одним из первых инструментов оптимизации почти всегда становится кэширование. И это логично: правильно настроенный кэш круто снижает нагрузку на базу данных, режет latency API и убирает лишние ресурсоемкие операции внутри приложения. Но на практике мы редко ограничиваемся простым cache->get() и базовым TTL, особенно когда приложение крутится не на одном сервере, а в Kubernetes-кластере с пачкой внешних API и жесткой конкуренцией запросов.
Технические детали
В таких условиях кэш - это уже не только про скорость, но и про синхронизацию состояния между процессами и pod'ами. А где синхронизация, там появляются:race condition;проблемы конкурентного обновления данных;рассинхронизация локального состояния между инстансами приложения. В этой статье делимся инсайтами из проектов Исходного Кода.
Разберем практический опыт:какие виды кэширования мы реально используем;какие данные действительно имеет смысл кэшировать;и как кэширование JWT-токена устроило нам массовые 401 Unauthorized во время нагрузочного тестирования. Отдельно обсудим:почему локальный кэш в Kubernetes - это не shared state;когда общий Memcached не решает проблему;и как Symfony Lock спасает от distributed race condition. База: какие виды кэширования есть в SymfonyВ Symfony кэширование - это сразу несколько уровней оптимизации на разных этапах обработки запроса.
В реальных проектах эти уровни работают вместе:HTTP Cache рубит количество запросов до приложения;application cache разгружает бизнес-логику и внешние сервисы;Doctrine cache оптимизирует работу ORM;OPcache ускоряет выполнение самого PHP-кода. Не будем душнить теорией, просто коротко пробежимся по базе. HTTP CacheПервый рубеж.
Отраслевые последствия
Задача - вообще не дергать приложение, если ответ не изменился. Symfony из коробки поддерживает Cache-Control, ETag и Last-Modified, а также умеет работать с reverse proxy и CDN. Идеально для публичных страниц и API с редко меняющимися данными.
На хайлоаде это дает самый заметный прирост - запрос обрабатывается без участия PHP и БД. Application CacheИменно с ним мы, бэкенд-разработчики, работаем чаще всего. В Symfony за это отвечает Cache Component, дающий единый API для Memcached, Redis, APCu, filesystem cache и других адаптеров.
Сюда мы складываем тяжелые SQL-запросы, ответы внешних API, справочники и конфиги. Простейший пример работы с $cache->get и callback-функцией. Логика простая: если данные в кэше - сразу отдаем, нет - выполняем callback и сохраняем.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





