Что произойдёт, если один сервер внезапно отключится

 

 

 

 

 

ИНФРАСТРУКТУРА // FAULT_TOLERANT_ARCHITECTURE

Иллюзия непрерывности: как системы переживают аппаратные сбои

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

Сервер может внезапно выключиться. Диск — перестать отвечать. Сетевой интерфейс — потерять соединение. Виртуальная машина — стать недоступной. Отдельный сервис — завершить работу из-за ошибки. Сам по себе отказ одного компонента ещё не означает, что должна остановиться вся система.

аппаратный сбой → детекция аварии → изолирование компонента → [!] резервный контур → перераспределение нагрузки → непрерывная работа

Но стабильность сохраняется только в том случае, если система изначально спроектирована так, чтобы переживать подобные отказы. И здесь возникает важное различие между двумя подходами.

// ПОДХОД 01 // РЕАКТИВНЫЙ РЕМОНТ //

«Если сервер сломается, мы его заменим».

Результат: Обычное реактивное восстановление после аварии.
// ПОДХОД 02 // АВТОНОМНАЯ ОТКАЗОУСТОЙЧИВОСТЬ //

«Если сервер сломается, система должна продолжить работу, пока мы разбираемся с причиной».

Результат: Отказоустойчивость на уровне архитектуры.
Поток бизнес-операцийОсновной сервер[ОТКАЗ ДИСКА]Резервный контурПродолжение работы

На практике надёжность корпоративной системы складывается сразу из нескольких независимых механизмов:

  • › резервирования;
  • › распределения нагрузки;
  • › репликации данных;
  • › мониторинга;
  • › автоматического переключения;
  • › резервного копирования;
  • › продуманного восстановления.

При этом важно понимать: ни один из этих механизмов сам по себе не делает систему отказоустойчивой.

REQUIRED_ARCHITECTURE: Требуется комплексное сквозное проектирование всего инфраструктурного контура.

 

 

АРХИТЕКТУРА // FAILOVER_SCENARIO_LOGIC

Отказ одного сервера — это только начало сценария

Представим простую архитектуру:

ПользователиСерверБаза данных

Если сервер приложения выключается, пользователи больше не могут работать. Но что произойдёт, если добавить второй сервер?

ПользователиСервер 1Сервер 2

На первый взгляд проблема решена. Но на практике возникает каскад сопутствующих вопросов:

  • › Кто решает, куда направлять пользователя?
  • › Что происходит, если сервер 1 перестал отвечать?
  • › Как система понимает, что сервер действительно неисправен?
  • › Что будет с запросами, которые уже выполнялись?
  • › А если одновременно откажет база данных?
  • › А если серверы работают, но между ними и пользователем исчезнет сеть?
// ОГРАНИЧЕНИЕ ВЫЧИСЛИТЕЛЬНОГО ИЗБЫТОЧЕСТВА //

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

 

 

МЕТРИКИ // FAILOVER_METRICS_MATRIX

Что вообще означает «система пережила сбой»

Это не обязательно означает, что пользователь вообще ничего не заметил. Есть несколько уровней.

ЗапросСервер 1 — отказПереключениеСервер 2Ответ

ПОВТОРНЫЙ_СИНХРОН: В более сложном сценарии часть незавершенных операций может потребовать повторной отправки.

АВТОВОССТАНОВЛЕНИЕ: В некоторых системах полностью допустима кратковременная недоступность, после которой сервис автоматически восстанавливается.

Поэтому перед началом архитектурного проектирования необходимо жестко определить критерии отказов:

  • › сколько простоя допустимо;
  • › какие операции критичны;
  • › сколько данных можно потерять;
  • › сколько времени допустимо на восстановление;
  • › какие компоненты должны быть резервированы;
  • › какие отказы система обязана переживать автоматически.

Без фиксации этих требований невозможно правильно выбрать целевую архитектуру.

REQUIRED_SPECIFICATION: CRITICAL_METRICS_NOT_DEFINED

 

 

СТРАТЕГИЯ // BACKUP_VS_RESILIENCE

Отказоустойчивость и резервная копия — не одно и то же

Это одна из самых распространённых ошибок.

