6.1 高并发带来的问题
当被调用服务C出现故障或者超时,调用服务B会调用超时,大量请求过来会堆积,导致调用服务B崩溃,此时服务B也变得不可用。如果有其他服务A依赖调用服务B,那么A服务也会出现超时等异常,导致服务A不可用。如此产生级联服务故障,导致服务雪崩。
因此,我们需要做好容错,在一个服务出现问题时,不会影响到其他服务,即其他服务不会被故障服务拖垮。
Sentinel是一款阿里巴巴开源的容错组件,目前已经被市面上广泛使用,非常稳定。
6.2 Sentinel基本使用
6.2.1 business业务工程中引入Sentinel依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
6.2.2 安装Sentinel控制台
# 安装 && 启动sentinel
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar
6.2.3 在business工程中配置sentinel控制台地址
spring:
cloud:
sentinel:
transport:
port: 9999 # 跟控制台通信端口
dashboard: 192.168.56.200:8080 # 配置控制台服务的地址
6.2.4 访问sentinel控制台配置接口限流
访问sentinel控制台http://192.168.56.200:8080,用户名/密码:sentinel/sentinel。
为/deviceData/hello接口配置限流
为/deviceData/hello接口配置限流
快速频繁调用接口,观察限流。
6.3 Sentinel的基本概念
- 资源,就是Sentinel要保护的对象。可以是接口方法、一段代码
- 规则,就是定义以什么方式来保护资源,一般有流控规则、熔断降级等
流控规则,就是限制访问api接口的QPS,当达到阈值时,进行限制。
熔断降级,就是当访问资源出现响应时间超过设置的阈值或者异常达到设置的比例时,进行快速失败,避免出现级联故障。