Hystrix:定制断路器和恢复逻辑

sme*_*eeb 17 java fault-tolerance hystrix

我刚刚阅读了Hystrix指南,并试图了解默认断路器和恢复周期的运行方式,以及如何自定义其行为.

显然,如果电路跳闸,Hystrix会自动调用命令的getFallBack()方法; 我明白这一点.但是,首先使电路跳闸的标准是什么?理想情况下,在我们考虑服务离线/不健康并使断路器跳闸之前,我想尝试多次尝试支持服务(例如,最多3次尝试).我怎么能实现这个,在哪里?

但我想如果我覆盖默认的断路器,我还必须覆盖处理默认恢复期的任何机制.如果支持服务出现故障,可能是出于以下几种原因之一:

  • 客户端和服务器之间存在网络中断
  • 该服务部署了一个错误,使其无法向客户端返回有效响应
  • 客户端部署了一个错误,使其无法向服务器发送有效请求
  • 一些奇怪的,短暂的服务打嗝(也许服务正在做一个主要的垃圾收集等)
  • 等等

在大多数情况下,仅仅等待N秒然后再次尝试的恢复期是不够的.如果服务中有错误,或者有人在数据中心拔出了一些网线,我们将始终从此服务中获取失败.只有在少数情况下,客户服务才能在没有任何人为干预的情况下自动修复自身.

所以我想我的下一个问题部分是" 如何自定义默认恢复期策略? ",但我猜主要是:" 当服务中断并需要人工干预时,如何使用Hystrix通知devops? "

ahu*_*us1 31

Hystrix调用回退方法基本上有四个原因:异常,超时,并行请求太多,或者之前的调用中有太多异常.

如果返回代码或从服务收到的异常表明重试有意义,您可能希望在run()方法中重试.

在您的命令回退方法中,您可能会在超时时重试 - 当有太多并行请求或太多异常时,再次调用相同服务通常没有意义.

还询问如何通知devops:您应该将监控系统连接到Hystrix,以轮询断路器的状态以及成功和不成功呼叫的比率.您可以使用发布者提供的指标,JMX,或使用Hystrix的API编写自己的适配器.我在我准备教程中为Riemann和Zabbix编写了两个适配器; 你只需要很少的代码行.

本教程还有一个示例应用程序和一个加载驱动程序来尝试一些场景.

Br,亚历山大.

  • @IAmYourFaja:当存在大量错误时,断路器将触发(默认情况下:在一个时间范围内错误超过50%).之后,所有请求都将由回退处理(如果有的话).几秒钟后(默认值:5秒),首先将单个请求转发到原始服务.如果成功,则再次关闭所有电路并再次将请求转发到原始服务.有关配置值,请参阅https://github.com/Netflix/Hystrix/wiki/Configuration.有关功能,请参阅https://github.com/Netflix/Hystrix/wiki/How-it-Works#CircuitBreaker. (2认同)