Доступность и надёжность

Базовый System Design
≈ 2 мин чтения

Сервис может отвечать, но работать неправильно

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

Availability: можно ли воспользоваться системой сейчас

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

availability = uptime / total time

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

Reliability: можно ли доверять результату

Reliability описывает способность системы стабильно выполнять работу корректно в течение времени. Для разных продуктов «корректно» означает разное: не потерять платёж, не отправить одно событие дважды, сохранить загруженный файл или вернуть правильное состояние заказа.

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

Отказы нужно считать нормальной частью системы

Чем больше компонентов, тем выше шанс, что какой-то из них в конкретный момент будет работать неправильно. Поэтому распределённую систему полезно проектировать не с мыслью «серверы не падают», а с мыслью «отдельные отказы неизбежны, что произойдёт после них?».

Client → Service A → Service B → Database
                    X
             Service B unavailable

Архитектура должна определить, что делать в такой ситуации: можно ли повторить операцию, вернуть временную ошибку, использовать резервный экземпляр или продолжить работу в ограниченном режиме. Конкретные механизмы зависят от требований системы.

Цифра доступности всегда имеет контекст

Фраза «99.9% availability» сама по себе неполна. Важно понимать, за какой период она считается, какой запрос считается успешным, какие компоненты входят в измерение и что видит конечный пользователь.

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