// РЕЗЕРВНАЯ КОПИЯ //

Нужна прежде всего для гарантированного восстановления данных после разрушительного инцидента.

// ОТКАЗОУСТОЙЧИВАЯ АРХИТЕКТУРА //

Служит для непрерывного продолжения работы пользователей прямо в момент отказа аппаратного компонента.

Представим классический линейный сценарий восстановления из бэкапа:

Основной серверОтказРезервная копияВосстановление

Если сервер вышел из строя, само по себе наличие бэкапа ещё не означает, что пользователи мгновенно продолжат работу. Сначала технической команде необходимо последовательно выполнить регламентные шаги:

  • › найти резервную копию;
  • › восстановить систему;
  • › восстановить данные;
  • › проверить целостность;
  • › запустить сервисы;
  • › вернуть пользователей в работу.
// МЕТРИКА ВРЕМЕНИ ВОССТАНОВЛЕНИЯ //

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

А отказоустойчивая архитектура пытается сделать так, чтобы при определённых типах отказов работа продолжалась вообще без полноценного и долгого восстановления из резервной копии.

 

 

НАДЁЖНОСТЬ // PROTECTION_LEVELS_MATRIX

Что именно защищает систему от простоя

Условно можно разделить механизмы на несколько ключевых уровней.

// РЕЗЕРВИРОВАНИЕ //

Есть дополнительный экземпляр компонента, который может оперативно заменить основной.

// БАЛАНСИРОВКА //

Входящая нагрузка распределяется между несколькими параллельными экземплярами.

// РЕПЛИКАЦИЯ //

Данные или актуальное состояние системы непрерывно поддерживаются на нескольких узлах.

// МОНИТОРИНГ //

Система автоматически обнаруживает возникшую аппаратную или программную неисправность.

// FAILOVER //

При критическом отказе происходит автоматическое переключение на рабочий экземпляр.

// РЕЗЕРВНОЕ КОПИРОВАНИЕ //

Позволяет гарантированно восстановить данные после их физической потери или повреждения.

Серьёзный сбой системы// Восстановление //Возврат в рабочее состояние

Все эти механизмы предназначены для решения принципиально разных задач.

 

 

РЕЗЕРВИРОВАНИЕ // INGESTION_RESERVE_PATTERNS

Резервирование бывает разным

Самый простой вариант — иметь запасной сервер. Но важно понять, как именно он будет использоваться.

// ACTIVE-PASSIVE //

Один сервер работает, второй ждёт. При отказе первого узла второй становится основным.

ЗапросыServer 1ACTIVEотказServer 2PASSIVE
  • [+] Плюс: относительная простота.
  • [-] Минус: часть ресурсов постоянно находится в резерве.
// ACTIVE-ACTIVE //

Оба экземпляра работают одновременно. Если один узел выходит из строя, оставшийся продолжает обслуживать запросы.

ПользователиServer 1Server 2

Требование: Такая схема требует гораздо более внимательной работы с состоянием, данными и распределением нагрузки.

 

 

БАЛАНСИРОВКА // HEALTH_CHECK_METRICS

Балансировщик не делает систему отказоустойчивой автоматически

Балансировщик распределяет запросы между серверами.

Load BalancerApplication 1Application 2

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

Load BalancerServer 1 →OKServer 2 →FAILисключить из распределения
// ЛОЖНОПОЛОЖИТЕЛЬНЫЙ ОТВЕТ СЕРВИСА //

Однако и здесь есть критическая архитектурная тонкость. Сервер может стабильно отвечать на health check, но фактически не выполнять бизнес-операции. Например: HTTP-сервис доступен, но база данных недоступна.

Если health check поверхностно проверяет только:
/health = 200 OK
// Балансировщик может продолжать отправлять запросы на фактически неработающий экземпляр

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

 

 

МОНИТОРИНГ // HEALTH_VS_LIVENESS_LOGIC

Есть разница между «сервер жив» и «сервис работает»

Представим физическое состояние узла в контуре:

Сервер:
✔ ОС работает
✔ процесс запущен
✔ порт открыт
⚡ база недоступна

INFRASTRUCTURE_VIEW: С точки зрения базовой инфраструктуры и системного администрирования целевой сервер полностью жив.

