微服务容灾组件:服务降级与资源隔离原理介绍
断路器是为了隔断服务调用者和异常服务提供者,防止了服务雪崩的现象,是一种保护的措施。而服务降级的意思是在整体资源不够的时候,适当的放弃部分服务,将主要的资源投放到核心服务中,待渡过难关之后,再把关闭的服务重启回来。
在Hystrix中,当服务间调用发生问题时,它将采用备用的fallback
方法代替主方法执行并返回结果,这就进行了服务降级,同时触发了断路器的逻辑。当调用服务失败次数在一段时间内超过了断路器的阀值时(此时一直调用fallback
中的逻辑返回结果),断路器将打开,此时将不再调用函数,而是快速失败,直接执行fallback
逻辑,服务降级,减少服务调用者的资源消耗,保护服务调用者中的线程资源。
资源隔离
在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧。同样的,在Hystrix中,也采用了这样的舱壁模式,将系统中的服务提供者隔离起来,一个服务提供者延迟升高或者失败,并不会导致整个系统的失败,同时也能够控制调用这些服务的并发度。
线程与线程池
Hystrix中通过将调用服务线程与服务访问的执行线程分隔开来,调用线程能够空出来去做其他的工作而不至于被服务调用的执行的阻塞过长的时间。
在Hystrix中使用独立的线程池对应每一个服务提供者,来隔离和限制这些服务,于是,某个服务提供者的高延迟或者饱和资源受限只会发生在该服务提供者对应的线程池中。
如上图中,Dependency I的调用失败或者高延迟仅会导致自身对应的线程池中的5个线程的阻塞,并不会影响其他服务提供者的线程池。系统完全与服务提供者请求隔离开来,即使服务提供者对应的线程完全耗尽,并不会影响系统中的其他请求。
注意在对应服务提供者的线程池被占满时,Hystrix会进入了fallback
逻辑,快速失败,保护服务调用者的资源稳定。
信号量
除了线程池外,Hystrix还可以通过信号量(计数器)来限制单个服务提供者的并发量。如果通过信号量来控制系统负载,将不再允许设置超时控制和异步化调用,这就表示在服务提供者出现高延迟,其调用线程将会被阻塞,直至服务提供者的网络请求超时,如果对服务提供者的稳定性有足够的信心,可以通过信号量来控制系统的负载。
- 点赞
- 收藏
- 关注作者
评论(0)