Облачные паттерны
Ниже будут представлены паттерны, которые способствуют более устойчивой работе облачных сервисов. Как правило, они дополняют друг друга, а не работают изолированно. Их комбинации позволяют обеспечивать высокую доступность сервисов, но требуют дополнительных ресурсов.
Circuit Breaker
Данный паттерн служит в качестве средства для реакций на ошибочные состояния. Реакции могут различаться, начиная с полной остановки и выдачи ошибки, заканчивая перенаправлением на другой сервис.
Принцип работы
Для контроля паттерн использует 3 состояния (необходимо рассматривать названия состояний с точки зрения механизма блокировки):
Closed- механизм блокировки Circuit Breaker пассивен. Это нормальное состояние компонентов, при котором они взаимодействуют без ошибок и в допустимых рамках. Нарушение состояния покоя, приводит к открытию механизма блокировок (перевод в состояниеOpened).Opened- механизм блокировки Circuit Breaker активирован. Это состояние говорит о том, что ранее произошла ошибка или выход за допустимые границы и компонентам не удалось нормально взаимодействовать. С целью предотвращения еще больших проблем, взаимодействие между компонентами временно прекращается. Данное состояние длится определенное время, в течении которого регулярно производится проверка возможности возобновления нормального взаимодействия (переход в состояние Half-Open).- Half-Open - состояние, при котором компоненты производят попытки взаимодействия для понимания, может ли работа компонентов быть возобновлена (возврат в состояние
Closed). Результатом тестирования будет либо перевод механизма блокировки в состояниеClosed(считается, что проблемы устранены), либо перевод возврат в состояниеOpened(считается, что проблемы все еще остаются; делается для снижения нагрузки на компоненты).
Этот подход очень похож на работу тепловых подстанций, которые контролируют давление в системе клапанами и открывают или закрывают краны для подачи теплоносителя. Схематически, это может быть представлено так:
Алгоритмы
Существует набор возможных алгоритмов для активации механизма блокировки Circuit Breaker. Выбор того или иного алгоритма зависит от контекста и области применения. Все они исползуют какой-то фактор (количественный показатель), который сигнализирует на необходимость перевода механизма блокировки в то или иное состояние.
Error threshold
Количесто ошибок за временной интервал. Например:
Closed -> Openedесли сервис выдал 10 ошибок в течении 10 секунд;Opened -> Half-Openedпо прошествии 10 секунд;- проверки
Half-Openedв течении 10 секунд, 10% от стандартного взаимодействия; Half-Opened -> Opened1 и более ошибок в рамках состояния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 и обратно будет очень высокой.