“Надежность” и “Доступность” — в чём разница?

Vitalii Filiuchkov
5 min readApr 25, 2023

--

Reliability vs. Availability: What’s The Difference?” by Noor-ul-Anam Ruqayya

Photo by Jeremy Thomas on Unsplash

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

В чём разница между надежностью и доступностью?

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

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

График, показывающий процент доступности двух сервисов

На первый взгляд кажется, что сервис А более надежен, но при более внимательном рассмотрении оказывается, что это не так. Пользователи не обращаются к каждой странице сайта равномерно. Каждый пользователь обязательно заходит на страницу входа в систему, около 90% из них посещают каталог, а страницу с настройками посещает только 30% пользователей. Учитывая это, сервис B будет восприниматься как более надежный, потому что надежность определяется на основе пользовательского опыта.

Что такое “доступность”?

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

Кроме того, вы не должны просто стремиться быть “доступными”. Сервис должен быть способен выполнять свои запланированные операции даже при изменяющихся условиях. В распределенных системах вы можете использовать chaos engineering для экспериментов с отказоустойчивостью вашего сервиса.

Как измерить доступность?

Вот как вы можете рассчитать процент доступности вашего сервиса:‍

  1. Определите общее время работы
  2. Вычтите время, в течение которого сервис был недоступен
  3. Разделите получившееся время на общее время‍

Процент доступности = (Общее время — Сумма простоев)/Общее время

“Девятки” доступности

Допустимое время простоя для различных “девяток” доступности

Как улучшить доступность услуги?

  • Развертывайте свой сервис в различных географических точках по всему миру, сокращая количество единичных точек отказа.
  • Используйте chaos engineering для экспериментов и поиска уязвимостей системы.
  • Эффективно используйте балансировщики нагрузки для перенаправления запросов.
  • Улучшите процесс управления инцидентами, чтобы сократить время простоя, вызванное инцидентами.

Что такое надежность?

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

Как измерить надежность?

Поскольку надежность — это продолжительность безотказной работы системы, мы можем измерить ее, используя метрику “Среднее время наработки на отказ” (MTBF).

  1. Посчитайте количество отказов
  2. Найдите общее время работы
  3. Разделите общее время на количество сбоев‍

Среднее время наработки на отказ (MTBF) = Общее время работы (в часах)/Количество отказов

Надежность также может быть измерена с помощью частоты отказов сервиса:

  1. Посчитайте количество отказов
  2. Найдите общее время работы
  3. Разделите количество отказов на общее время работы‍

Частота отказов = Количество отказов/Общее время работы

Имейте в виду, что, хотя эти формулы и выглядят простыми, самое сложное — определить, что же такое “сбой” для вашей системы. Поскольку надежность основана на пользовательском опыте, вам необходимо использовать такие процессы, как SLI, чтобы понять, каков приемлемый уровень обслуживания.

Как повысить надежность сервиса?

Взаимосвязь между надежностью и доступностью

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

Что такое ремонтопригодность и как она связана с доступностью и надежностью?

Ремонтопригодность — это способность сервиса сохраняться или восстанавливаться до прежнего состояния после проведения технического обслуживания. Она влияет на доступность, определяя, насколько эффективно устраняются простои. В случае инцидента обслуживаемые сервисы могут быть легко восстановлены или быстро сохранены. Ремонтопригодность может быть как проактивной, так и реактивной.

  • Проактивная ремонтопригодность предполагает создание сервиса с понятным и легко изменяемым кодом. Проактивное техническое обслуживание также включает практики, такие как тестирование и контроль качества (QA).
  • Реактивная ремонтопригодность относится к способности системы восстанавливаться после инцидента. Поскольку инциденты неизбежны, лучше всего внедрить надежный процесс реагирования на инциденты.

Надежность против инноваций

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

‍Всегда будут изменения, нестабильность и неопределенность, и именно поэтому бессмысленно стремиться к совершенству. Вы всегда должны стремиться к реалистичному и практичному времени безотказной работы (которое никогда не будет 100%). После определенного момента улучшение надежности или доступности станет незаметным для пользователей. Усилия, которые вы тратите на повышение надежности после этого момента, лучше было бы направить в другое место. Лучшие в своем классе корпоративные организации часто обеспечивают доступность на уровне 99,999%, также известную как доступность “пять девяток”, с годовым временем простоя всего 5,256 минут.‍

Процент доступности системы, гарантированный пользователям, обычно указывается в соглашении об уровне обслуживания (SLA). Лучший способ справиться с простоями — это быть готовым к любому инциденту. Наличие надежного процесса управления инцидентами и соответствующего бюджета на ошибки (допустимая ненадежность) жизненно важно для каждой организации.

--

--

Vitalii Filiuchkov

SRE Lead in Cloud Division of the largest telecom operator in Russia