熔断机制是应对雪崩效应的一种微服务链路保护机制。当链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。当检测到该节点微服务调用响应正常后,恢复调用链路。服务断路器的设计架构图如下:
1 断路器状态
服务调用方为每一个调用服务 (调用路径) 维护一个状态机,在这个状态机中有3
种状态:
-
CLOSED
:默认状态。断路器观察到请求失败比例没有达到阈值,断路器认为被代理服务状态良好 -
OPEN
:断路器观察到请求失败比例已经达到阈值,断路器认为被代理服务故障,打开开关,请求不再到达被代理的服务,而是快速失败 -
HALF OPEN
:断路器打开后,为了能自动恢复对被代理服务的访问,会切换到半开放状态,去尝试请求被代理服务以查看服务是否已经故障恢复。如果成功,会转成CLOSED
状态,否则转到OPEN
状态
2 熔断策略
-
指定时间内失败率超过指定阈值
-
指定时间内失败次数超过指定阈值
-
可跟进熔断等级,适当调整熔断超时时间
3 恢复策略
-
指定时间内失败率低于指定阈值
-
指定时间内失败次数低于指定阈值
4 拒绝策略
-
直接抛出指定异常
-
调用降级策略进行处理
5 常见问题
使用断路器需要考虑一些问题:
-
针对不同的异常,定义不同的熔断后处理逻辑
-
设置熔断的时长,超过这个时长后切换到
HALF OPEN
进行重试 -
记录请求失败日志,供监控使用
-
主动重试,比如对于
connection timeout
造成的熔断,可以用异步线程进行网络检测,比如telenet
,检测到网络畅通时切换到HALF OPEN
进行重试 -
补偿接口,断路器可以提供补偿接口让运维人员手工关闭
-
重试时,可以使用之前失败的请求进行重试,但一定要注意业务上是否允许这样做
6 使用场景
-
服务故障或者升级时,让客户端快速失败
-
失败处理逻辑容易定义
-
响应耗时较长,客户端设置的
read timeout
会比较长,防止客户端大量重试请求导致的连接、线程资源不能释放
更多JAVA、高并发、微服务、架构、解决方案、中间件的总结在:https://github.com/yu120/lemon-guide
标签:重试,服务,阈值,指定,断路器,熔断,设计 来源: https://www.cnblogs.com/yu120/p/15054470.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。