Архитектура: Облачные паттерны

Облачные паттерны


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

Circuit Breaker

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

Принцип работы

Для контроля паттерн использует 3 состояния (необходимо рассматривать названия состояний с точки зрения механизма блокировки):

  1. Closed - механизм блокировки Circuit Breaker пассивен. Это нормальное состояние компонентов, при котором они взаимодействуют без ошибок и в допустимых рамках. Нарушение состояния покоя, приводит к открытию механизма блокировок (перевод в состояние Opened).
  2. Opened - механизм блокировки Circuit Breaker активирован. Это состояние говорит о том, что ранее произошла ошибка или выход за допустимые границы и компонентам не удалось нормально взаимодействовать. С целью предотвращения еще больших проблем, взаимодействие между компонентами временно прекращается. Данное состояние длится определенное время, в течении которого регулярно производится проверка возможности возобновления нормального взаимодействия (переход в состояние Half-Open).
  3. Half-Open - состояние, при котором компоненты производят попытки взаимодействия для понимания, может ли работа компонентов быть возобновлена (возврат в состояние Closed). Результатом тестирования будет либо перевод механизма блокировки в состояние Closed (считается, что проблемы устранены), либо перевод возврат в состояние Opened (считается, что проблемы все еще остаются; делается для снижения нагрузки на компоненты).

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

Алгоритмы

Существует набор возможных алгоритмов для активации механизма блокировки Circuit Breaker. Выбор того или иного алгоритма зависит от контекста и области применения. Все они исползуют какой-то фактор (количественный показатель), который сигнализирует на необходимость перевода механизма блокировки в то или иное состояние.

Error threshold

Количесто ошибок за временной интервал. Например:

  • Closed -> Opened если сервис выдал 10 ошибок в течении 10 секунд;
  • Opened -> Half-Opened по прошествии 10 секунд;
  • проверки Half-Opened в течении 10 секунд, 10% от стандартного взаимодействия;
  • Half-Opened -> Opened 1 и более ошибок в рамках состояния Half-Opened;
  • Half-Opened -> Closed в рамках проверки, ошибок не обнаружено.

Error rate threshold

Аналогичен Error threshold, но проверяет процентный показатель ошибок, а не количественный.

Response time evaluation

Среднее время отклика за пролонгированный период. Исползуется, например, для контроля производительности. Пример:

  • Closed -> Opened если среднее время ответа от сервиса более 100 мс. и эффект наблюдается в течении 10 секунд (пролонгированно);
  • Opened -> Half-Opened по прошествии 10 секунд;
  • проверки Half-Opened в течении 10 секунд, 10% от стандартного взаимодействия;
  • Half-Opened -> Opened среднее время отклика превышает 100 мс. в течении действия состояния проверки Half-Opened;
  • Half-Opened -> Closed среднее время отклика в период проверки составило менее 100мс.

Комбинация

Алгоритмы могут комбинироваться в различных вариациях.

AI для Circuit Breaker

Алгоритмы AI паредоставляют более гибкие механизмы и, даже, позволяют прогнозировать сбои и заранее. Это дает возможность предотвращать возможные ошибки еще до фактического их возникновения.

Адаптивность

Circuit Breaker может быть сконфигурирован динамическим, меняющимся в зависимости от окружения. Например, в могут быть сконфигурированы различные правила под различное время и дату. Так, например, в известно, что в рождественские праздники сервис будет нагружен не менее чем на 30% выше нормы - в таком случае, механизм блокировки может ужесточить правила блокировки, и параллельно увеличить количество мощностей на требуемый период.

Сложности с Circuit Breaker

Для Circuit Breaker самым сложным является определение порогов, за которыми наступает переход из одного состояния в другое. Для перехода Closed -> Opened границы определяются техническими требованиями, например, временем отклика, возвращаемыми кодами ошибок и т.д., т.е. чем-то, что явно говорит о наличии ошибок. Состояние Opened зависит от многих факторов, например, среднее время на поднятие резервных мощностей, задержка в реакции команды сопровождения и т.д. Наиважнейшее и самое сложное - правила для перехода из Opened -> Closed, поскольку он указывает на то жив ли сервис или нет. Если значение будет сконфигурировано неправильно, стоимость переводов между Opened -> Closed и обратно будет очень высокой.

 Comments
Comment plugin failed to load
Loading comment plugin