开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:服务雪崩效应】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11869
服务雪崩效应
内容介绍:
一、服务瘫痪
二、雪崩效应
一、服务瘫痪
在分布式系统中,由于网络原因或自身的原因,服务一般无法保证100%用。如果一个服务出现了问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等待,进而导致服务瘫痪。
二、雪崩效应
1.由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩效应”。
运用下图进行理解
服务依赖关系:
A服务依赖于 B 服务,B 服务依赖于C 服务
某一个时刻,C 服务挂掉了,但是B服务依旧在不断的调用C服务
由于 C 服务挂掉了,导致B服务也一直拿不到C的响应结果,这时候就会有大量线程堆积在 B 线程,最终导致B挂掉
同样的道理,A服务最终也会挂掉,至此整个服务链调用全部挂掉
2.了便于理解,再进行细化
⑴假设A里面有个方法叫a1,B里面有个方法叫b1,C里面有个方法叫c1,同样也有a2、b2和c2。
⑵b1方法调用了c1方法,a2方法调用了b2方法,如图所示:
⑶由于服务C的崩溃,会导致产生雪崩效应
3. 雪崩发生的原因多种多样,有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某台机器的资源耗尽。
我们无法完全杜绝雪崩源头的发生,只有做好足够的容错,保证在一个服务发生问题,不会影响到其它服务的正常运行。也就是“雪落而不雪崩”。
⑴不合理的容量设计:如B服务只能容纳30个请求,如果每次来50个请求,会导致服务 B 繁忙
⑵高并发下某一个方法响应变慢:正常情况下,服务 C 可每秒进行一个反应,但在高并发下,需要3秒做出一个反应
⑶容错:服务 C 不影响服务B,服务 B 不被服务 C 影响