USER_BUSINESS_VIEW: С точки зрения конечного пользователя — вся прикладная система может быть абсолютно неработоспособна.

Комплексный мониторингФизическое состояниесерверовБизнес- и сервисныепоказатели

Поэтому в серьёзных системах мониторинг обязан смотреть не только на физическое состояние серверов, но и на сквозные бизнес- и сервисные показатели.

 

 

БАЗЫ_ДАННЫХ // SINGLE_POINT_OF_FAILURE

А что будет с данными?

С приложением всё относительно просто: можно запустить второй экземпляр.

С базой данных ситуация сложнее.

Представим:

Application 1 ──┐Application 2 ──┘├──►Database

Если база является единственной, она становится единой точкой отказа.

То есть два сервера приложений не спасают систему.

Архитектура всё равно зависит от одного критического компонента.

Это называется Single Point of Failure — единая точка отказа.

 

 

АНАЛИТИКА // ANALYSIS_SPOF_CHAIN

Как находят единые точки отказа

Полезно мысленно пройти по всей цепочке:

ПользовательИнтернет / сетьБалансировщикПриложениеОчередьБаза данныхХранилище

Теперь для каждого компонента задаётся один вопрос:

«Что произойдёт, если он исчезнет?»

Если ответ:

«Вся система остановится»,

значит, найден потенциальный Single Point of Failure.

Но наличие точки отказа само по себе не всегда означает архитектурную ошибку.

Иногда резервирование слишком дорого или технически неоправданно.

Вопрос заключается в другом:

Соответствует ли уровень риска требованиям бизнеса?

 

 

БАЗЫ_ДАННЫХ // REPLICATION_VS_BACKUP_LOGIC

Репликация базы данных не равна резервной копии

Допустим, база данных реплицируется:

Application ─┤Database ADatabase B

Это помогает пережить отказ одного узла.

// СЦЕНАРИЙ ОШИБКИ ОПЕРАТОРА //

Но представим другой сценарий. Оператор случайно удалил большое количество записей.

Если изменение мгновенно реплицируется на вторую базу, удаление может оказаться и там.

Поэтому репликация защищает прежде всего от определённых инфраструктурных отказов, но не заменяет полноценную стратегию резервного копирования и восстановления.

 

 

СТРАТЕГИЯ // DISASTER_RECOVERY_MATRIX

От каких сбоев нужно защищаться

Сбой — это не обязательно «сервер выключился».

На практике возможны:

  • › отказ диска;
  • › отказ сервера;
  • › ошибка операционной системы;
  • › повреждение базы;
  • › ошибка приложения;
  • › неудачный релиз;
  • › ошибка конфигурации;
  • › сбой сети;
  • › потеря соединения с внешним сервисом;
  • › ошибочное удаление данных;
  • › атака;
  • › отказ целого дата-центра.

И для каждого сценария может потребоваться отдельный механизм защиты.

Например:

Отказ сервера
[ МЕРА ЗАЩИТЫ ]
резервный узел
Отказ диска
[ МЕРА ЗАЩИТЫ ]
RAID / репликация / резервирование
Ошибка приложения
[ МЕРА ЗАЩИТЫ ]
несколько экземпляров + мониторинг
Ошибка релиза
[ МЕРА ЗАЩИТЫ ]
rollback / blue-green / canary
Потеря данных
[ МЕРА ЗАЩИТЫ ]
резервные копии
Повреждение базы
[ МЕРА ЗАЩИТЫ ]
backup + recovery
Сбой дата-центра
[ МЕРА ЗАЩИТЫ ]
резервная площадка
Сетевой сбой
[ МЕРА ЗАЩИТЫ ]
резервные каналы
Ошибка оператора
[ МЕРА ЗАЩИТЫ ]
аудит + backup + контроль доступа

Главное — не пытаться решить все эти проблемы одним инструментом.

 

 

МОНИТОРИНГ // BUSINESS_MONITORING_VALUE

Мониторинг нужен не для красивых графиков

Мониторинг часто воспринимается как набор дашбордов:

CPU — 42%
RAM — 68%
Disk — 51%

Это полезно, но недостаточно.

