Чек-лист отказоустойчивости для интернет-магазина
Отказоустойчивость магазина — это не «купить побольше серверов». Это дюжина конкретных привычек и настроек, большинство из которых стоят копейки. Список составлен по принципу «цена вопроса / эффект»: первые пункты почти бесплатные, дальше — сложнее и дороже. Пройдитесь и честно отметьте, что закрыто, а что — «как-нибудь потом».
- Проверенные бэкапы. Бэкап существует только после тестового восстановления: файл, который никто не разворачивал, — это надежда, а не бэкап. Раз в месяц поднимайте копию магазина из бэкапа на отдельной машине и засекайте время. Если восстановление занимает шесть часов — ваша реальная нижняя граница простоя именно такая.
- Низкий TTL на боевых DNS-записях. A-запись сайта и API — 30–60 секунд, иначе любое переключение проживёт в кэшах резолверов дольше самой аварии. Проверьте реальный TTL у нескольких резолверов: часть провайдеров завышает его принудительно. Подробности — в нашей статье про выбор TTL.
- Резервная VM во второй зоне или облаке. Холодная машина в другой зоне доступности стоит копейки: вы платите в основном за диск и образ. Обновляйте её снапшот минимум раз в неделю, иначе «резерв» встретит вас кодом полугодичной давности. И проверьте, что она реально поднимается — одной командой или одной кнопкой.
- Внешний мониторинг с алертами в Telegram. Проверки должны идти снаружи вашей инфраструктуры: мониторинг, живущий на том же сервере, молча утонет вместе с ним. Мониторьте не только главную страницу, но и корзину, и ответ платёжной формы. Алерты — туда, где их увидят ночью: в Telegram дежурного, а не в почту «разобрать утром».
- Актуальные доступы — у двух людей. Регистратор домена, DNS, облачный аккаунт, платёжный кабинет: у каждого ключа должно быть минимум два владельца. Раз в квартал проверяйте, что пароли подходят, а двухфакторка не привязана к телефону уволившегося сотрудника. Сценарий «единственный админ в отпуске без связи» — классика ночных аварий.
- Runbook на падение. Одна страница: кто принимает решение о переключении, в каком порядке что дёргаем, где лежат доступы, кому писать в поддержку. Ночью в стрессе никто ничего не вспомнит — открывают документ и идут по шагам. Копию храните вне основной инфраструктуры: в облачном документе или распечатанной.
- Автоматический DNS-фейловер. Если переключение делает человек, длительность простоя измеряется скоростью его пробуждения. Автоматика смотрит на зону каждые несколько секунд и переписывает запись сама, в любое время суток. Собственно, baser этим и занимается: следит за зонами и переключает DNS на резерв без вашего участия.
- Статическая страница-заглушка. Когда лежит всё, включая бэкенд, клиенту нужно показать хоть что-то: «чинимся, вернёмся к 15:00, вот телефон и Telegram». Заглушка должна жить отдельно от магазина — на другом хостинге или в объектном хранилище. Это дешевле любого извинительного промокода.
- Повторные попытки платёжных webhook'ов. Если магазин был недоступен в момент оплаты, платёжная система шлёт уведомление о платеже — и получает таймаут. Уточните у провайдера, сколько раз и с каким интервалом он повторяет webhook, и умеете ли вы дозапросить статус платежа по API вручную. Иначе получите оплаченные заказы, о которых магазин не знает.
- CDN и кэш для каталога. Каталог, карточки и картинки отлично кэшируются: при падении бэкенда CDN ещё какое-то время отдаёт витрину. Клиент посмотрит товары и вернётся оформить заказ позже, а не уйдёт к конкуренту сразу. Корзину и оплату это не спасёт, поэтому CDN дополняет фейловер, а не заменяет его.
- Реплика БД или почасовые инкременты. Дневной бэкап — это потеря дня заказов. Настройте реплику базы в другую зону или, как минимум, инкрементальные бэкапы каждый час. И вернитесь к пункту 1: проверьте, что из этих инкрементов база реально собирается обратно.
- Регулярный учебный тест-фейловер. Раз в квартал, в рабочее время: объявляем «зона упала» и проходим весь путь — алерт, решение, переключение DNS, подъём резерва, пробный заказ. Первый раз будет больно и долго, и это нормально. Именно для этого тест и нужен: боль должна случиться в учебное время, а не в ночь распродажи.
Сколько это стоит
Считаем честно. Внешний мониторинг — от нуля до пары тысяч рублей в месяц. Холодная VM во второй зоне — оплата диска, обычно сотни рублей. CDN для каталога на старте — копейки. Runbook и учебные тесты — время команды, а не деньги. Автоматический фейловер в baser — сопоставимо с парой часов работы админа в месяц.
Теперь вторая цифра: часовой оборот магазина в пик плюс стоимость команды, которая вместо развития тушит пожар. Считается просто: месячную выручку поделите на 730 часов и умножьте на пиковый коэффициент. У магазина с оборотом хотя бы в несколько миллионов рублей в месяц один ночной простой в сезон стоит дороже, чем весь этот чек-лист за год.
Отказоустойчивость — это не бюджет на железо, а дисциплина из двенадцати пунктов.
Начните с трёх самых дешёвых пунктов: TTL, доступы и runbook. Их можно закрыть за один вечер — и это уже уполовинит ваши риски.