2016-07-22 13 views
5

Я пытаюсь реализовать hystrix для своего приложения, используя hystrix-javanica.Конфигурация Hystrix

Я устанавливал hystrix-configuration.properties, как показано ниже

hystrix.command.default.execution.isolation.strategy=SEMAPHORE 
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000  
hystrix.command.default.fallback.enabled=true 
hystrix.command.default.circuitBreaker.enabled=true 
hystrix.command.default.circuitBreaker.requestVolumeThreshold=3  
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=50000 
hystrix.command.default.circuitBreaker.errorThresholdPercentage=50 

шаблона короткого замыкания работает нормально, но у меня есть сомнение в этом hystrix.command.default.circuitBreaker.requestVolumeThreshold=3

  1. ли это о том, открыто после того, как цепи 3 сбои или
  2. Открыть схему после трех одновременных сбоев.

Унесенные через документацию

Может кто-нибудь ответить?

ответ

19

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

в течение промежутка времени продолжительности metrics.rollingStats.timeInMilliseconds, процент действий, приводящих к перекачиваемому исключению превышает errorThresholdPercentage, при условии также, что число действий через цепь в промежутке времени, по крайней мере requestVolumeThreshold


Что такое requestVolumeThreshold? requestVolumeThreshold - минимальный порог для тома (количество) вызовов через схему, которая должна быть выполнена (в пределах окна качения), прежде чем схема рассчитывает процентную частоту отказа вообще. Только когда этот минимальный объем (в каждом временном окне) будет выполнен, будет ли схема сравнять долю сбоев ваших вызовов с настроенным вами errorThresholdPercentage.

Представьте, что такой минимальный порог минимального объема и контура не существовало. Представьте первый вызов в ошибках временного окна. У вас было бы 1 из 1 звонков, являющихся ошибкой, = 100% отказов, что выше порога 50%, установленного вами. Таким образом, цепь разобьется немедленно.

requestVolumeThreshold существует, так что этого не происходит. Эффективно говорят, что частота ошибок в вашей схеме не равна статистически значимым (и не будет сравниваться с errorThresholdPercentage), пока не будет получено по крайней мере requestVolumeThreshold звонков в каждом временном окне.

+0

немного запутались с прокатным окном. Не могли бы вы объяснить немного больше? В соответствии с моей конфигурацией схема должна быть открыта после 3 отказов? Не так ли? – Jay

+0

См. Https://github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker для более подробной информации о том, как работает автоматический выключатель. 3, которые вы сконфигурировали, - это не количество сбоев, на которых нужно сломать. Выключатели Hystrix разбиваются на _percentage_ ошибок («errorThresholdPercentage = 50'%, которые вы сконфигурировали), которые рассматриваются во всех вызовах в заданном временном окне. «RequestVolumeThreshold = 3» (по моему первоначальному ответу) пороговое значение минимального объема вызовов, которое должно выполняться в одном и том же временном окне, чтобы статистические оценки% age были статистически значимыми. –

+0

См. Https://github.com/Netflix/Hystrix/wiki/Configuration#metricsrollingstatstimeinmilliseconds о том, как настроены временные окна. –

-1

я довольно новый для Hystrix, но я предполагаю, что я могу вам помочь, В общем hystrix.command.default.circuitBreaker.requestVolumeThreshold является свойством, которое устанавливает минимальное количество запросов в прокатном окне отключит и его значение по умолчанию равно 20, и его значение может быть изменено в файле свойств или в нашем аннотированном методе @HystrixCommand.

Например, если это значение свойства равно 20, то если в окне прокатки получено только 19 запросов (скажем, окно 10 секунд), схема не отключится, даже если все 19 сработало. если недопустимое значение запроса достигает 20, тогда схема будет открыта, и соответствующие вызовы будут отправлены обратно, даже если вызов завершится успешно, до завершения периода ожидания спального окна.

период времени спального окна устанавливает время после отключения цепи, чтобы отклонить запросы, прежде чем разрешать попытки снова определить, должна ли цепь снова быть закрыта. Значение по умолчанию установлено на уровне 5000 миллисекунд, это можно изменить путем переопределения circuitBreaker.sleepWindowInMilliseconds Недвижимость.

вы можете найти все свойства и его описание here

+0

Вы можете посмотреть: https://github.com/Netflix/Hystrix/wiki/Configuration#circuitbreakererrorthresholdpercentage. Ваш ответ неверен, не принимая во внимание «errorThresholdPercentage». Надеюсь это поможет. См. Https://github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L191 и https://github.com/Netflix/Hystrix. /blob/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCircuitBreaker.java#L196 –

+0

Есть ли способ проверить эти свойства конфигурации, чтобы убедиться, что эти свойства действительно применяются для настройки HystrixCommand? – pijushcse