什么是Hystrix
在分布式系统中,每个服务都会调用很多其他服务,被调用的哪些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。
Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。
Hystrix通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时整个系统的所有依赖服务进行蔓延;同时Hystrix还提供故障时的fallback降级机制。
总而言之,Hystrix通过这些方法帮我们提升系统的可用性和稳定性。
Hystrix的历史
Hystrix是高可用性保障的一个框架,Netflix的API团队从2011年开始做一些提升系统稳定性和可用性的方案的工作,Hystrix就是从那时发展出来的。
在2012年的时候,Hystrix变得非常成熟和稳定了,在Netflix中,除了API团队,其他团队也开始使用Hystrix了。
但是在2018年的时候,Hystrix官方宣布不在维护开发新功能,推荐使用其他开源社区的仍然活跃的项目。
Hystrix的设计原则
- 对依赖服务调用时出现调用延迟和调用失败进行控制和容错保护。
- 在分布式系统中,阻止某一个服务依赖的故障在整个系统中蔓延。比如某一个服务故障了,导致其他服务也跟着故障。
- 提供fail-fast(快速失败)和快速回复的支持。
- 提供fallback优雅降级的支持。
- 支持近实时的监控、报警以及运维操作。
比如说:
有一个系统,A依赖于B,B依赖于C、D、E。假如系统内部有100个线程,正常情况下,40个调用C,30个调用D,30个E。
如果C出现了超时,线程出现阻塞,导致原有的40用尽,继续消耗其他服务的60个线程。这就导致D和E调用也会出现问题。
Hystrix很好的实现了资源隔离,比如限制服务B只有40个线程调用服务C,此时如果40个线程被阻塞住了,其余的60线程仍然不受干扰,保证了系统中其他的服务仍然是可用的。
Hystrix更加细节的设计原则
- 阻止任何一个依赖服务耗尽所有的资源,比如tomcat中的线程池资源。
- 避免请求排队和积压,采用限流和fail fast来控制故障。
- 提供fallback降级机制来对应故障。
- 使用资源隔离技术,比如bulkhead(舱壁隔离技术)、swimlane(泳道技术)、circuit breaker(断路技术)来限制任何一个依赖服务的故障的影响。
- 通过近实时的统计、监控、报警功能,来提高故障发现的速度。
- 通过近实时的属性和配置热修改功能,来提高故障处理和恢复速度。
- 保护依赖服务调用的所有故障情况,而不仅仅是网络故障情况。