一、服务雪崩
微服务架构是将单个应用程序被划分成各种小而连接的服务,每一个服务完成一个单一的业务功能。相对于传统的单体服务,微服务具有隔离性、技术异构性、可扩展性以及简化部署等优点。通常一个应用由多个微服务组成,微服务之间的数据交互需要通过远过程调用的方式完成。
下图是一个微服务之间互相调用的场景:
微服务A调用微服务B、C和D,微服务C又调用微服务E。假设某一时刻,微服务E变为不可用。微服务C需要等待微服务E返回结果,于是请求就会逐渐堆积在微服务C,形成阻塞。随着微服务C堆积的请求不断增加,微服务A也会随之慢慢阻塞。因为服务器所能支撑的并发数有限,所以最终会耗尽服务器资源,从而导致调用链条上更多的微服务不可用,形成雪崩效应。这种由一个服务崩溃导致整条服务链崩溃的情况,我们就称之为服务雪崩。
在微服务架构中,通常有两种情况会导致服务雪崩:
-
突发性的访问量剧增,超出了服务处理极限
-
调用链条上某个服务出现故障或者响应慢(延迟)
针对以上这两种情况,产生了对应的解决方案:服务限流和服务熔断。
二、 服务限流
服务限流是指在一定时间段内限制服务的请求量以保护系统,主要用于防止突发流量而导致的服务崩溃,比如秒杀、抢购、双十一等场景,也可以用于安全目的,比如应对外部暴力攻击。
常用的限流算