Hystrix 简介介绍及工作原理

什么是 Hystrix

Hystrix是一个延迟和容错库,旨在隔离对远程系统、服务和第三方库的访问点,停止级联故障,并在 不可避免发生故障的复杂分布式系统中实现快速恢复。

Hystrix能做什么

延迟和容错

停止级联故障。Fallbacks和优雅的降级。Fail fast 和快速恢复。通过中断来隔离线程和信号。

实时监控

实时监控和修改配置。当系统中的服务和属性发生改变时立即更新。在数秒内察觉改变、做出决策、响应变化并看到调整后的结果。

并发性

并发并行执行。并发感知请求缓存。通过请求合并自动批处理。

看下Hystrix的设计原则是什么

(1)对依赖服务调用时出现的调用延迟和调用失败进行监控和容错处理
(2)在复杂的分布式系统中,组织某一个依赖服务的故障在整个系统中蔓延。
(3)提供fail-fast和快速恢复的支持。
(4)提供fallback优雅降级的支持。
(5)支持近实时监控、报警及运维操作。

Hystrix要解决的的问题是什么

在复杂的分布式系统中,每个服务都有很多依赖服务,而每个依赖服务都有可能出现问题。如果一个服务和他的依赖服务没有有效的隔离,那么每一个依赖服务都有可能出现故障进而拖垮整个服务。
举例来说:某个服务有20个依赖,每个依赖服务的可用性都很高,都高达99.99%。那么该服务的可用性就变成了99.99%的20次方,就是99.80%,意味着0.2%的请求可能失败。对于一亿次的访问来说有20万次请求可能失败,也意味着每个月有1.44个小时是系统是不可用的。也就是说即使你的所有依赖的服务都是高可用的,一旦依赖了较多服务就可能会导致多个小时不可用。

分布式系统中Hystrix的作用

再来看下Hystrix更加细节的设计

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

Hystrix如何实现这些功能

(1)通过HystrixCommand或者HystrixObservableCommand来封装对外部依赖的访问请求,这个请求一般运行在独立的线程中,资源隔离。
(2)对于超出我们设定阈值的调用,直接进行超时,不允许其消耗过长时间阻塞住。这个超时时间默认是99.5%的访问时间,也可以自定义。
(3)为每个依赖服务维护一个独立的线程池,或者是semaphore,当线程池已满时,直接拒绝这个服务的调用。
(4)对依赖服务的调用的成功次数、失败次数、超时次数、拒绝次数,进行统计。
(5)如果对于一个依赖服务的调用失败次数超过一定的阈值,自动进行熔断,一定时间内对该服务的调用直接降级,一段时间后再自动尝试恢复。
(6)当一个服务调用出现失败、被拒绝、超时、短路等异常情况,自动调用fallback降级机制。
(7)对属性和配置提供近实时的支持。


版权声明:本文为weixin_40765637原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。