Найти тему
81 подписчик

🚀 Spring Совет 🚀


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

Но иногда могут быть серьезные проблемы, такие как деградация служб или полный отказ служб сам по себе. Бессмысленно продолжать повторные попытки в таких случаях. В этом случае может быть полезна модель автоматического выключателя (Circuit Breaker).

Если вы используете API шлюзы или прокси–серверы вроде Envoy, то это может быть достигнуто на самом прокси–уровне.

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

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

Когда стоит использовать этот паттерн

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

Когда не стоит использовать этот паттерн

Когда вы имеете дело с локальными зависимостями — автоматический выключатель может создать накладные расходы.

Reselience4J, позволяет реализовывать этот шаблон очень легко.
🔥


🚀 Spring Совет 🚀  Распределенные системы должны проектироваться с учетом отказов. В настоящее время в мире приняты микросервисы, и эти сервисы в основном зависят от других удаленных сервисов.
1 минута