Comments 7
Б.Лирическое отступление: для меня долгое время было странным, почему состояние называется OPEN. Ведь логичнее было бы назвать CLOSED или BLOCKED — CB же перекрывает доступ. Но если представить, что CB раскрывается, как зонтик, чтобы защитить сервис, всё встаёт на места. Представьте ассистента HR, который встаёт поперёк двери и раскрывает зонтик перед собой…
какое гуманитарное объяснение :) circuit breaker - это же электрический предохранитель! контакт разомкнут (OPEN) - ток не идёт
Не обязательно именно предохранитель. А вообще любая штука, которая умеет разрывать цель — в том числе, обычный настенный выключатель, с помощью которого включается/выключается свет в комнате.
Если бы автор знал основы электротехники и как изображаются выключатели на схеме цепи, то не удивлялся бы тому, что открытое (OPEN) положение разрывает цепь. Про зонтик забавно, да.
Ох, ну и мешанина. Ну и главное вот тут:
особенно в микросервисных системах.
Представим сервис А, который обращается к сервису Б
При чём здесь микросервисы вообще? Или разъясните что вы подразумеваете вод словом “сервис”? Иначе, возникает ощущение, что вы смешали в кучу все разношёрстные знания и с уверенностью в понимании вопроса написали с помощью LLM сей пассаж.
спасибо за вопрос, здесь под сервисом имеем ввиду микросервис
Я ведь не просто так спросил. Дело в том, что если ваши микросервисы общаются напрямую друг с другом - это уже не микросервисы, а распределённый монолит. И я здесь не придираюсь к формулировкам, а имею в виду фундаментальные отличия и ошибки. Микросервисы же друг с другом общаться не должны, и это уже давно всё пережёвано. Для этого существуют различные подходы и паттерны, в том числе оркестрация и событийная модель. И всё это прикрыто observability, которое позволяет контролировать состояние системы и не допускать каскадных падений. В случае распределённого монолита, когда сервисы общаются друг с другом напрямую или даже через некого посредника, применяя Circuit Breaker - создаёт лишь иллюзию надёжности. Почитайте об этом, про это много уже написано и много шишек набито. Я не буду тут писать целую статью. Успехов!
504 — это Gateway Timeout от прокси или от самого сервиса(но он должен нам ответить в этом случае), а клиентский таймаут к сервису Б — обычно SocketTimeoutException, не HTTP-код. По-хорошему нужно отлавливать и то, и другое.
Но конкретно SocketTimeoutException в большей мере показывает недоступность внешних систем из сервиса
Уважаемый(е) автор(ы)!
Когда готовите текст статьи с помощью LLM, перечитывайте, пожалуйста, что она понаписала.
Сервис «Портал» — получает информацию о наличии отпусков
Сервис «Отпусков» — два разных микросервиса, взаимодействующие через REST API
Ну хреново же сформулировано.
Circuit Breaker в микросервисах: как защитить систему от каскадных отказов