Представим, что:

CPU 35%
RAM 52%
Disk 40%

Всё выглядит прекрасно.

// КРИТИЧЕСКИЙ СБОЙ БИЗНЕС-ЛОГИКИ //

Но пользователи не могут оформить заказ. Причина может быть в ошибке бизнес-сервиса или недоступности базы.

Поэтому мониторинг должен отвечать на вопрос:

Работает ли система так, как ожидает бизнес?

 

 

НАБЛЮДАЕМОСТЬ // OBSERVABILITY_EVENTS_CONTOUR

Нужны не только метрики, но и события

Хорошая система наблюдаемости обычно объединяет:

  • › метрики;
  • › логи;
  • › трассировку;
  • › события;
  • › уведомления.

Например:

MetricsLogsTracesEventsНаблюдаемость
// ИНЦИДЕНТПРОИЗВОДИТЕЛЬНОСТИ //

Если пользователь сообщает: «Система стала медленной», одних показателей загрузки CPU может быть недостаточно.

Для детального разбора инцидента нужно оперативно понять:

  • › какой запрос выполнялся;
  • › какой сервис отвечал;
  • › где возникла задержка;
  • › обращался ли запрос к базе;
  • › была ли ошибка;
  • › повторялся ли запрос.

Чем сложнее распределённая система, тем важнее возможность пройти путь конкретной операции через несколько компонентов.

 

 

ПАТТЕРНЫ // AUTOMATIC_FAILOVER_LOGIC

Что такое автоматическое переключение

Failover — это механизм, при котором система при отказе основного компонента переходит на резервный.

Например:

Запрос ────┤Server AServer BServer A — отказЗапрос ──────►Server B

Но автоматическое переключение — не магия.

Система должна пошагово реализовать распределенный алгоритм:

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

Чем больше этих этапов происходит автоматически, тем сложнее становится итоговая архитектура.

 

 

АРХИТЕКТУРА // FALSE_FAILOVER_HAZARDS

Опасность ложного переключения

Система может решить, что сервер умер, хотя на самом деле он просто временно не отвечает.

Server Aзадержка сетиHealth check — timeoutСистема считает A неисправным
// АНОМАЛИЯ ДЕТЕКЦИИ ЖИЗНЕСПОСОБНОСТИ //

Начинается переключение. Но Server A всё это время продолжал работать.

В распределённых системах такие ситуации могут приводить к неприятным последствиям, особенно если несколько узлов одновременно считают друг друга неисправными.

Поэтому механизмы failover требуют аккуратного проектирования, таймаутов и защиты от split-brain-сценариев.

 

 

МАСШТАБИРОВАНИЕ // LOAD_BALANCING_PERFORMANCE

Балансировка нагрузки нужна не только при сбое

Предположим, один сервер способен обработать:

1 000 запросов в секунду.
А система получает:
1 800 запросов.

Можно добавить второй экземпляр:

Load Balancer900 req/s900 req/sServer 1Server 2

Теперь система получает запас производительности.

Но важно понимать:

масштабирование и отказоустойчивость — разные задачи.

Дополнительный сервер может использоваться для увеличения производительности.

А возможность пережить его отказ — уже свойство архитектуры.

Хорошая система может получить оба эффекта одновременно, но они не идентичны.

 

 

ТОПОЛОГИЯ // GEO_REDUNDANCY_RISKS

А если серверы стоят в одном месте?

Это ещё одна распространённая проблема.

Допустим:

Дата-центр│ Server 1│ Server 2│ Database

Формально всё резервировано.

Но если отключится:

  • › электропитание;
  • › сетевой сегмент;
  • › система охлаждения;
  • › всё здание;
  • › канал связи,
// КАТАСТРОФИЧЕСКИЙ СБОЙ ПЛОЩАДКИ //

оба сервера станут недоступны одновременно.

Поэтому иногда резервирование необходимо строить не только между серверами, но и между физическими площадками.

 

 

ТОПОЛОГИЯ // GEO_REDUNDANCY_LEVEL

Географическое резервирование — уже другой уровень

Для особо критичных систем архитектура может выглядеть так:

