现有三个微服务。
在某个时间点A服务挂了,B服务还在疯狂地调用A服务的API。
B服务发往A服务的请求就会被强制等待,直到请求超时。
而在java程序里,一次请求往往对应一个线程,如果请求被强制等待了,那么线程就会被强制阻塞,一直到请求超时的时候这个线程才会被释放。由于现在是一个高并发的系统,阻塞的线程就会越来越多。而线程对应的又是服务器的服务资源,比如说内存,cpu。如果不做任何处理的话,B服务所在的服务器再也无法创建新的线程了,于是B服务也挂了。
我们把基础服务故障导致上层服务故障,并且这个故障不断放大的过程称之为雪崩效应。
网友评论