Hystrix
Hystrix 是 Netflix公司的一个开源项目,它提供了熔断功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点,阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。
Hystrix 的设计原则
防止单个服务的故障耗尽整个服务的Servlet容器(例如 Tomcat)的线程资源。
快速失败机制,如果某个服务出现了故障,则调用该服务的请求快速失败,而不是线程等待。
提供回退(fallback)方案,在请求发生故障时,提供设定好的回退方案。
使用熔断机制,防止故障扩散到其他服务。
提供熔断器的监控组件 Hystrix Dashboard,可以实时监控熔断器的状态。
Hystrix 的工作机制
当服务的某个API接口失败次数在一定时间内小于设定的阀值时,熔断器处于关闭状态,该API接口正常提供服务。
当该API接口处理请求的失败次数大于设定的阀值时,Hystrix 判定该API接口出现了故障,打开熔断器,此时请求该API接口会执行快速失败的逻辑(即fallback回退的逻辑),不执行业务逻辑,请求的线程不会处于堵塞状态。
处于打开状态的熔断器,一段时间后会处于半打开状态,并将一定数量的请求执行正常逻辑。剩余的请求会执行快速失败,如果执行正常逻辑的请求失败了,则熔断器继续打开;如果成功了,则将熔断器关闭。这样熔断器就具有了自我修复能力。
熔断器:Circuit Breaker
熔断器是位于线程池之前的组件。用户请求某一服务之后,Hystrix会先经过熔断器,此时如果熔断器的状态是打开(跳起),则说明已经熔断,这时将直接进行降级处理,不会继续将请求发到线程池。熔断器相当于在线程池之前的一层屏障。每个熔断器默认维护10个bucket ,每秒创建一个bucket ,每个blucket记录成功,失败,超时,拒绝的次数。当有新的bucket被创建时,最旧的bucket会被抛弃。
熔断器的状态机
Closed:熔断器关闭状态,调用失败次数积累,到了阈值(或一定比例)则启动熔断机制;
Open:熔断器打开状态,此时对下游的调用都内部直接返回错误,不走网络,但设计了一个时钟选项,默认的时钟达到了一定时间(这个时间一般设置成平均故障处理时间,也就是MTTR),到了这个时间,进入半熔断状态;
Half-Open:半熔断状