微服务雪崩效应
服务与服务之间相互通信(调用),随着业务扩展,客户端访问的服务(A)可能会调用多个服务(A调用B,B调用C…),如果其中被调用的某个服务©由于挂掉或超时等各种原因,不能再提供服务,那么B服务将处于阻塞状态,随着请求的增多(A的调用,B的重试),容器的线程资源会消耗完毕,B服务也挂掉了,接下来服务A也会重复B的操作,A资源耗尽也被挂掉,最终整个服务都无法再访问。
概括的来说,服务提供者的不可用导致服务消费者不可用,并将不可用逐渐放大的过程。从百度又偷了张图。
Hystrix
Hystrix也是Netflix开源的组件。
通过hystrix可以解决雪崩效应问题,它提供了资源隔离、降级机制、融断、缓存等功能。
快捷入口:Hystirx GitHub
关于Hystrix的资源隔离,命令模式等等,在文章末尾分享参考文章。
Hystrix 熔断器工作原理
Hystrix熔断器开关有三种状态:
-
关闭状态(Closed)
关闭状态中是允许服务互调用。如果服务的健康状况(请求失败次数 / 请求总次数) 超过了设定的阈值。那么熔断器的开关状态从 Closed -> Open状态。
-
打开状态(Open)
打开状态服务是不允许被调用。当熔断器开关处于OPEN状态,经过一段时间,熔断器状态会尝试进入Half-Open状态,并允许发送一个请求。
-
半开状态(Half-Open)
该状态下,允许发送的一个请求,如果调用成功,开关状态变为Closed。如果失败,则继续变回Open。
画个草图
使用Hystrix熔断器
前面两篇博客分别展示了如何使用RestTemplate,OpenFeign进行服务间调用,这里直接在上面进行添加。
-
服务调用RestTemplate整合Hystrix
-
pom.xml
添加Hystrix的maven依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId
-