Что такое отказоустойчивость системы? Отказоустойчивость — это свойство системы, которое позволяет максимально сохранять работоспособность при отказе отдельных компонентов или связанных систем и восстанавливать её при восстановлении этих компонентов. Это означает, что система должна продолжать функционировать, даже когда некоторые её части выходят из строя.
Как должна вести себя система при отказе некритичного сервиса? Деградация работоспособности системы должна быть прямо пропорциональна "величине" отказа. Если перестал работать сервис, отвечающий за некритичную функциональность, вся система не должна падать. Небольшая часть функциональности может быть недоступна, но это не должно влиять на стабильность основной части системы и критически важных функций.
Что подразумевает стабильность системы? Стабильность системы предполагает самостоятельное восстановление работоспособности после сбоя как отдельных компонентов, так и всей системы в целом. Например, после восстановления сетевого подключения все компоненты стабильной системы должны продолжить работу, а данные должны вернуться в консистентное состояние без какого-либо ручного вмешательства со стороны команды эксплуатации.
Какой основной метод используется для оценки отказоустойчивости системы? Единственный эффективный способ оценки отказоустойчивости — проведение стресс-тестов (resilience testing) и chaos engineering. Это означает необходимость создания автоматизированных сценариев отказа различных компонентов системы и последующего анализа поведения системы в этих условиях.
Что является измеримой метрикой отказоустойчивости системы?
Количество успешно пройденных тестов на устойчивость к различным сбоям служит объективной метрикой отказоустойчивости как отдельных компонентов, так и системы в целом. На основе этой метрики можно делать выводы о повышении или понижении стабильности системы после внесения изменений в архитектуру или код.
Что означает принцип "Отсутствие единой точки отказа" (No SPoF)? Это фундаментальный принцип, применимый ко всем уровням эксплуатации системы. Он требует, чтобы ни один компонент системы не был единственным и критически важным для работы всей системы. Для его реализации сервисы должны быть готовы к запуску в нескольких экземплярах и, как минимум, не должны хранить состояние (быть stateless-сервисами).
Как принцип постепенной деградации (Graceful Degradation) помогает при отказах? Постепенная деградация — это возможность системы частично сохранять функциональность при отсутствии или неработоспособности некоторых её компонентов. Вместо полного отказа система может либо временно отключить некритичные функции, либо использовать закешированные данные, либо предоставлять основной функционал с ограниченными возможностями.
Как кэширование помогает обеспечить отказоустойчивость системы? Кэширование позволяет системе деградировать в актуальности данных взамен их полного отсутствия. Если источник актуальных данных недоступен, система может использовать предварительно сохранённые данные из кэша. В зависимости от сценария, это может быть как частичная деградация (когда старые данные лучше, чем их полное отсутствие), так и практически полное сохранение функциональности.
Почему последовательная обработка запросов может быть опасной для отказоустойчивости? При последовательной обработке запросов отказ одного компонента может привести к полной блокировке работы всей системы. Если система дожидается ответа от каждого компонента последовательно, то при недоступности любого из них вся цепочка обработки прерывается, что делает систему уязвимой к единичным отказам.
Является ли создание отказоустойчивой системы разовым действием? Нет, создание отказоустойчивой системы — это непрерывный итерационный процесс, который включает регулярное стресс-тестирование, анализ результатов, совершенствование архитектуры и подходов к написанию кода, а затем повторное тестирование. Этот цикл должен повторяться постоянно для поддержания и улучшения устойчивости системы к сбоям.