**
1、什么是雪崩效应?
**
在微服务的架构中,高并发的场景下,系统如过存在 A、B、C三个服务,并且 存在A服务调用B服务,B服务C服务。若C服务突然宕机或者其他因素,无法对B提供服务,这时候,B对C服务大量的调用。由于C无法提供服务,B又不断连接C,B与C的连接总是等待资源自动关闭连接,导致资源无法及时释放,最终B由于资源耗费也挂了,同理,B也导致A也挂了。(雪崩时,没有一个是无辜的,哈哈!)
**
2、常见的容错方案
**
2.1 超时
设置请求的超时时间,只要资源释放的够快,系统就不会大量的线程阻塞,从而减少雪崩的几率。(治标不治本)
2.2 限流
我们可以预估一下该服务最大能承受的qps值,在调用时限制访问量,也能减少雪崩几率。(治标不治本)
3.3 舱壁模式
舱壁模式可以理解为资源分区,比如B调用C服务的C1服务与C2服务,此时为C1服务和C2服务两个服务建立不同的线程池,两个线程池互不影响,即使C1服务连接爆炸,也不会影响到C2服务提供服务。也能减少雪崩几率。(治标不治本)
**
3.4 断路器(重点)
**
断路器跟字面意思一样,即超过了安全值,自动断开。即 监听某个服务,如果某个服务访问出现的错误的次数达到阈值,断路器就会自动打开,保护服务。
断路器的三态转换
服务正常,断路器处于关闭状态。服务错误次数达到阈值,断路器转变成打开状态,服务此时不允许访问。过一段时间,断路器转换成半开状态,服务此时只允许一次访问。若访问成功,断路器转成关闭状态。否则重新回到打开状态。
ps:准备学习 sentinel