Hystrix 配置
Posted
技术标签:
【中文标题】Hystrix 配置【英文标题】:Hystrix Configuration 【发布时间】:2016-11-26 05:28:49 【问题描述】:我正在尝试使用 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
有疑问
-
3次故障后是否表示断路
或
在 3 次并发故障后打开电路。
浏览文档link
有人可以回答吗?
【问题讨论】:
【参考方案1】:我对 hystrix 比较陌生,但我想我可以帮助你。
一般hystrix.command.default.circuitBreaker.requestVolumeThreshold
是一个属性,它在滚动窗口中设置最小请求数,它将使电路跳闸,其默认值为 20,其值可以在属性文件中更改或在我们的 @HystrixCommand
注释方法中。
例如,如果该属性值为 20,那么如果在 滚动窗口(例如 10 秒的窗口)中仅收到 19 个请求,即使所有 19 个请求都失败,电路也不会跳闸.如果失败的请求值达到20,则即使调用成功,也会打开电路并将相应的调用发送到fallback,直到休眠窗口时间段结束。
睡眠窗口时间段设置在电路跳闸后拒绝请求的时间量,然后再允许尝试再次确定电路是否应再次闭合。它的值默认为 5000 毫秒。这可以通过覆盖circuitBreaker.sleepWindowInMilliseconds
属性来更改。
您可以找到所有属性及其描述here。
【讨论】:
你可能想看看:github.com/Netflix/Hystrix/wiki/…。您的答案不正确,没有考虑errorThresholdPercentage
。希望这可以帮助。见github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/… 和github.com/Netflix/Hystrix/blob/master/hystrix-core/src/main/…
有什么方法可以验证这些配置属性以确保这些属性真正应用于配置HystrixCommand?【参考方案2】:
Hystrix 断路器的工作原理: Hystrix 不提供在给定次数的故障后断开的断路器。如果出现以下情况,Hystrix 电路将断开:
在持续时间
metrics.rollingStats.timeInMilliseconds
的时间跨度内,导致处理异常的操作百分比超过errorThresholdPercentage
,前提是该时间跨度内通过电路的操作数至少为requestVolumeThreshold
什么是 requestVolumeThreshold?
requestVolumeThreshold
是在电路完全计算失败率百分比之前必须满足(在滚动窗口内)通过电路的调用数量(数量)的最小阈值。只有当这个最小音量(在每个时间窗口中)已经满足时,电路才会将您的呼叫的失败比例与您配置的errorThresholdPercentage
进行比较。
想象一下,没有这样的通过电路的最小体积阈值。想象一下时间窗口中的第一次调用错误。您将有 1 个呼叫中的 1 个错误,= 100% 失败率,高于您设置的 50% 阈值。所以电路会立即断开。
requestVolumeThreshold
存在,因此不会发生这种情况。这实际上是说,在每个时间窗口中至少收到 requestVolumeThreshold
呼叫之前,通过您的电路的错误率并不具有统计意义(并且不会与 errorThresholdPercentage
进行比较)。
【讨论】:
有点与滚动窗口混淆。你能解释一下吗?根据我的配置电路应该在3次故障后打开?不是吗? 请参阅github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker,了解有关断路器工作原理的更多详细信息。您配置的 3 不是要打破的失败次数。 Hystrix 断路器在 percentage 的错误(您配置的errorThresholdPercentage=50
%)上中断,在给定时间窗口内的调用中考虑。 requestVolumeThreshold=3
是(根据我的原始答案)呼叫的最小音量阈值,必须在同一时间窗口内满足,才能使 %age 计算具有统计意义。
请参阅github.com/Netflix/Hystrix/wiki/… 了解如何配置时间窗口。
对于按相同原理运行的断路器,简明扼要地解释一下,您也可以在此处查看:github.com/App-vNext/Polly/wiki/… 虽然使用的配置术语不同(而且它是 .NET 而非 Java 产品),但操作原理是一样的。 Polly 页面还提供了一些关于各种配置参数如何交互的解释(例如,如果将它们设置得太高、太低等会发生什么)
@mountain traveller:我的第一个请求错误本身就是调用我的后备方法。我力图明确配置“requestVolumeThreshold”。你能帮助我吗?我刚刚关注了spring.io/guides/gs/circuit-breaker以上是关于Hystrix 配置的主要内容,如果未能解决你的问题,请参考以下文章