Hystrix 是什么?
Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延。同时 Hystrix 还提供故障时的 fallback 降级机制,提升分布式系统的可用性和稳定性。
比如:
服务 A 依赖于服务 B,服务 B 依赖于服务 C和D。
一旦服务 C 故障了(延迟、宕机)原本请求全部被卡住,而且还有新的请求不断涌入,调用服务 C的服务B同样也会被卡住。这样导致服务 B 的线程资源被耗尽,无法接收新的请求,甚至可能因为大量线程不断的运转,导致自己宕机。这种影响势必会蔓延至服务 A,导致服务 A 也跟着挂掉。
Hystrix 可以对其进行资源隔离,比如限制服务 B 只有 40 个线程调用服务 C。当此 40 个线程被 hang 住时,其它 60 个线程依然能正常调用工作。从而确保整个系统不会被拖垮。
Hystrix 的设计原则
- 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。
- 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如某一个服务故障了,导致其它服务也跟着故障。
- 提供
fail-fast
(快速失败)和快速恢复的支持。 - 提供 fallback 优雅降级的支持。
- 支持近实时的监控、报警以及运维操作。
Hystrix 更加细节的设计原则
- 阻止任何一个依赖服务耗尽所有的资源,比如 tomcat 中的所有线程资源。
- 避免请求排队和积压,采用限流和
fail fast
来控制故障。 - 提供 fallback 降级机制来应对故障。
- 使用资源隔离技术,比如
bulkhead
(舱壁隔离技术)、swimlane
(泳道技术)、circuit breaker
(断路技术)来限制任何一个依赖服务的故障的影响。 - 通过近实时的统计/监控/报警功能,来提高故障发现的速度。
- 通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度。
- 保护依赖服务调用的所有故障情况,而不仅仅只是网络故障情况。