1.Hystrix介绍

在分布式系统中,每个服务都可能调用很多其他服务,被调用的服务就是依赖服务,有的时候某些依赖服务也会出现故障。
Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障容错机制
Hystrix通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖服务调用中进行蔓延;同时Hystrix还提供故障时的fallback降级机制。
总而言之,Hystrix通过这些方法帮助我们提升分布式系统的可用性和稳定性。

2.Hystrix的设计原则

  • 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护
  • 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如一个服务故障,导致其他服务跟着故障。
  • 提供fail-fast(快速失败)和快速恢复的支持。
  • 支持近实时的监控、报警以及运维操作。

例子:
有这样一个分布式系统,服务A依赖于服务B,服务B依赖于服务C/D/E。在这样一个成熟的系统内,最多有100个线程资源。正常情况下,40个线程并发调用服务C,各30个线程并发调用D/E。
调用服务C,只需要20ms,现在因为服务C故障了,此时线程可能会卡2s左右。40个请求全部被卡住,由于请求不断涌入,其他的线程也用来调用服务C,同时也会被卡住。这样导致服务B的线程资源被耗尽,无法接收新的请求,甚至可能因为大量线程堵塞,当值自己宕机,最终导致服务A也宕机。
Hystrix介绍 - 图1

3.Hystrix更加细节的设计原则

  • 阻止任何一个依赖服务耗尽所有的资源。
  • 避免请求排队和积压,采用限流和fail-fast来控制故障。
  • 提供fallback降级机制来应对故障。
  • 使用资源隔离技术,比如bulkhead(舱壁隔离技术)、swimlane(泳道技术)、circuit breaker(断路技术)来限制任何一个依赖服务的故障影响。
  • 通过近实时的统计、监控、报警功能,来提高故障发现的速度。
  • 通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度。
  • 保护依赖服务调用的所有故障情况,而不仅仅只是网络故障情况。