- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
谈谈我对服务熔断、服务降级的理解
2021-02-02
今日先来说说“服务熔断”和“服务降级”。为什么要说这个呢,由于我很长时间里都把这两个概念同质化了,不晓得这两个词大家怎样理解,一个意思or有所不同?现在的我是这么来看的:
在股票市场,熔断这个词大家都不生疏,是指当股指波幅达到某个点后,买卖所为把握风险实行的暂停买卖措施。相应的,服务熔断一般是指软件系统中,由于某些缘由使得服务消灭了过载现象,为防止形成整个系统毛病,从而接受的一种爱护措施,所以很多地方把熔断亦称为过载爱护。
大家都见过女生旅行吧,大号的旅行箱是必备物,平常走走近处绰绰不足,但一旦出个远门,再大的箱子都白搭了,怎样办呢?常见的情景就是把物品拿出来分分堆,比了又比,最终一些非必需品的就忍痛放下了,等到下次箱子够用了,再带上用一用。而服务降级,就是这么回事,全体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。
所以从上述分析来看,两者其实从有些角度看是有肯定的类似性的:
目的很全都,都是从可用性牢靠性着想,为防止系统的全体缓慢甚至崩溃,接受的技术手段;
最终表现类似,对于两者来说,最终让用户体验到的是某些功能临时不行达或不行用;
粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据长久层(允许查询,不允许增删改);
自治性要求很高,熔断模式一般都是服务基于策略的自动触发,降级虽说可人工干涉,但在微服务架构下,完全靠人明显不行能,开关预置、配置中心都是必要手段;
而两者的区分也是明显的:
触发缘由不太一样,服务熔断一般是某个服务(下游服务)毛病引起,而服务降级一般是从全体负荷考虑;
管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开头)
实现方式不太一样,这个区分后面会单独来说;
当然这只是我个人对两者的理解,外面把两者归为完全全都的也不在少数,或者把熔断机制理解为应对降级目标的一种实现也说的过去,可能“一争辩就吵架”也正是这个缘由吧!概念算是说完了,避开空谈,我再总结下对常用的实现方法的理解。对于这两个概念,号称支持的框架可不少,Hystrix当属其中的佼佼者。先说说最裸的熔断器的设计思路,下面这张图大家应当不生疏(我只是参考着又画了画),简明扼要的给出了好的熔断器实现的三个形态机:
Closed:熔断器关闭形态,调用失败次数积累,到了阈值(或肯定比例)则启动熔断机制;
Open:熔断器打开形态,此时对下游的调用都内部直接前往错误,不走网络,但设计了一个时钟选项,默认的时钟达到了肯定时间(这个时间一般设置成平均毛病处理时间,也就是MTTR),到了这个时间,进入半熔断形态;
Half-Open:半熔断形态,允许定量的服务恳求,假如调用都成功(或肯定比例)则认为恢复了,关闭熔断器,否则认为还没好,又回到熔断器打开形态;
那Hystrix,作为Netflix开源框架中的最受宠爱组件之一,是怎样处理依靠隔离,实现熔断机制的呢,他的处理远比我上面说个实现机制简单的多,一起来看看核心代码吧,我只保留了代码片段的关键部分:
HystrixCommand是重重之重,在Hystrix的整个机制中,涉及到依靠边界的地方,都是通过这个Command模式进行调用的,明显,这个Command担任了核心的服务熔断和降级的处理,子类要实现的方法次要有两个:
run方法:实现依靠的规律,或者说是实现微服务之间的调用;
getFallBack方法:实现服务降级处理规律,只做熔断处理的则可不实现;
使用时,可参考如下方式:
接着呢,大家肯定会问,那之前说的熔断阈值设置等,都在哪块做的呢?再来看看另一块核心代码:
这个类作为策略类,前往相关的属性配置,大家可重新实现。而在具体的策略中,次要包括以下几种策略属性配置:
circuitBreakerEnabled:能否允许熔断,默认允许;
circuitBreakerRequestVolumeThreshold:熔断器能否开启的阀值,也就是说单位时间超过了阀值恳求数,熔断器才开;
circuitBreakerSleepWindowInMilliseconds:熔断器默认工作时间,超过此时间会进入半开形态,即允许流量做尝试;
circuitBreakerErrorThresholdPercentage:错误比例触发熔断;
属性很多,这里就不逐一说明白,大家可参考HystrixCommandProperties类里的具体定义。还有一点要着重说明的,在熔断器的设计里,隔离接受了线程的方式(听说还有信号的方式,这两个区分我还没搞太明白),处理依靠并发和堵塞扩展,示意图如下:
如上图,好处也很明显,对于每个依靠都有独立
文档评论(0)