Ночной разговор с постмортемом

Выходные, пицца, PostgreSQL и фронт, который всё сломал. История от старшего архитектора баз данных Ирины Лагерь.

Ночной разговор с постмортемом

Представьте ночь с субботы на воскресенье. За окном дует злой холодный ветер, а в комнате — хороший фильм, пицца, теплый плед. И вдруг прилетает сообщение с работы…

Пользователи пишут, что данные не обновляются. Алерты уже висят: лаг репликации в PostgreSQL, CPU на рид-реплике под 100%, ещё пара тревожных сигналов. Поднимаются on call ДБА и разработчик, быстро собирается кризис-колл: база, бэкенд, девопсы, инфраструктура, координаторы. Симптомы размытые — это может быть что угодно: от сети или дисковой подсистемы до неудачного релиза или DDoS-атаки. Отличный набор, чтобы провести ночь выходного дня в компании умных людей, пытаясь угадать причину очередного апокалипсиса! Круче «Мафии»…

Проблема тем временем не уходит: на базе шторм запросов, а инфраструктура выглядит здоровой. Проверяем изменения — за последние дни ничего подозрительного. Лоад-тесты перед релизом вроде бы были… или нет. Лаг сначала колеблется, а потом уходит в крутой рост и держится на пике полчаса. Недовольных пользователей становится всё больше.

На звонок подтягивается директор. В атмосфере начинают потрескивать электрические разряды. К грозе… или постмортему.

Около часа ночи кто-то из разработчиков замечает паттерн в медленных логах: один и тот же тяжёлый запрос повторяется подозрительно часто. Начинаем копать фронт — и вот оно: новая фича дёргает этот запрос не только в нужном сценарии, но и при каждом открытии страницы. Фактически нагрузка выросла втрое против самого пессимистичного прогноза на ближайшие месяцы. Лоад-тест покрывал API, но не реальное поведение фронтенда. Никто из команды бэкенда и базы такого не прогнозировал — «это же фронт».

Вдвойне неожиданно, потому что новую функциональность клиенты решили подключить не сразу после релиза, а как раз в субботу.

Откатываем — и через 5 минут CPU на реплике падает, лаг исчезает. Ночь, тишина и пицца, которая остыла несколько часов назад. А потом и постмортем, конечно.

Чему учит нас эта история? Тому, что базу может «укусить» даже фронт. И что адекватный лоад-тест, в котором участвуют все команды разработки, защищает нас от долгих ночных разговоров в выходные.

Если хотите услышать больше историй об IT, подписывайтесь на наш блог в Telegram.