ПользователиПлощадка AAppDBПлощадка BAppDB◄──────►
// ОГРАНИЧЕНИЕ ЭКОНОМИЧЕСКОЙ СЛОЖНОСТИ //

Это значительно сложнее и дороже. Не каждому бизнесу нужна такая схема.

Если допустимо восстановить систему за несколько часов, создавать полноценный второй дата-центр может быть экономически неоправданно.

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

 

 

МЕТРИКИ // METRICS_RPO_RTO

RPO и RTO: два показателя, которые определяют требования

При проектировании восстановления особенно важны два понятия.

// RPO — RECOVERY POINT OBJECTIVE //

Сколько данных бизнес готов потерять в случае аварии.

Например: RPO = 15 минут.

Это означает, что при определённом сценарии аварии допустима потеря данных максимум за последние 15 минут.

// RTO — RECOVERY TIME OBJECTIVE //

За какое время система должна быть восстановлена.

Например: RTO = 1 час.

Тогда система должна вернуться в работоспособное состояние не позднее чем через час после серьёзного отказа.

Условно:

времяАварияRPOдопустимая потеряданныхRTO

Эти показатели позволяют перейти от абстрактного: «Нам нужна надёжная система» к конкретным требованиям.

 

 

ЭКОНОМИКА // HIGH_AVAILABILITY_COST

Высокая доступность стоит денег

Можно построить архитектуру, которая практически не допускает простоя.

Но вопрос:

«Нужно ли это конкретному бизнесу?»

остаётся обязательным.

// НЕЗНАЧИТЕЛЬНЫЙ РИСК //

Если простой внутренней системы на два часа раз в несколько лет почти ничего не стоит, нет смысла строить для неё инфраструктуру уровня критически важной платёжной системы.

// КРИТИЧЕСКИЙ ПРОСТОЙ //

И наоборот. Если остановка производственной системы на 30 минут приводит к серьёзным потерям, стоимость резервирования может быть полностью оправдана.

стоимостьинфраструктурыбалансстоимостьотказа

Поэтому отказоустойчивость — это всегда баланс между стоимостью инфраструктуры и стоимостью отказа.

 

 

ПРОЦЕССЫ // HUMAN_FACTOR_PROCESSES

Нельзя забывать о человеческом факторе

Даже идеально резервированная инфраструктура не спасёт от неправильной процедуры.

// ОШИБКА КОНФИГУРАЦИИ //

Например: администратор изменил конфигурацию на всех узлах одновременно.

// СБОЙ ДЕПЛОЯ //

Или: неудачное обновление распространилось сразу на весь кластер.

// СЛЕПАЯ ЗОНА БЭКАПА //

Или: резервные копии создаются, но никто никогда не проверял, можно ли из них восстановиться.

Поэтому отказоустойчивость включает не только технологии, но и процессы:

  • › регламенты;
  • › контроль изменений;
  • › разграничение доступа;
  • › тестирование;
  • › документацию;
  • › аварийные сценарии;
  • › обучение сотрудников.

 

 

ПРОВЕРКА // BACKUP_VERIFICATION_PARADIGM

Резервная копия, которую никто не проверял, — это предположение

Очень важный принцип:

Backup считается надёжным только после успешного восстановления.

Можно ежедневно получать ложный статус в журналах:

Backup completed successfully

и всё равно обнаружить во время аварии, что восстановить систему невозможно.

Причины могут быть разные:

  • › повреждённый архив;
  • › неправильная конфигурация;
  • › отсутствующие зависимости;
  • › неверные права;
  • › неполная копия;
  • › неизвестная последовательность восстановления.
Резервная копиярегулярноТестовоевосстановление

Поэтому необходимо регулярно проводить тестовое восстановление.

 

 

СТРАТЕГИЯ // FULL_SYSTEM_RECOVERY

Резервировать нужно не только данные

Представим, что база сохранена идеально.

Но для работы системы необходимы:

  • › конфигурации;
  • › секреты;
  • › сертификаты;
  • › файловое хранилище;
  • › очереди;
  • › настройки приложений;
  • › инфраструктурные параметры;
  • › внешние зависимости.
// ОГРАНИЧЕНИЕ ОБЛАСТИ ВОССТАНОВЛЕНИЯ //

