Hystrix 为有问题的服务实例开路?
Hystrix to open circuit for problematic service instances?
假设以下场景:
- 我让 ServiceA 在启用 Hystrix 的情况下调用 ServiceB
- 有 2 个 ServiceB 实例
- 其中一个实例面临一些非常严重的问题,其端点不断抛出错误,但另一个实例运行正常
errorThresholdPercentage
设置为 80%
- 鉴于我们有一个运行良好的服务实例,
errorThresholdPercentage
不太可能超过 80%(最多只会达到 50%)
- 这意味着只要有问题的实例是 运行,我们仍然会调用它并得到错误
有什么方法可以配置 Hystrix 以将电路向下翻转到实例级别?
无法为实例级别配置 Hystrix 断路器。
相反,您可以通过将 Ribbon 与 Hystrix 结合使用来实现它。
有一个名为 AvailabilityFilteringRule
的 IRule 用作默认值。它有自己的断路器,与 hystrix 无关。它会在某些秒内从实例列表中过滤掉有问题的实例。您可以使用以下功能区属性调整此行为。
niws.loadbalancer.default.circuitTripTimeoutFactorSeconds (default 10secs)
niws.loadbalancer.default.connectionFailureCountThreshold (default 3 failures)
niws.loadbalancer.default.circuitTripMaxTimeoutSeconds (default 30secs)
使用ribbon+hystrix,可以实现如下两级断路器。
- 服务级别断路器 - hystrix
- 实例级断路器 - 功能区(按 AvailabilityFilteringRule)
你可以找到一些关于这个的描述here
假设以下场景:
- 我让 ServiceA 在启用 Hystrix 的情况下调用 ServiceB
- 有 2 个 ServiceB 实例
- 其中一个实例面临一些非常严重的问题,其端点不断抛出错误,但另一个实例运行正常
errorThresholdPercentage
设置为 80%- 鉴于我们有一个运行良好的服务实例,
errorThresholdPercentage
不太可能超过 80%(最多只会达到 50%) - 这意味着只要有问题的实例是 运行,我们仍然会调用它并得到错误
有什么方法可以配置 Hystrix 以将电路向下翻转到实例级别?
无法为实例级别配置 Hystrix 断路器。
相反,您可以通过将 Ribbon 与 Hystrix 结合使用来实现它。
有一个名为 AvailabilityFilteringRule
的 IRule 用作默认值。它有自己的断路器,与 hystrix 无关。它会在某些秒内从实例列表中过滤掉有问题的实例。您可以使用以下功能区属性调整此行为。
niws.loadbalancer.default.circuitTripTimeoutFactorSeconds (default 10secs)
niws.loadbalancer.default.connectionFailureCountThreshold (default 3 failures)
niws.loadbalancer.default.circuitTripMaxTimeoutSeconds (default 30secs)
使用ribbon+hystrix,可以实现如下两级断路器。
- 服务级别断路器 - hystrix
- 实例级断路器 - 功能区(按 AvailabilityFilteringRule)
你可以找到一些关于这个的描述here