
Асинхронные задачи в Yii под нагрузкой: что ломается первым
Очередь на yii2-queue держалась до 200 задач в минуту, потом воркеры начали падать по памяти, а в БД повисли задачи в статусе reserved. Разбираем, что отваливается раньше всего и почему.

Очередь на yii2-queue держалась до 200 задач в минуту, потом воркеры начали падать по памяти, а в БД повисли задачи в статусе reserved. Разбираем, что отваливается раньше всего и почему.

Расширение yii2-queue выглядит как одна команда push, но между постановкой задачи и её выполнением проходит сериализация, брокер, retry и обработка ошибок. Разбираем механизм, чтобы понимать, что ломается под нагрузкой.

На проекте с рассылкой писем очередь yii2-queue копила по 40 тысяч задач в час пик, а отправка одного письма занимала 2,5 секунды. Разбираем, где узкое место и что дал тюнинг воркеров.

Приложение на Yii2 держало 40 запросов в секунду, а на пике пошли таймауты. Разбираем, что тормозит первым — ORM, компонент кеша или сама инициализация фреймворка — и как это профилировать.

ActiveRecord в Yii 2 удобен, пока не встречается с циклом на тысячу записей. Разбираем, во что превращаются find() и with() в SQL, и какие места приложения ловить на ревью.

Список товаров грузился 40 мс на 20 записях и 2,8 секунды на 500 — при этом сам SQL отрабатывал за 12 мс. Разбираем, где ActiveRecord в Yii 2 съедает время и память под реальной нагрузкой.

Виджет удобно вынести в шаблон и забыть. Но GridView на 500 строк, вложенные виджеты и ActiveForm без кеша превращают удобство в лишние запросы и тормоза рендера. Разбираем приёмы, которые держат виджеты управляемыми.

Каждый вызов save() и find() в Yii 2 — это цепочка событий, гидратации объектов и ленивых запросов. Разбираем, где ActiveRecord тратит время и память и когда его абстракция обходится дорого.

Разбор частых промахов при работе с контейнером зависимостей в Yii 2: от синглтонов, которые оказались не синглтонами, до циклических зависимостей и утечек состояния между запросами.

Модуль в Yii 2 — не единственный способ разделить приложение на части. Разбираем, где модуль оправдан, а где хватит неймспейса, и чем платите за каждый вариант.

Консольная команда, которая тихо падала на проде каждую ночь, показала три типичные ошибки в работе с Yii2 console: незакрытые транзакции, утечку памяти в цикле и неверные коды возврата.

Как кешировать в Yii2 так, чтобы не отдавать пользователю устаревшие данные: кеш данных, зависимости, фрагментный кеш и почему TAG_DEPENDENCY решает больше, чем время жизни.