Spring Cloud 微服务系列文章,点击上方合集↑
1. 简介
Sentinel是由Alibaba开发的一款分布式系统的流量控制和防护工具。它提供了实时的监控、熔断、限流和系统保护等功能,使得服务在面对高并发、大流量的情况下能够保持稳定性和可靠性。
例如抢购秒杀系统,在很短的时间会有非常大的并发请求过来,如果不做限流可能一下子服务器就崩了。
2. 下载安装
可以直接下载二进制运行包或者通过源码编译打包。
2.1 直接下载(推荐)
官网下载(1.8.6版本):github.com/alibaba/Sen…。
官网下载很慢,网盘下载(推荐):「sentinel-dashboard-1.8.6.zip」来自UC网盘分享 drive.uc.cn/s/41d474e12…
2.2 编译安装
# 下载源码
git clone https://github.com/alibaba/Sentinel.git
# 切换分支
git checkout 1.8.6
# 打包
mvn clean package -Dmaven.test.skip
3. 运行jar包
java -Dserver.port=8060
-Dcsp.sentinel.dashboard.server=localhost:8060
-Dproject.name=sentinel-dashboard
-jar sentinel-dashboard.jar
- 指定端口为8060
访问地址: http://localhost:8060/,用户名和密码都是:sentinel。
4. 集成 Sentinel
我们创建一个sentinel-demo
模块。
4.1 pom.xml
添加spring-cloud-starter-alibaba-sentinel
包依赖。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
4.2 application.properties
配置sentinel监控台的地址localhost:8060
。
# dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8060
- 这里指定地址和上面一致
4.3 SentinelController
一个简单的get请求接口。
@RestController
@RequestMapping("sentinel")
public class SentinelController {
@GetMapping("test")
public String test() {
System.out.println(LocalDateTime.now());
return "hello world";
}
}
访问接口地址:http://localhost:8031/sentinel/test
5. JMeter 压力测试
JMeter是一个开源的、用于性能测试、压力测试和负载测试的Java工具,可以用来测试不同类型的服务,包括Web应用、数据库、FTP和Web服务等。
5.1 下载 JMeter
官网下载地址:jmeter.apache.org/download_jm…
网盘下载地址: 「apache-jmeter-5.6.2.zip」来自UC网盘分享 drive.uc.cn/s/9caaf33da…
5.2 运行 JMeter
cd bin
# windows
jmeter.bat
# mac/linux
sh jmeter.sh
5.3 开启10个线程暴力请求接口
-
打开JMeter,并创建一个新的测试计划。
Test Plan
-
右击
Test Plan
,在测试计划中添加一个线程组(Thread Group
)。
- 配置线程组中的线程数(Number of Threads)为10,循环次数设置为无限(Infinite)。
- 右击
Thread Group
添加一个HTTP请求(HTTP Request
)到线程组中。
-
在HTTP请求中配置接口地址和请求方法等基本信息。
-
配置HTTP请求的参数、请求头等相关信息。
- 运行测试计划,即可模拟10个线程暴力请求接口。
6. 测试结果
6.1 JMeter 测试结果
可以看到QPS2万左右。
QPS(Queries-per-second),每秒请求次数。
6.2 加上流量控制
Sentinel 后台加上流量控制,设置QPS阈值为 5000:每秒接口请求次数封顶5000次,超过5000次都被拒绝。
加上流控后的结果
- 可以看到通过的QPS封顶5000,其它的都被拒绝了。
6.3 流量控制规则
Sentinel提供了多种流量控制规则,包括快速失败、Warm Up和排队等待等。
-
快速失败规则:快速失败规则是最常用的规则之一,它会在请求超出一定阈值时,将请求快速失败,避免系统出现过载。使用快速失败规则,可以限制系统的并发数和请求数,从而防止系统崩溃。
-
Warm Up规则:使用Warm Up规则,可以在服务启动时慢慢增加系统的流量,使得系统在承受大流量时更加稳定。例如,可以使用Warm Up规则在服务启动的前10分钟内逐渐增加系统的流量,这样可以防止系统因为突然的大流量而出现问题。
-
排队等待规则:排队等待规则可以在系统出现短暂的高峰流量时,将请求放到队列中等待处理。使用排队等待规则,可以避免服务因为突然的高并发而出现直接崩溃的情况,从而保障系统的持久稳定。
7. 总结
Sentinel是一款强大的流量控制和防护工具,它为分布式系统提供了可靠的保护机制,确保服务在面对高并发和大流量时的稳定性和可靠性。
Spring Cloud 微服务系列 完整的代码在仓库的sourcecode/spring-cloud-demo
目录下。
gitee(推荐):gitee.com/cunzaizhe/x…
github:github.com/tigerleeli/…
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!