这是我参与更文挑战的第1天,活动详情查看: 更文挑战
-
Hystrix是什么? 在分布式系统中,每个服务可调用其他服务,被调用的服务是生产者服务,这些服务可能出现故障,而Hystrix在分布式系统中服务间的调用进行控制,加入一些调用延迟或者依赖服务故障的容错机制。Hystrix通过依赖服务进行资源隔离,进而阻止某个服务出现故障时再整个系统所有的依赖服务调用中进行蔓延,同时Hystrix还提供故障时fallback降级机制。Hystrix通过这些方法提升分布式系统的可用性和稳定性。
-
Hystrix的设计原则 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延,比如一个服务故障了,导致其他服务也跟着故障。
提供的处理方法:
- 提供fail-fast(快速失败)和快速恢复的支持。
- 提供failback优雅降级的支持
- 支持近实时的监控,报警以及运维操作。
业务场景(服务雪崩效应):
在分布式系统,服务A依赖于服务B,服务B依赖于服务C/D/E,比如服务最多只有100个线程资源,正常情况下,50个线程并发调用服务C,各25个线程并发调用D/E。调佣服务C,只需要20ms,现在因为服务C故障了,比如延迟,或者挂了,此时线程会阻塞住2s左右,50个线程全部被卡住,但是请求不断涌入,其他的线程也用来调用服务C,同样也会被卡住,导致服务B的线程资源被耗尽,无法接收处理新的请求,甚至可能因为大量线程不断的运转,导致服务B也宕机,服务A也随着挂了。
由此可知需要使用Hystrix 可对其进行资源隔离,比如限制服务B只有50个线程调用服务C,当此50个线程被阻塞住时,其他50个线程依然能正常调用正常,从而确保整个系统不会被拖垮。
Hystrix应对不同场景采用的方案也不同:
- 阻止任何一个依赖服务耗尽所有的资源,比如Tomcat中的所有线程资源
- 避免请求排队和积压,采用限流和fail-fast来控制故障
- 提供fallback降级机制来应对故障
- 使用资源隔离技术,比如bulkhend(舱壁隔离技术)、swimlane(泳道技术)、circuit breaker(短路技术)来限制任何一个依赖服务的故障影响。
- 通过近实时的统计/监控/报警功能,来提高故障发现的速度
- 通过近实时的属性和配置热修改功能,来提高故障处理和恢复的速度
- 保护依赖服务调用的所有故障情况,而不仅仅只是网络故障情况