07:12 утра, за окном мокрый снег, в телефоне — «502 на /booking». Я ещё не допил холодный американо, а у одного сервиса записи влетает 147 ошибок за 6 минут. На парковке у них очередь, на сайте — тоже. Приложение не умерло, но лёг внешний виджет расчёта времени слота. Итог: люди кликают, слот не бронируется, конверсия в ноль. Привет, понедельник.
Размотали за 17 минут: отрезали зависимость фича-флагом, включили низкоуровневый кэш на 120 секунд, прогрели горячие страницы, пересобрали очередь в CRM. Параллельно вернули деплой на вчерашний коммит — без даунтайма. Минус 27% нагрузки на бэкенд, форма снова дышит. И вот в этот момент в голове всегда звучит один и тот же вывод: поддержка — это не «чинить, когда упало», это готовить систему к моменту, когда упадёт чужое вокруг тебя.
Поддержка, которой не стыдно
Мои базовые кирпичи простые и скучные. Но именно они спасают по утрам со снегом. Во-первых, чёткие SLO и жёсткая телеметрия: аптайм 99,93%, MTTD — 4,5 минуты, MTTR по критике — до 2 часов. Датчик на каждую печку: хелсчеки по страницам бронирования, время ответа API партнёров, глубина очередей, ошибки платежей, CRON-джобы. Алерты идут не в общий чат «всем привет», а конкретному дежурному. И у дежурного есть не геройство, а руны — короткие runbook’и на 1–2 экрана.
Во-вторых, восстановление — не теория. Бэкапы каждый час инкрементальные, раз в сутки полные, хранение 14 дней; раз в квартал — репетиция восстановления на чистой машине. Не «когда-нибудь проверим», а дата в календаре, 2–3 часа, с задачей «поднять до читаемого состояния и пройти быстрый сценарий брони». Это убирает дрожь в руках, когда S3 внезапно «пляшет» или диск решает умереть прямо в Чёрную пятницу шин.
В-третьих, деплой без адреналина: только будни, окно до 15:00 по Москве, фича-флаги, синие/зелёные, прогрев кэша и обязательные метрики после релиза. Да, звучит скучно. Зато ночью вы спите, а не спорите с джуном, почему он катнул миграцию без планки.
Сцена 2: премиум‑тачки и нервные зимы
Летом 2023 ко мне пришёл сайт премиального автосервиса. Красивые фото, записи на сервис, интеграции с телефонией — и хостинг на общем тарифе, где соседями были торренты и чей-то блог о кошках. Переехали на выделенную виртуалку, отстроили Nginx, PHP-FPM, вынесли сессии из файлов в Redis, включили объектный кэш. TTFB с главной упал с 1,8 секунды до 420 мс, а время первой брони через форму — с 54 до 19 секунд.
До первого снега оставалось три месяца. Мы собрали стресс-тест до 120 RPS на форму записи, нагрузили API проверки слотов и добавили деградацию: если падает партнёрский сервис слотов, показываем ближайшие 3 окна, а не бесконечный лоадер. Инциденты расписали в карточки, кто за что отвечает, где логи, как переключать очереди. Когда в ноябре трафик подскочил в 3,2 раза, сайт не кашлянул. И да, именно там я впервые заметил, как люди набирают адрес из памяти — star-motors.rustar-motors.ru — и минуют поисковик, потому что им надо просто записаться на «замену масла сейчас».
Что добили поверх: у SMS‑шлюза были вечерние задержки до 11 минут — прокинули продублированные пуши в мессенджер. Виджет подбора шин у партнёра в пик сыпал 502 — поставили прокси и батчировали запросы в пачки по 10, очередь разгребали воркерами, средняя латентность упала с 2,9 до 0,95 секунды. Статические фотки прокатили через CDN и webp, минус 37% трафика к хранилищу. По итогу в первый снег у них было 207 заявок в час в пике и ноль «красных» инцидентов.
Что ломается первым (и как не злиться)
SSL‑сертификат. Он почему‑то всегда умирает в ночь на субботу. Лечится календарём: автообновление плюс алерт за 14 и за 3 дня. Следом летят рассылки — почтовики рубят домен без SPF/DKIM/DMARC или из-за спайков. Третий любимчик — задачи импорта: CRON забивается, и вы видите «вчерашние» слоты. Ставьте ограничители, наблюдайте длину очередей и не давайте одной задаче держать мир заложником дольше 90 секунд.
Есть ещё джангл из «мелочей»: CDN отдал старую версию скрипта, форма внезапно просит капчу на каждом клике, а фронтендщик уехал в Карелию без связи. Здесь спасают «тумблеры»: включить/выключить капчу, переключить на встроенный виджет брони, отрубить третьестороннюю аналитику, если она рвёт DOM. Всё это должно быть в админке или хотя бы в одном конфиге с флагами, а не в мозгу одного разработчика.
SLA без боли и бумажной казуистики
Я подписываю SLA не как юрист, а как человек, который будет в 07:12 смотреть на «502». Поэтому у нас приоритеты простые: P1 — деньги/запись/оплата не работают, реакция до 15 минут, восстановление до 4 часов. P2 — функции работают, но плохо: реакция до 1 часа, фиксы в тот же рабочий день. P3 — улучшения, баги без боли в бизнесе. Ещё два числа, которые сильно экономят нервы: окно обновлений до 15:00 и заморозка релизов в дни пиков (первый снег, конец квартала, локальные распродажи). Для прозрачности — дашборд с аптаймом, инцидентами и заметками по релизам. Без фальши: если протупили — пишем постмортем на полстраницы, что сделаем иначе.
Если коротко, рабочая поддержка сайта — это не бригада пожарных, а тихий сервисный конвейер. Чёткие рутины, понятные тумблеры, репетиции падений и трезвое расписание. И тогда в самый скользкий понедельник вы не мечтаете «чтобы всё само», а просто нажимаете нужные кнопки, греете кофе и считаете новые брони — вместо 502 на экране.