Hystrix

 25th January 2021 at 4:26pm

Hystrix 是一个 Java 库,用于实现 latency and falut tolerance(容许延迟和错误)。针对的 场景 是:

一个服务可能调用非常多第三方服务,第三方服务有可能出错(client library 有 bug、超时、报错等等);即使它的成功率再高(如 99.99%),由于调用的服务数量多(如 30),也可能导致服务的可用性降低(99.99%30 = 99.7%)。

Hystrix 将对三方服务的调用包装成一个个 command:

  • 每次 command 运行在单独的线程,避免第三方服务故障(比如超时时)将 web 容器(如 Tomcat)的用户线程占满
  • Command 的执行结果(成功、失败、超时等)可以被 Hystrix 感知。可以做短路(circuit break)逻辑,即失败达到一定阈值时,运行该 command 时不再有实际执行(比如调用第三方服务),而是可以走开发者设置的 fallback 逻辑

Hystrix command 的 执行流程 如下:

核心是 circuit breaker 的逻辑

  1. 当某一 command 中对第三方服务的请求量及错误率到达某个阈值(可配),短路逻辑开启,运行 command 时直接返回错误
  2. 经过一段时间后(可配),Hystrix 会再次尝试去调用第三方服务,探测其是否恢复

Hystrix 会统计过于一段时间的成功失败,来做为判断依据。

参考