Если восстановить только базу, это ещё не означает восстановить приложение.

База данныхХороший планвосстановленияВся система

Поэтому хороший план восстановления описывает всю систему, а не только базу данных.

 

 

ТЕСТИРОВАНИЕ // VALIDATION_THROUGH_FAILURE

Отказоустойчивость нужно проверять отказом

Есть фундаментальная проблема:

невозможно быть уверенным в отказоустойчивости, если ни разу не проверяли, как система ведёт себя при отказе.

Поэтому существуют практики контролируемого тестирования отказов.

Например, можно проверить:

  • › отключение одного экземпляра приложения;
  • › потерю соединения с базой;
  • › отказ сетевого интерфейса;
  • › недоступность внешнего API;
  • › переполнение диска;
  • › восстановление после сбоя;
  • › работу резервного канала.
// БЕЗОПАСНЫЙ ИСПЫТАТЕЛЬНЫЙ СТЕНД //

В идеале такие сценарии выполняются контролируемо и в безопасном контуре.

архитектура на бумаге≠архитектура, котораяреально переживает отказ

Потому что архитектура на бумаге и архитектура, которая реально переживает отказ, — не одно и то же.

 

 

АРХИТЕКТУРА // FAILBACK_STRATEGY

Важен не только отказ, но и возвращение в нормальное состояние

Допустим, сервер 1 вышел из строя. Трафик автоматически ушёл на сервер 2.

На этом задача не заканчивается.

Сервер 1 [Сбой]Трафик → Сервер 2Синхронизация и возвратНормальноесостояние

Нужно понять:

  • › почему сервер 1 отказал;
  • › что с его данными;
  • › можно ли безопасно вернуть его в кластер;
  • › не содержит ли он устаревшее состояние;
  • › как синхронизировать данные;
  • › как вернуть нормальное распределение нагрузки.
// ДЕГРАДАЦИЯ ПРОЦЕССА ПОДДЕРЖКИ //

Иначе временная резервная схема может постепенно превратиться в постоянное ручное обслуживание.

 

 

АРХИТЕКТУРА // TOTAL_RESILIENCE_CHAIN

Отказоустойчивая архитектура — это цепочка, а не отдельный сервер

Хорошо спроектированная система обычно выглядит примерно так:

ПользователиБалансировкаApplication 1Application 2База данных+ репликаРезервные копииОтдельное хранилищеМониторинг контролирует всю цепочку

Именно совокупность этих механизмов позволяет системе переживать разные классы отказов.

 

 

ЭКОНОМИКА // EXCESSIVE_REDUNDANCY_PARADOX

Но резервировать всё подряд тоже неправильно

Можно сделать два сервера.

Два сервераПотом два балансировщика.Потом две базы.Потом два дата-центра.Потом ещё резервную площадку.

В результате получится чрезвычайно сложная инфраструктура.

// ПАРАДОКС ИЗБЫТОЧНОЙ СЛОЖНОСТИ //

И здесь возникает парадокс: чем сложнее архитектура, тем больше компонентов необходимо правильно обслуживать.

Поэтому резервирование должно быть обосновано. Для каждого компонента полезно задать вопрос:

КРИТЕРИЙ_01: Какова стоимость его отказа?

КРИТЕРИЙ_02: Какова стоимость его резервирования?

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

 

 

ПРОЕКТИРОВАНИЕ // CRITICAL_COMPONENT_EVALUATION

Главная ошибка — думать только о железе

Отказоустойчивость часто ассоциируют с серверами.

Но в современной корпоративной системе отказать может любой слой:

СетьБалансировщикПриложениеОчередьБазаХранилищеВнешний сервис

Поэтому вопрос должен звучать не:

«Есть ли у нас резервный сервер?»

а:

«Какие компоненты являются критическими и что произойдёт при отказе каждого из них?»

Это гораздо более полезная постановка задачи.

 

 

ПРОЕКТИРОВАНИЕ // ARCHITECTURAL_DESIGN_CYCLE

Как проектировать систему, которая действительно переживает сбои

На практике полезно двигаться от бизнес-требований.

01 // КРИТИЧНЫЕ ПРОЦЕССЫ

