Одна машина — одна точка отказа
Приложение, база и файлы на одном сервере. Отказ диска или обновление системы означают простой неизвестной длины.
Отказоустойчивый веб-сервис — это сервис, который остаётся доступным или быстро возвращается в строй при выходе из строя узла, диска, базы, внешней системы или неудачной выкладки. Мы не обещаем, что сбоев не будет. Мы определяем, какие отказы вы готовы пережить и за какое время, и строим ровно столько резервирования, сколько оно того стоит. Начинаем с перечня одиночных точек отказа и проверки копий.
Обследование — 200 000 ₽, вычитается из первого этапаВосстановление из копии проверяется учением, а не наличием файловИсходный код и настройки в вашем репозитории с первого коммита
Приложение, база и файлы на одном сервере. Отказ диска или обновление системы означают простой неизвестной длины.
Задание копирования каждую ночь пишет «успешно», но никто не проверял, что из файлов получится рабочая база и сколько времени это займёт.
Платёжный провайдер или 1С отвечают медленно, потоки приложения ждут, очередь запросов растёт, и страницы, не связанные с платежами, перестают открываться.
Новая версия изменила структуру данных так, что старая работать с ней не может. Откат превращается в восстановление из копии со всеми потерями.
Резервирование строится против конкретных отказов, а не вообще.
Без этих значений нельзя ответить, достаточно ли надёжно. Их называет бизнес, а не разработчик.
Для каждого сервиса, а лучше для каждой его части, записываются два показателя.
Эти показатели определяют схему. Нулевая потеря данных требует синхронной записи на вторую копию, что замедляет операции и усложняет эксплуатацию. Время восстановления в минуты требует автоматического переключения и людей, которые знают, как оно работает. Каждый шаг вниз по обоим показателям стоит заметно дороже предыдущего, поэтому на обследовании мы просим назвать не «как можно меньше», а цену простоя: сколько заказов и платежей не пройдёт за час.
Условный пример: в сервисе записи клиентов заявку терять нельзя, личный кабинет можно показывать с задержкой, а отчёты руководителю подождут до утра. Три части получают три схемы, и итог дешевле защиты всего на уровне самой дорогой.
Цель по доступности в процентах («три девятки») — следствие этих решений, а не их замена. Как читать такую цель и что считать простоем, описано в статье о доступности «три девятки».
Выбор уровня — это выбор цены простоя. Начинать с высшего уровня почти никогда не нужно.
Приложение без состояния копируется просто, с данными сложнее.
Реплика получает изменения с главной базы. При асинхронной репликации главная база подтверждает запись, не дожидаясь реплики, и при аварии последние изменения могут пропасть. При синхронной подтверждение приходит после записи на реплику: потери нет, но запись медленнее, а при недоступной реплике может остановиться совсем. Выбор делается отдельно для каждой базы и записывается как решение.
Опасный случай — когда оба узла считают себя главными и принимают записи: данные расходятся, и сводить их приходится вручную. Поэтому автоматическое переключение строится на внешнем арбитре (узлы голосуют), а не на правиле «не отвечает, значит, упал». Для PostgreSQL есть зрелые инструменты вроде Patroni; нужны ли они вам или хватит ручного переключения, решает размер системы и умение команды её сопровождать.
Если из базы удалили таблицу или запустили неверное обновление, это мгновенно попадёт на реплику. Защищают от этого копии с журналом изменений, из которых можно вернуться на нужный момент времени. Поэтому горячая реплика и резервная копия — два разных механизма, и нужны оба.
Копию разворачивают на чистом сервере по инструкции, запускают на ней приложение, сверяют число и суммы заказов с боевой системой и записывают время. Если оно больше допустимого, ускоряем восстановление или пересматриваем цель. Сам файл копии ничего не доказывает.
У каждого вызова во внешнюю систему есть предел ожидания. Без него один зависший провайдер занимает все рабочие потоки.
Повторяем ограниченное число раз, с растущей паузой и только безопасные к повтору операции. Бесконечные повторы превращают сбой в лавину.
Если система явно недоступна, вызовы к ней на время прекращаются, и пользователь сразу получает понятный ответ.
Что можно сделать позже (письмо, выгрузка в 1С), кладётся в очередь с повторной отправкой и не пропадёт, если система вернётся через час.
Обновления нередко вызывают простоев не меньше, чем железо, поэтому надёжность включает процесс выкладки.
Остановку выкладки по ошибкам дают метрики, поэтому отказоустойчивость и мониторинг веб-сервисов строятся вместе.
Цены совпадают со страницей «Тарифы». Точная цена называется только у обследования, остановиться можно после любой ступени.
Перечень отказов и одиночных точек, допустимые потеря данных и время восстановления, проверка копий, уровень защиты, вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
Сервис с базой, очередями, 1С и внешними обменами: зависимости и порядок запуска после аварии.
Настройка копий базы и файлов с возвратом на момент времени, учение по восстановлению с замером времени, инструкция, резервный узел приложения.
Реплика базы, переключение, таймауты и предохранители на внешних вызовах, безопасная выкладка с откатом, учения с отключением узлов.
Схема на все части сервиса, регламент учений, передача команде.
Плановые проверки восстановления, разбор инцидентов, пересмотр схемы. Сверх пакета — 5 000 ₽ в час.
Выписываем одиночные точки отказа, спрашиваем цену простоя, берём последнюю копию и разворачиваем её. Для каждой части выбираем уровень защиты и записываем принятые риски.
Копии, реплика, переключение, таймауты, безопасная выкладка. Сначала на стенде, потом на боевом контуре, в вашем репозитории.
Нарочно отключаем узел, базу, внешнюю систему, ломаем выкладку. Замеряем время восстановления и сравниваем с целью.
Что делать при каждом из шести отказов, кто решает о переключении, как запустить сервис после полной остановки.
Проверки делает ваша команда или сопровождение; схема пересматривается при росте нагрузки.
Нулевая потеря и минуты на восстановление стоят заметно больше, чем потеря за час и восстановление за смену.
Если приложение хранит сессии и файлы на локальном диске, сначала его нужно сделать независимым от узла.
У каждой системы свои сбои и своя безопасность повторов. Одни операции можно повторять, другие нельзя.
Вторая площадка, закрытая сеть и ограничения на оборудование добавляют работы.
Отказоустойчивость отвечает на вопрос «что будет, если что-то сломается». Высокая нагрузка отвечает на другой: «что будет, если придёт много пользователей». Решения частично общие, например несколько копий приложения, но цели разные: от нагрузки спасают кэш, очереди и отключение функций на пике, и они разобраны на странице высоконагруженного B2C-сервиса.
Сигналы о сбое, панели и правила оповещений описаны на странице о мониторинге веб-сервисов; а принять уже работающую систему на постоянное обслуживание — услуга сопровождения. Про разбиение на сервисы — микросервисная архитектура: распределённая система ломается чаще, и отказоустойчивости там нужно больше, а не меньше.
Порядок шагов по возрастанию цены собран в статье «Как сделать веб-сервис отказоустойчивым по шагам».
Порядок работ от дешёвого шага к дорогому: что даёт каждый и когда остановиться.
Как переводить цель по доступности в допустимый простой и что считать недоступностью.
Что делать, когда причина сбоя не отказ, а наплыв пользователей.
Сорок минут созвона: как сервис устроен, где хранятся данные, как делаются копии и что было при последних авариях. По итогам скажем, какие риски самые дорогие и с какой ступени начинать.
Обследование стоит 200 000 ₽ за один сервис и 350 000 ₽ за несколько систем. Лёгкий пилот (копии, проверенное восстановление, резервный узел) — 150 000–400 000 ₽ за 2–8 недель, тяжёлый (реплика и переключение, защита внешних вызовов, откат выкладок) — 400 000–1 200 000 ₽ за 2–3 месяца. Схема с несколькими узлами и автоматическим переключением на всём продукте идёт этапами от 1 500 000 ₽.
С копий и проверки восстановления: это самое дешёвое и полезное действие. Затем отделить состояние от узла, добавить второй узел приложения, потом реплику базы. После любого шага можно остановиться.
Нет. Реплика защищает от отказа узла, но получает и ошибки: удалённая таблица исчезнет на ней сразу. От ошибок человека защищают копии с возвратом на момент времени. Нужны оба механизма.
Мы не берём обязательств по доступности: она зависит от оборудования, площадки, вашей эксплуатации и внешних систем. Мы строим схему под ваши цели по потере данных и времени восстановления и измеряем результат на учениях.
Учением: копию разворачивают на чистом сервере, запускают приложение, сверяют записи с боевой системой и записывают время. Повторять нужно регулярно, например раз в квартал.
Круглосуточного дежурства у нас нет. Разбор инцидентов в рабочее время берёт сопровождение: 20 000, 60 000 или 120 000 ₽ в месяц, до 4, 12 или 25 часов, сверх пакета 5 000 ₽ в час. Для ночной реакции нужна ваша дежурная служба.
Вам. Исходный код, конфигурации, сценарии развёртывания и восстановления и регламенты лежат в вашем репозитории с первого коммита. Результат передаётся по акту, порядок передачи прав записан в договоре. Открытые компоненты остаются под своими лицензиями, их список входит в документацию.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.