17

我正在尝试使用 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. 在 3 次并发故障后打开电路。

通过文档链接

有人可以回答吗?

 

 

4

2 回答 2

54

Hystrix 断路器的工作原理: Hystrix 不提供在给定次数的故障后断开的断路器。如果出现以下情况,Hystrix 电路将断开:

在一个持续时间跨度内metrics.rollingStats.timeInMilliseconds,导致异常处理的动作的百分比超过errorThresholdPercentage,前提是在该时间跨度内通过电路的动作数量至少为requestVolumeThreshold


什么是 requestVolumeThreshold? 是在电路完全计算故障率百分比之前必须满足(在滚动窗口内)通过电路的呼叫requestVolumeThreshold(数量)的最小阈值。仅当满足此最小音量(在每个时间窗口中)时,电路才会将您的呼叫的失败比例与您配置的比例进行比较。 errorThresholdPercentage

想象一下,没有这样的最小体积通过电路阈值。想象一下时间窗口中的第一次调用错误。您将有 1 个调用错误,= 100% 失败率,高于您设置的 50% 阈值。所以电路会立即断开。

requestVolumeThreshold存在以便不会发生这种情况。这实际上是说,通过您的电路的错误率在统计上并不显着(并且不会与之比较errorThresholdPercentage),直到至少requestVolumeThreshold在每个时间窗口中都收到了呼叫。

于 2016-07-22T11:46:29.930 回答
1

我对 hystrix 比较陌生,但我想我可以帮助你。

通常hystrix.command.default.circuitBreaker.requestVolumeThreshold是一个属性,它设置滚动窗口中将使电路跳闸的最小请求数,其默认值为 20,其值可以在属性文件或我们的@HystrixCommand注释方法中更改。

例如,如果该属性值为 20,那么如果在滚动窗口(例如 10 秒的窗口)中仅接收到 19 个请求,即使所有 19 个请求都失败,电路也不会跳闸。如果失败的请求值达到 20,则即使调用成功,也会打开电路并将相应的调用发送到 fallback,直到休眠窗口时间段结束。

睡眠窗口时间段设置在电路跳闸后拒绝请求的时间量,然后再允许尝试确定电路是否应再次闭合。它的值默认为 5000 毫秒。这可以通过覆盖circuitBreaker.sleepWindowInMilliseconds属性来更改。

您可以在此处找到所有属性及其描述。

于 2016-10-31T07:35:50.117 回答