Доступность и надёжность
Сервис может отвечать, но работать неправильно
Доступность и надёжность часто упоминают рядом, но это не одно и то же. Система может быть доступна — принимать запросы и возвращать ответы — и при этом выдавать неверные данные. И наоборот, система может хранить данные корректно, но быть временно недоступной для пользователя.
Availability: можно ли воспользоваться системой сейчас
Availability показывает, какую долю времени система готова обслуживать запросы. Если сервис работает почти всё время, а во время редких сбоев быстро восстанавливается, его доступность будет высокой.
availability = uptime / total time
На доступность влияют не только полные падения приложения. Если сервис формально запущен, но все запросы завершаются таймаутом, с точки зрения пользователя он тоже фактически недоступен.
Reliability: можно ли доверять результату
Reliability описывает способность системы стабильно выполнять работу корректно в течение времени. Для разных продуктов «корректно» означает разное: не потерять платёж, не отправить одно событие дважды, сохранить загруженный файл или вернуть правильное состояние заказа.
Надёжность особенно заметна не в обычный момент, а при проблемах: перезапуске процесса, временной потере сети, ошибке зависимого сервиса или сбое оборудования.
Отказы нужно считать нормальной частью системы
Чем больше компонентов, тем выше шанс, что какой-то из них в конкретный момент будет работать неправильно. Поэтому распределённую систему полезно проектировать не с мыслью «серверы не падают», а с мыслью «отдельные отказы неизбежны, что произойдёт после них?».
Client → Service A → Service B → Database
X
Service B unavailable
Архитектура должна определить, что делать в такой ситуации: можно ли повторить операцию, вернуть временную ошибку, использовать резервный экземпляр или продолжить работу в ограниченном режиме. Конкретные механизмы зависят от требований системы.
Цифра доступности всегда имеет контекст
Фраза «99.9% availability» сама по себе неполна. Важно понимать, за какой период она считается, какой запрос считается успешным, какие компоненты входят в измерение и что видит конечный пользователь.