← Назад ко всем вопросам

Что такое Circuit Breaker и зачем он нужен

1️⃣ Как кратко ответить

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

2️⃣ Подробное объяснение темы

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

Зачем нужен Circuit Breaker

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

Как работает Circuit Breaker

Circuit Breaker работает по аналогии с электрическим предохранителем. Он имеет три состояния:

  1. Closed (Закрытое): В этом состоянии все вызовы проходят к целевому сервису. Если количество ошибок превышает заданный порог, Circuit Breaker переходит в состояние Open.

  2. Open (Открытое): В этом состоянии вызовы к целевому сервису блокируются, и сразу возвращается ошибка. Это позволяет избежать перегрузки сервиса, который и так не работает должным образом. Через определенный интервал времени Circuit Breaker переходит в состояние Half-Open.

  3. Half-Open (Полуоткрытое): В этом состоянии Circuit Breaker позволяет выполнить ограниченное количество вызовов к целевому сервису. Если эти вызовы успешны, Circuit Breaker возвращается в состояние Closed. Если же они продолжают завершаться ошибками, он снова переходит в состояние Open.

Пример использования Circuit Breaker

Рассмотрим пример на Java с использованием библиотеки Resilience4j, которая предоставляет реализацию Circuit Breaker.

import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import java.time.Duration;
​
public class CircuitBreakerExample {
​
    public static void main(String[] args) {
        // Создаем конфигурацию Circuit Breaker
        CircuitBreakerConfig config = CircuitBreakerConfig.custom()
            .failureRateThreshold(50) // Порог отказов в процентах
            .waitDurationInOpenState(Duration.ofSeconds(30)) // Время ожидания в открытом состоянии
            .slidingWindowSize(10) // Размер скользящего окна для подсчета ошибок
            .build();
​
        // Регистрируем Circuit Breaker с заданной конфигурацией
        CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(config);
        CircuitBreaker circuitBreaker = registry.circuitBreaker("myCircuitBreaker");
​
        // Пример вызова защищенного Circuit Breaker
        try {
            String result = circuitBreaker.executeSupplier(() -> {
                // Здесь выполняется вызов к удаленному сервису
                return callRemoteService();
            });
            System.out.println("Result: " + result);
        } catch (Exception e) {
            System.out.println("Service call failed: " + e.getMessage());
        }
    }
​
    private static String callRemoteService() {
        // Имитация вызова удаленного сервиса, который может завершиться ошибкой
        throw new RuntimeException("Service not available");
    }
}
  • CircuitBreakerConfig: Создаем конфигурацию для Circuit Breaker, где задаем порог отказов, время ожидания в открытом состоянии и размер скользящего окна.
  • CircuitBreakerRegistry: Регистрируем Circuit Breaker с заданной конфигурацией.
  • executeSupplier: Используем Circuit Breaker для выполнения вызова к удаленному сервису. Если вызов завершится ошибкой, Circuit Breaker может перейти в состояние Open.

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

Тема: Микросервисы
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки