Вещи ломаются. Обычно в производстве. В этой статье серия мы представим различные механизмы для создания ваших систем более устойчивыми, чтобы ваши пользователи никогда не испытывали реального отключения, несмотря на возможные проблемы под капотом.
Автоматический выключатель Имеет интересное имя, которое происходит от аналогии, найденного в физическом электрическом мире. Каждый достойный электрик признает, что игра с электричеством опасно, и что она должна установить механизмы безопасности для защиты остальной электрической сети, если одно устройство ломается. Что делают электрики? Они устанавливают предохранители . Если устройство (скажем, тостер!) Ломается и производит короткое замыкание, сильный электрический ток будет проходить через сеть, приводящую к повреждению, перегреванию и, возможно, огню. Если нет предохранителя в сети! Если есть сильный электрический ток, протекающий предохранитель или иным образом разбит электрическую цепь, останавливает ток и сохранить остальную часть сети.
Механизмы автоматического выключателя в программном обеспечении очень похожи на электрические предохранители в реальном мире. Предположим, один из ваших услуг звонит другому:
Если Сервис B перестает отвечать, сервис A будет терпеливо ждать, пока не получится время ожидания, а затем будет либо бросать исключение или вернуть сомнительные результаты. Ничего из этого не приемлемо. Нам нужно лучшее решение, которое предотвратило бы всю систему снизиться. Вот где выключаются автоматические выключатели.
Автоматический выключатель расположен между двумя услугами и вызовом сервиса пропускает через него. Если все в порядке, автоматический выключатель просто проходит через звонки. Что происходит, когда сервис B не отвечает?
Автоматический выключатель обнаружит это и вернет ошибку или альтернативный ответ. В электрических условиях автоматический выключатель будет «Откройте цепь» Отказ Более того, автоматический выключатель помнит, что сервис B падает, и тот, кто называет сервис B, будет немедленно получить ошибку без автоматического выключателя, даже проходящего запрос на службу B. Автоматический выключатель будет периодически проходить один из запросов на службу B, просто проверить Если служба B все еще вниз. Если это так, автоматический выключатель будет продолжать возвращать ошибку, даже не передавая запросы на обслуживание B.
Если, с другой стороны, Service B восстанавливает и возвращает действительный результат, автоматический выключатель обнаружит, что возвращает результат к абонеру (услуга A) и «Закройте цепь» Опять же, то есть продолжение прохождения всех запросов до обслуживания B.
Когда автоматический выключатель обнаруживает, что называется сервис, он может сделать разные вещи. Это может вернуть значимую ошибку к абонеру, но он также может вернуть «достаточно хороший» результат, который обеспечит некоторое значение для пользователя.
Давайте возьмем Пример банковской приложения Это показывает баланс счета, полученный через отдельную службу. Если этот сервис идет вниз, автоматический выключатель может вернуть последний известный баланс из кэша. Вчерашний баланс может не действовать сегодня, но сопровождается правильным сообщением, что лучше ничего.
«Уважаемый клиент, мы испытываем некоторые проблемы, получаем свой баланс на данный момент, но ваш баланс 3 часа назад был € 234,55″ Beats «Ваш баланс € NULL» любое время. Конечно, какое возвращение автоматического выключателя необходимо тщательно продумать с точки зрения бизнеса.
Автоматические выключатели действительно крутые. В Часть 2 Из этой серии мы поднимем капот и показать реализацию бетонных выключателей.
— Фото автора Rawpixel.com из Pexels.
Оригинал: «https://dev.to/ikrnic/making-systems-more-resilient-1-circuit-breaker-477e»