SpringCloud-Hystrix
服务故障的“雪崩”效应
微服务的“扇出”
-
多个微服务之间的关联调用称为服务"扇出"。例如微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务。
-
由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。
-
如果单实例部署微服务,由于服务与服务之间的依赖性,导致故障传播,会对整个微服务系统造成灾难性的严重后果。所以,为了保证其高可用,单个服务通常会集群部署。
如何防止服务“雪崩”
- 基本思路:需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能影响整个应用程序或系统。
- 断路器可以防止一个应用程序多次试图执行一个操作,即很可能失败,允许它继续而不等待故障恢复或者浪费 CPU 周期,而它确定该故障是持久的。
- 断路器模式也使应用程序能够检测故障是否已经解决。如果问题似乎已经得到纠正,应用程序可以尝试调用操作。
认识 Hystrix
概念
- 从角色上,Hystrix 扮演的是断路器功能。当有服务出现故障时,可以通过短路器监控,返回一个可以处理的响应结果,保证服务调用线程不会长时间被占用,避免故障蔓延。
- 从技术上,Hystrix是一个开源库,主要处理微服务系统延迟和容错。一个服务出现故障时,不会导致整个系统出现雪崩效应,以提高分布式系统弹性;
作用
服务降级
服务熔断
使用
服务熔断配置
参数设置:
①circuitBreaker.enabled:是否开启熔断;
②circuitBreaker.requestVolumeThreshold:当前服务失败几次后开启断路,默认20次;
③circuitBreaker.sleepWindowInMilliseconds:设置断路时间,过了该时间后会尝试恢复,在断路时间内,即使请求正确也会走降级方法;
熔断类型:
-
熔断打开
熔断打开后,在此时间内不会对该服务进行调用,而是直接访问降级方法。通过设置熔断时间,当达到该时间后,会尝试恢复该服务。 -
熔断关闭
熔断关闭代表服务正常,不会干扰正常服务调用。 -
熔断半开
熔断半开时,请求可以访问服务,若请求正常访问,则熔断会关闭;若请请求不正常,继续熔断,调用降级方法。
参考
- https://worktile.com/kb/ask/22743.html
- https://blog.csdn.net/weixin_50616848/article/details/124542186