目录
服务容错是微服务设计中一项重要原则和技术手段,主要目标是在服务出现故障、网络波动或其他不可预见的异常情况下,保证系统的稳定性和可靠性,防止局部故障引起雪崩效应,影响整个系统的正常运行。
下面首先看下,如果没有服务容错时,什么是服务雪崩。
一、雪崩效应
假如有一个微服务系统,这个系统由4个微服务组成,分别是 ABCD,这4个服务以集群的方式构成。如下图:
服务 A 会向服务 BC发起调用,而服务 BC 又会去调用服务 D,也就是说服务 ABC 都直接或间接的依赖服务 D。由于服务 D 底层依赖了数据库,有读写请求。如果服务 D 在进行 CRUD 时,执行了一个慢 SQL 语句,那么一次 DB 操作的执行时间会比较长。如果并发量比较小,这当然没什么问题,一旦并发量大了,堆积起来后,性能问题就会被逐渐放大。
这种情况下,数据库的连接资源就会被服务 D 迅速耗尽,进而导致服务D接口响应时间变长,接口超时的情况越来越多。由于上游请求还在源源不断的到达服务 D,所以接口超时情况会迅速传到到服务 B 和服务 C,进而又影响到服务 A,导致整个微服务集群不可用。
来自服务 D 的底层故障,如果不能得到有效处理,那么故障就会想滚雪球一样被迅速放大,进而出现服务雪崩。那么如何来防范服务雪崩呢?这时服务容错限流就登场了。
二、Sentinel 服务容错
Sentinel 是 Spring Cloud Alibaba 的一款服务容错组件,它是阿里巴巴双十一大促核心场景的保护神,内置了丰富的服务容错应用场景。它以流量作为切入点,通过各种内外防控手段达到维持服务稳定性的目的。
2.1 Sentinel 容错思路
就拿服务雪崩的场景来说,这种场景主要有两个主要因素:
- 一个是外部的流量突然增多,超过了集群的吞吐量。
- 另一个是内部各种未知异常导致的接口异常超时。
&nbs