Сначала определить критичные процессы. Какие операции нельзя останавливать?

02 // ДОПУСТИМЫЙ ПРОСТОЙ

Затем определить допустимый простой. Пять минут, час, сутки?

03 // ПОТЕРЯ ДАННЫХ

Определить допустимую потерю данных. Можно потерять несколько секунд данных? Пятнадцать минут? Ничего?

04 // ЕДИНЫЕ ТОЧКИ ОТКАЗА

Найти единые точки отказа. Что остановит систему при выходе из строя одного компонента?

05 // СТРАТЕГИЯ РЕЗЕРВИРОВАНИЯ

Определить стратегию резервирования. Active-active, active-passive, репликация, резервная площадка или другой механизм.

06 // МОНИТОРИНГ

Спроектировать мониторинг. Как система поймёт, что компонент неисправен?

07 // Спроектироватьвосстановление08 // Проверитьсценарии отказавалидация действий в аварии09 // ЭкономикаСоответствиецене простоя
// ИСХОДНЫЙ АНАЛИЗ МАТРИЦЫ РИСКОВ //

Что происходит после аварии? Что будет, если реально отключить компонент? Соответствует ли стоимость архитектуры цене потенциального простоя?

Это уже позволяет понять, является ли задача хорошим кандидатом для автоматизации.

 

 

РЕЗЮМЕ // FINAL_RESILIENCE_PARADIGM

Самая надёжная система — не та, в которой ничего никогда не ломается

Такой системы не существует.

  • › Серверы ломаются.
  • › Сеть пропадает.
  • › Диски выходят из строя.
  • › Программное обеспечение содержит ошибки.
  • › Люди допускают ошибки.
  • › Внешние сервисы становятся недоступными.

Поэтому зрелая архитектура строится не вокруг предположения:

«Сбой не произойдёт».

Она строится вокруг другого:

«Сбой произойдёт. Вопрос в том, что система сделает после него».
// ПОЛНЫЙ КРАХ БИЗНЕСА //

Если отказ одного сервера приводит к остановке всего бизнеса, значит, этот сервер фактически является критической единой точкой отказа.

// ШТАТНЫЙ РЕЗЕРВНЫЙ ПЕРЕХОД //

Если его выход из строя автоматически переводит нагрузку на другой узел, данные остаются доступны, а команда получает уведомление о проблеме — архитектура уже умеет переживать определённый класс отказов.

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

продолжать работуобнаруживать отказпереключатьсявосстанавливаться после аварии

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

// ОЦЕНКА СТОИМОСТИ ПОЗДНЕГО ПРОЕКТИРОВАНИЯ //

И проектировать такую систему лучше до первого серьёзного сбоя.

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

 

 

НАВИГАЦИЯ // SUGGESTED_READING
 
[ Модуль // ИНТЕГРАЦИИ ]

API, Webhook или очередь сообщений?

 
[ Модуль // ИНТЕГРАЦИИ ]

Когда API есть, а интеграция всё равно не работает

 
[ Модуль // АВТОМАТИЗАЦИЯ ]

Как соединить производство и корпоративные системы

 
[ EXPERTISE JOURNAL ]

Все инженерные материалы и экспертные статьи

 
[ CORE GLOSSARY ]

Полный алфавитный справочник ИТ-терминов

 

[ DIRECT EMAIL LINE ]
info@log-ai.ru

 

🔒 Данные и доступ к системам заказчика обрабатываются в соответствии с согласованными требованиями к безопасности и конфиденциальности. Условия доступа, хранения и обработки данных определяются архитектурой проекта и договором.

Сайт носит исключительно информационный характер и не является публичной офертой в соответствии со статьёй 437 Гражданского кодекса РФ. Цены, состав и условия предоставления услуг уточняются при проектировании решения и фиксируются в договоре. Условия технического сопровождения и уровень сервиса могут дополнительно определяться отдельным соглашением (SLA).

© 2026 Log-AI Москва
Автоматизация бизнеса и ИИ-решения под ключ
Самозанятый Скопец Антон Викторович ИНН 741709260870
Политика конфиденциальности Пользовательское соглашение
AI Ассистент
×