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

Объясните концепцию автоматического выключателя и как ее реализовать?

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

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

Вот шаги для реализации прерывателя цепи в архитектуре микросервисов:

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

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

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

Реализуйте механизм отключения автоматического выключателя, например таймер или счетчик, отслеживающий количество сбоев.

Реализуйте механизм сброса автоматического выключателя, например, таймер или ручной сброс.

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

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

Какую библиотеку мы можем использовать для ее реализации?

Существует несколько библиотек и сред для реализации автоматических выключателей на различных языках программирования. Некоторые из популярных включают в себя:

Hystrix (Java): библиотека, разработанная Netflix. Это одна из самых популярных реализаций автоматических выключателей для Java.

Resilience4j (Java): легкая и простая в использовании библиотека для обеспечения отказоустойчивости в Java.

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

Ruby Circuit Breaker (Ruby): библиотека для Ruby, реализующая шаблон прерывателя цепи.

Go-Hystrix (Go): реализация библиотеки Hystrix на языке Go, предоставляющая функции прерывателя цепи для приложений Go.

Elixir Circuit Breaker (Эликсир): реализация шаблона прерывателя цепи для приложений Elixir.

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

Объясните аннотации Spring-Boot для Circuit-Breaker

В Spring Boot автоматические выключатели можно реализовать с помощью библиотеки spring-cloud-starter-circuit-breaker, которая обеспечивает поддержку нескольких различных реализаций автоматических выключателей, включая Hystrix.

Чтобы использовать прерыватель цепи в Spring Boot, вы можете использовать следующие аннотации:

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

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

Вот пример использования аннотаций @HystrixCommand и @HystrixProperty для реализации прерывателя цепи в Spring Boot:

@Service
public class MyService {
@HystrixCommand(fallbackMethod = "fallback", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000"),
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "5"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000")
})
public String callDependency() {
// Call the dependent service
}
public String fallback() {
// Return a fallback response
}
}

Моя предыдущая серия статей-1.



Если вам нужна помощь в Spring Boot Interview. вы можете загрузить этот бесплатный PDF-файл для подготовки.

Grokking the Spring Boot Interview [бесплатный пример]: нажмите здесь

Вы можете получить свою копию здесь — Интервью Grokking the Spring Boot:

подпишитесь на меня в Твиттере