微服务容灾组件:服务降级与资源隔离原理介绍

举报
溜溜丽 发表于 2021/08/04 23:16:22 2021/08/04
【摘要】 断路器是为了隔断服务调用者和异常服务提供者,防止了服务雪崩的现象,是一种保护的措施。而服务降级的意思是在整体资源不够的时候,适当的放弃部分服务,将主要的资源投放到核心服务中,待渡过难关之后,再把关闭的服务重启回来。在Hystrix中,当服务间调用发生问题时,它将采用备用的fallback方法代替主方法执行并返回结果,这就进行了服务降级,同时触发了断路器的逻辑。当调用服务失败次数在一段时间内超...

断路器是为了隔断服务调用者和异常服务提供者,防止了服务雪崩的现象,是一种保护的措施。而服务降级的意思是在整体资源不够的时候,适当的放弃部分服务,将主要的资源投放到核心服务中,待渡过难关之后,再把关闭的服务重启回来。

在Hystrix中,当服务间调用发生问题时,它将采用备用的fallback方法代替主方法执行并返回结果,这就进行了服务降级,同时触发了断路器的逻辑。当调用服务失败次数在一段时间内超过了断路器的阀值时(此时一直调用fallback中的逻辑返回结果),断路器将打开,此时将不再调用函数,而是快速失败,直接执行fallback逻辑,服务降级,减少服务调用者的资源消耗,保护服务调用者中的线程资源。
图片.png

资源隔离

在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧。同样的,在Hystrix中,也采用了这样的舱壁模式,将系统中的服务提供者隔离起来,一个服务提供者延迟升高或者失败,并不会导致整个系统的失败,同时也能够控制调用这些服务的并发度。

线程与线程池

Hystrix中通过将调用服务线程与服务访问的执行线程分隔开来,调用线程能够空出来去做其他的工作而不至于被服务调用的执行的阻塞过长的时间。

图片.png

在Hystrix中使用独立的线程池对应每一个服务提供者,来隔离和限制这些服务,于是,某个服务提供者的高延迟或者饱和资源受限只会发生在该服务提供者对应的线程池中。

如上图中,Dependency I的调用失败或者高延迟仅会导致自身对应的线程池中的5个线程的阻塞,并不会影响其他服务提供者的线程池。系统完全与服务提供者请求隔离开来,即使服务提供者对应的线程完全耗尽,并不会影响系统中的其他请求。

注意在对应服务提供者的线程池被占满时,Hystrix会进入了fallback逻辑,快速失败,保护服务调用者的资源稳定。

信号量

除了线程池外,Hystrix还可以通过信号量(计数器)来限制单个服务提供者的并发量。如果通过信号量来控制系统负载,将不再允许设置超时控制和异步化调用,这就表示在服务提供者出现高延迟,其调用线程将会被阻塞,直至服务提供者的网络请求超时,如果对服务提供者的稳定性有足够的信心,可以通过信号量来控制系统的负载。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。