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

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

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

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

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

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

Выполнение

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

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

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

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

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

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

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

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

PHP

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

Проверять

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

$ mysqli = новый mysqli('localhost', 'Пользователь', 'проходить');если ($ mysqli->connect_error) {    apc_store('dbStatus', 'вниз');} еще {    apc_store('dbStatus', 'вверх');    $ mysqli->Закрыть();}

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

если (apc_fetch('dbStatus') === 'вниз') {    эхо 'Сервер базы данных в настоящее время недоступен. Пожалуйста, попробуйте еще раз через минуту ».;    выход;}$ mysqli = новый mysqli('localhost', 'Пользователь', 'проходить', 'база данных');$ результат = $ mysqli->запрос('ВЫБРАТЬ * ИЗ таблицы');

внешняя ссылка