Jump to content

Схема проектирования автоматического выключателя

Автоматический выключатель — это шаблон проектирования, используемый при разработке программного обеспечения . Он используется для обнаружения сбоев и воплощает в себе логику предотвращения постоянного повторения сбоя во время обслуживания, временного сбоя внешней системы или непредвиденных системных проблем. Схема автоматического выключателя предотвращает каскадные сбои, особенно в распределенных системах . [1]

Шаблон автоматического выключателя следует использовать вместе с другими шаблонами, такими как повтор, откат и шаблон тайм-аута. Это помогает системе быть более отказоустойчивой . [2]

Обычное использование

[ редактировать ]

Предположим, что приложение подключается к базе данных 100 раз в секунду, и база данных выходит из строя. Разработчик приложения не хочет, чтобы одна и та же ошибка повторялась постоянно. Они также хотят быстро и корректно обработать ошибку, не дожидаясь истечения времени ожидания TCP-соединения .

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

Автоматический выключатель обнаруживает сбои и не позволяет приложению попытаться выполнить действие, которое обречено на неудачу (до тех пор, пока не будет безопасно повторить попытку).

Выполнение

[ редактировать ]

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

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

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

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

Влияние на производительность

[ редактировать ]

Хотя можно с уверенностью сказать, что преимущества перевешивают последствия, внедрение Circuit Breaker отрицательно повлияет на объем памяти, сложность приложения и вычислительные затраты выполняющегося приложения. Это связано с тем, что он добавляет дополнительный код в путь выполнения для проверки состояния схемы. Это можно увидеть в приведенном ниже примере PHP, где проверка состояния базы данных APC требует нескольких дополнительных циклов. Кроме того, запуск кода автоматического выключателя сам по себе потребляет ресурсы системы, в которой он работает, в результате чего остается меньше мощности для выполнения «реальных» приложений. [ почему? ]

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

Различные состояния автоматического выключателя

[ редактировать ]
  • Закрыто
  • Открыть
  • Полуоткрытый

Закрытое состояние

[ редактировать ]

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

Замкнутое состояние автоматического выключателя

Открытое состояние

[ редактировать ]

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

Открытое состояние автоматического выключателя

Полуоткрытое состояние

[ редактировать ]

В этом состоянии автоматический выключатель пропускает ограниченное количество запросов от микросервиса и вызывает операцию. Если запросы успешны, то автоматический выключатель перейдет во включенное состояние. Однако, если запросы по-прежнему терпят неудачу, он возвращается в состояние «Открыто».

Полуоткрытое состояние автоматического выключателя

Пример реализации

[ редактировать ]

Ниже приведен пример реализации на PHP. Доказательство концепции сохраняет статус сервера MySQL в кэше общей памяти (кэш пользователя APC).

Проверять

[ редактировать ]

Следующий скрипт можно запускать через заданный интервал через crontab .

$mysqli = new mysqli("localhost", "username", "password");

if ($mysqli->connect_error) {
    apcu_add("dbStatus", "down");
} else {
    apcu_add("dbStatus", "up");
    $mysqli->close();
}

Использование в приложении

[ редактировать ]
if (apcu_fetch("dbStatus") === "down") {
    echo "The database server is currently not available. Please try again in a minute.";
    exit;
}

$mysqli = new mysqli("localhost", "username", "password", "database");
$result = $mysqli->query("SELECT * FROM table");
  1. ^ Машинное обучение в микросервисах. Создание микросервисной архитектуры для решений машинного обучения . Пакт Паблишинг. 2023. ISBN  9781804612149 .
  2. ^ Нативные микросервисы Kubernetes с Quarkus и MicroProfile . Мэннинг. 2022. ISBN  9781638357155 .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0c9b54356c2d447e0c85d42e8cdf139d__1716721560
URL1:https://arc.ask3.ru/arc/aa/0c/9d/0c9b54356c2d447e0c85d42e8cdf139d.html
Заголовок, (Title) документа по адресу, URL1:
Circuit breaker design pattern - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)