7. Hystrix入门
1. Hystrix是什么
老规矩,官网:Hystrix官网。Hystrix关键特性:服务降级、服务熔断、服务限流。 Hystrix是一个用于处理分布式系统的延迟
和容错
的开源库,在分布式系统用,许多依赖不可避免的会调用失败,比如超时、异常等。Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的、可处理的相应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常
,这样就保证了服务调用方的线程不会被长时间、不必更地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
怎么样,是不是关于Hystrix是什么,怎么学官网是不是清楚明了。
另外我们关注到Hystrix也停更了,我们知道任何技术停更,也相应的有其他不停更技术的相似替代,Sentinel也要安排学起来了!
Tip:不管学习哪个技术,个人还是建议要学会看官网,那是最准确清楚的。
2. Hystrix的用途
为通过第三方客户端库访问(通常通过网络)的依赖关系提供保护和控制延迟和故障。
停止复杂分布式系统中的级联故障。
故障快速恢复。
尽可能后退并优雅地降级。
实现近乎实时的监控、警报和操作控制。
3. Hystrix的设计原则
防止任何单个依赖项用完所有容器(如Tomcat)用户线程。
减少负载并快速故障,而不是排队。
在可行的情况下提供回退,以保护用户免受故障的影响。
使用隔离技术(如断路器模式)来限制任何一种依赖关系的影响。
通过近乎实时的指标、监控和警报优化发现时间
通过低延迟传播配置更改和支持Hystrix大多数方面的动态属性更改来优化恢复时间,使您能够通过低延迟反馈回路进行实时操作修改。
防止在整个依赖客户端执行过程中发生故障,而不仅仅是在网络流量中。
4. Hystrix重要概念
5. Hystrix实战案例
5.1 准备项目
新建springcloud-hystrix工程,以单机版注册中心为例,陆续建module搭建环境。 环境搭建参考《SpringCloud入门实战系列》前几篇文章。
5.2 服务降级
服务降级
:也就是假设对方系统不可用了,向调用方返回一个符合预期的,可备选的响应。比如我们常见的“服务器忙,请稍后重试!”、“系统开小差,请稍后再试!”、“您的内容飞到了外太空…”等,超时不再等待,出错有兜底方案。不用客户等待并立刻返回一个友好的提示,这就是服务降级。
更多内容参看:SpringCloud入门实战(七)-Hystrix服务降级
5.3 服务熔断
熔断机制
是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路
。
更多内容参看:SpringCloud入门实战(七)-Hystrix服务熔断
5.4 服务限流
通过线程池
或者信号量
判断是否已满,超出容量的请求直接降级,以达到限流的作用。
更多内容参看:SpringCloud入门实战(七)-Hystrix服务限流
6. 工作流程
6.1 官网流程图
翻译过来就是:
6.2 流程说明
1)每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中. 2)执行execute()/queue做同步或异步调用. 3)当前调用是否已被缓存,是则直接返回结果,否则进入步骤 4 4)判断熔断器(circuit-breaker)是否打开,如果打开跳到步骤 8,进行降级策略,如果关闭进入步骤 5 5)判断线程池/队列/信号量是否跑满,如果跑满进入降级步骤8,否则继续后续步骤 6 6)调用HystrixCommand的run方法.运行依赖逻辑 调用是否出现异常,否:继续,是进入步骤8, 调用是否超时,否:返回调用结果,是进入步骤8
搜集5、6步骤所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态 getFallback()降级逻辑.四种触发getFallback调用情况(图中步骤8的箭头来源):返回执行成功结果
6.3 Hystrix源码总结
- 采用了AOP的方式来对方法进行了增强
- 采用了大量的RxJava响应式编程,利用了Future+线程池的方法进行了大量的异步
- 涉及到了滑动窗口的设计,来进行统计失败率(到Sentinel再仔细讲述)