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 配置的主要内容,如果未能解决你的问题,请参考以下文章

Hystrix参数配置

Hystrix使用及其配置详解

Hystrix使用及其配置详解

Hystrix semaphore和thread隔离策略的区别及配置参考

你如何覆盖 OpenFeign 的 Hystrix 配置?

Hystrix完整配置列表