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

Вот эта тишина — и есть вся история. Расскажу, чем она закончилась.

SaaS не значит «безопасно»

Все были уверены, что резервные копии — забота Commercetools. Это же управляемый SaaS, значит, вендор всё делает за нас, так?

Неприятная правда: в Commercetools нет ни встроенного планировщика бэкапов, ни point-in-time recovery. Товары, категории, цены, данные клиентов — всё это живёт там, всё изменяемо и всё хрупко. Вендор держит сервис на плаву. А ваши данные — ваша проблема.

Что это значит на практике. Один кривой импорт-скрипт — перепутанная колонка, не та переменная окружения, джун, запустивший миграцию на прод вместо staging, — за секунды перезапишет тысячи товарных записей. Кнопки «отменить» нет. Без бэкапа вы неделями собираете каталог руками, и это ещё если помните, как выглядело чистое состояние. Для каталога с кастомными атрибутами, многоуровневыми ценами и деревьями категорий «помнить» — не вариант.

До моего вопроса команда спала спокойно. Это и есть самое опасное. Отсутствие бэкапа не болит ровно до того дня, когда начинает болеть, — а тогда строить его уже поздно.

Что я в итоге собрал

Решение не должно было быть экзотическим. Оно должно было быть надёжным и работать так, чтобы о нём никто не думал.

Я собрал систему автоматического экспорта на Azure Logic Apps. Каждый день по расписанию она выгружает из Commercetools все критичные типы данных — товары, категории, цены, клиентов — и складывает в Azure Blob Storage с нормальной политикой хранения. Ежедневные снимки, с версиями, со сроком жизни по правилу, чтобы хранилище не пухло до бесконечности.

На этом большинство команд и останавливается. Экспорт по расписанию, папка с JSON, зелёная галочка в дашборде. Похоже на бэкап. На схеме архитектуры выглядит как бэкап. И подведёт вас ровно тогда, когда будет нужен.

Чем настоящий бэкап отличается от «для галочки»

Бэкап, из которого вы ни разу не восстанавливались, — это не бэкап. Это надежда с лишними шагами.

Поэтому экспорт был только половиной работы. Вторая половина — доказать, что от этого экспорта есть толк:

  • Проверка количества записей после каждого экспорта — чтобы прогон, который тихо выгрузил половину каталога, ловился в тот же день, а не через полгода посреди инцидента.
  • Проверка целостности схемы — потому что файл, который существует, но не парсится, хуже, чем его отсутствие: он даёт ложную уверенность.
  • Автоматические restore dry-run каждую неделю — система реально читает бэкап обратно и подтверждает, что из него собираются валидные объекты Commercetools.
  • Алерты в Slack в ту же секунду, как что-то не прошло валидацию. Не еженедельный отчёт, который никто не открывает, а мгновенный пинг — достаточно громкий, чтобы отвлечь.

Вот этот слой валидации и есть вся разница между бэкапом, который спасает квартал, и папкой файлов, которые тихо сгнили три недели назад.

Учения по восстановлению, которые всех переубедили

Цифры на слайде людей не двигают. Двигает демонстрация.

Поэтому мы устроили настоящие учения по disaster recovery. Взяли копию окружения и намеренно повредили каталог — тысячи товаров с ценами, категориями и кастомными атрибутами стёрты ровно так, как это сделал бы кривой импорт.

Потом я попросил команду оценить восстановление. Без системы бэкапа честный ответ был — недели ручной пересборки, и они даже не были уверены, что вообще вернутся к исходному состоянию.

Мы нажали restore. Полное восстановление меньше чем за час.

В переговорке снова повисла тишина — но уже другая. Бюджет на систему бэкапов, который до этого был открытым вопросом, утвердили на постоянку ещё до конца встречи. Никто не спорит о ценности страховки после того, как своими глазами увидел, что дом не сгорел.

Стройте до того, как понадобится

Если ваша ecommerce-платформа работает на любом SaaS-бэкенде — Commercetools или чём угодно ещё — не верьте про бэкапы ничему, пока не прочитали мелкий шрифт и сами не проверили восстановление.

  • SaaS держит сервис живым. От вас самих он ваши данные не защищает.
  • Экспорт, из которого вы ни разу не восстанавливались, — это украшение, а не бэкап.
  • Валидация и отрепетированное восстановление — вот настоящий продукт. Файлы — просто сырьё.

Лучшее время строить стратегию бэкапов — до того, как она понадобится. Второе по лучшести — сегодня. Худшее, с большим отрывом, — посреди инцидента.

И оставлю вас с тем самым вопросом, с которого всё началось: когда вы в последний раз реально запускали восстановление из своих бэкапов — не обсуждали, не показывали пальцем на пайплайн, а именно запускали и смотрели, как данные возвращаются?