Как работают автоматические выключатели Hystrix

Spring Cloud

предисловие

20181130, Hystrix больше не поддерживается, вот запись обучения. Он был завершен только 1 декабря, а ноябрьское обещание не выполнено, запись о пожертвовании переместилась выше.no.OSCHINA.net/floor/tweet…

Что такое Хайстрикс

Hystrix — это библиотека классов Java, обеспечивающая отказоустойчивость сервиса.

возникшие проблемы

  • Время ответа на запрос слишком велико, в результате чего ресурс не освобождается вовремя. Кратковременные огромные запросы вызывают истощение ресурсов и в конечном итоге приводят к тому, что система не отвечает.
  • Сбой одной службы службы в системе влияет на другие системы и вызывает каскадные сбои системы.
  • Если запрос не ограничен или не пакетирован, система будет постепенно замедляться и перестанет отвечать на запросы. Примечание (ресурсы могут быть, потоки, сетевые соединения, память и т.д.)

Решения Хайстрикс

  • Отменить подключение к внешней службе после тайм-аута; освободить системные ресурсы и заставить систему реагировать Использование потоков и сети ограничено пулами потоков и семафорами.
  • Когда ресурсы потребляются в соответствии с их ограничениями, последующие запросы будут завершаться ошибкой, а не ставиться в очередь.
  • Когда происходит сбой, при необходимости можно использовать откат;
  • Можно использовать пакетные запросы; более эффективное использование локальных и внешних ресурсов службы

процесс работы

image

Официальная схема работы состоит из 9 следующих шагов, и логика проста.

  1. Создание объектов HystrixCommand и объектов HystrixObservableCommand
  2. выполнение команды
  3. Есть ли результат в кеше
  4. Автоматический выключатель разомкнут?
  5. Отклоняет ли семафор/пул потоков
  6. HystrixObservableCommand.construct() или HystrixCommand.run()
  7. Рассчитать исправность автоматического выключателя
  8. резервная обработка
  9. вернуть успешный ответ

Принцип автоматического выключателя

image

Принцип объясняется следующим образом:

  1. Допустим, объем запроса достигает определенного порога (HystrixCommandProperties.circuitBreakerRequestVolumeThreshold())
  2. Предполагая, что процент ошибок превышает пороговый процент ошибок (HystrixCommandProperties.circuitBreakerErrorThresholdPercentage())
  3. Удовлетворите одно, разомкните автоматический выключатель.
  4. При замыкании он открывается, замыкая все запросы, проходящие через это замыкание.
  5. По истечении периода времени (HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds()) разрешается прохождение запроса (автоматический выключатель в это время наполовину разомкнут), если запрос выполнен успешно, замкните его накоротко и установите на размыкание, в противном случае установите автоматический выключатель, чтобы замкнуть, начать с 1 и продолжить снова судья.

изоляция зависимостей

Hystrix использует «режим переборки». Пул потоков используется по умолчанию. Создайте независимый пул потоков для каждой зависимой службы, чтобы в случае сбоя зависимой службы затрагивался только вызов зависимой службы, а другие службы не перетаскивались вниз. Как показано ниже:

image

  • Преимущества изоляции пула потоков

  • Когда служба восстанавливается после сбоя, пул потоков будет очищен, и служба будет немедленно восстановлена, а уровень контейнера будет сильно заполнен.

  • Такие показатели, как количество сбоев, задержек, тайм-аутов и отказов, быстро реагируют на проблемы.В сочетании с Spring Cloud можно добиться динамического обновления.

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

запрос на вытягивание

Решены проблемы занятости связи и потребления соединения. Объединяйте несколько запросов в течение короткого промежутка времени (по умолчанию 10 мс) и отправляйте запросы пакетами. недостаток:

  • Вызывает задержку одного ответа. Если один ответ равен 5 мс, временное окно по умолчанию равно 10 мс, а ответ на этот запрос становится 15 мс.
  • Пользователям необходимо реализовать пакетные службы и обработку, что увеличивает некоторые расходы. Схематическая диаграмма слияния запросов выглядит следующим образом:
    image