springcloud--隔离策略

概念
  • 隔离策略的目的:为了防止提供者被熔断,为了防止客户端大量请求被阻塞。因为当消费端大量访问时,如果消费端没有进行控制,则会导致提供者效率降低,最终导致服务不可用。当提供者不可用时,消费端并不会在接收到客户端的请求就直接放回熔断降级的结果,而是先发出请求,等提供端超时之后,消费端再返回相应的信息,这样在高并发的情况下,就会导致,服务的不可用,大量的请求都在等待超时,造成服务雪崩。
  • 解决的方法:针对某个请求设置上限,超出就直接返回降级之后的结果。
隔离策略
线程池隔离
  • 示意图在这里插入图片描述
  • 当客户端使用线程池隔离时,是创建了新的线程,进行访问提供者提供的服务,图中表示为先绿色然后黄色。表示两个不同的线程。
  • 描述:线程隔离thread:Hystrix的默认隔离策略。系统会创建一个依赖线程池,为每个依赖请求分配一个独立的线程,而每个依赖所拥有的线程数量是有上限的。当对该依赖的调用请求数量达到上限后再有请求,则该请求阻塞。所以对某依赖的并发量取决于该依赖所分配的线程数量。
信号量隔离
  • 示意图在这里插入图片描述
  • 当客户端调用消费者时,调用的线程,同时也是访问提供者服务的线程。不会生成新的线程进行执行,图中表示为从客户端到消费者再到提供者都是同一个线程进行执行。
  • 信号量隔离:对依赖的调用所使用的线程仍为请求线程,即不会为依赖请求再新创建新的线程。但系统会为每种依赖分配一定数量的信号量,而每个依赖请求分配一个信号量。当对该依赖的调用请求数量达到上限后再有请求,则该请求阻塞。所以对某依赖的并发量取决于为该依赖所分配的信号数量。
区别
  • 信号量相当于一个条件,有条件,线程才可以执行。而线程隔离,是新创建了线程
  • 一个主机的线程是有上限的,所以线程隔离有上限,而信号量只是一个数而已,没有上限。
  • 当系统有很深的调用链路,使用线程隔离,会有很多线程进行服务,如果采用了信号量相当于一个线程,在不同服务上获取到相应的信号量时才继续向下执行。始终一个线程执行。调用链路很深的时候,当使用线程隔离的话,执行体多,执行的线程多,效率会更高。所以线程隔离适用于互联网场景,而内部系统使用的信号量隔离。当调用链路不深的话,信号量隔离效率会高。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值