Основы дизайна систем: доступность системы

Инженеры-программисты стремятся создавать надежные системы. Надежная система - это система, которая неизменно удовлетворяет потребности пользователя всякий раз, когда он стремится удовлетворить эту потребность. Ключевым компонентом этой надежности является доступность (Availability).

Под доступностью полезно понимать отказоустойчивость системы. Если система достаточно устойчива, чтобы обрабатывать отказы в сети, базе данных, серверах и т. д., то ее обычно можно рассматривать как отказоустойчивую систему (fault-tolerant system), что делает ее доступной.

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

Количественная оценка доступности

Чтобы количественно оценить доступность системы, мы вычисляем процент времени, в течение которого основные функции и операции системы доступны (время безотказной работы) в заданном временном окне.

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

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

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

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

Коммерческая причина высокой доступности заключается просто в том, что любой простой на сайте приведет к потере денег. Кроме того, это может быть очень плохо для репутации, например, если услуга - это услуга, используемая другими предприятиями для предоставления услуг. Если AWS S3 выйдет из строя, пострадает множество компаний, в том числе Netflix, а это плохо.

Так что время безотказной работы чрезвычайно важно для успеха. Стоит помнить, что показатели коммерческой доступности рассчитываются на основе годовой доступности, поэтому время простоя 0,1% (т.е. доступность 99,9%) составляет 8,77 часа в год!

Следовательно, время безотказной работы очень хорошее. Обычно можно увидеть такие вещи, как время безотказной работы 99,99% (52,6 минуты простоя в год). Вот почему сейчас принято называть время безотказной работы «девятками» - количеством девяток в гарантии безотказной работы.

В современном мире это неприемлемо для крупномасштабных или критически важных услуг. Вот почему в наши дни «пять девяток» считается идеальным стандартом доступности, потому что это означает простоя чуть более 5 минут в год.

SLA

Чтобы сделать онлайн-услуги конкурентоспособными и соответствовать ожиданиям рынка, поставщики онлайн-услуг обычно предлагают соглашения об уровне обслуживания/гарантии. Это набор показателей гарантированного уровня обслуживания. 99,999% времени безотказной работы является одним из таких показателей и часто предлагается в рамках премиальных подписок.

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

Во многих случаях невыполнение SLA дает клиенту право на кредит или другую форму компенсации за невыполнение поставщиком этих гарантий.

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

Проектирование системы высокой доступности

При проектировании системы высокой доступности (HA, high availability) вам необходимо уменьшить или устранить "единые точки отказа". Единственная точка отказа - это элемент в системе, который является единственным элементом, который может вызвать нежелательную потерю доступности.

Вы устраняете единые точки отказа, создавая в системе "избыточность". Избыточность - это в основном создание одной или нескольких альтернатив (т. е. резервных копий) элемента, который имеет решающее значение для высокой доступности.

Итак, если вашему приложению требуется, чтобы пользователи прошли проверку подлинности для его использования, и есть только одна служба проверки подлинности и серверная часть, и это не удается, то, поскольку это единственная точка отказа, ваша система больше не может использоваться. Имея две или более служб, которые могут обрабатывать аутентификацию, вы добавляете избыточность и устраняете (или уменьшаете) единые точки отказа.

Следовательно, вам необходимо понять и разобрать вашу систему на все ее части. Определите, какие из них могут вызвать единичные точки отказа, какие из них не терпят таких отказов, а какие части могут их терпеть. Поскольку разработка высокой доступности (HA) требует компромиссов, некоторые из этих компромиссов могут быть дорогостоящими с точки зрения времени, денег и ресурсов.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Хэш-таблица: разрешение коллизий

Нормальные формы, пример нормализации в базе данных