Spring Cloud 微服务系列文章,点击上方合集↑
1. 简介
Sentinel是由Alibaba开发的一款分布式系统的「流量控制和防护」工具。它提供了实时的监控、熔断、限流和系统保护等功能,使得服务在面对高并发、大流量的情况下能够保持稳定性和可靠性。
❝
例如抢购秒杀系统,在很短的时间会有非常大的并发请求过来,如果不做限流可能一下子服务器就崩了。
❞
2. 下载安装
可以直接下载二进制运行包或者通过源码编译打包。
2.1 直接下载(推荐)
官网下载(1.8.6版本):https://github.com/alibaba/Sentinel/releases。
官网下载很慢,网盘下载(推荐):「sentinel-dashboard-1.8.6.zip」来自UC网盘分享https://drive.uc.cn/s/41d474e124994
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
官网下载地址:https://jmeter.apache.org/download_jmeter.cgi
网盘下载地址:「apache-jmeter-5.6.2.zip」来自UC网盘分享 https://drive.uc.cn/s/9caaf33da9684
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(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!
原文始发于微信公众号(小虎哥的技术博客):Sentinel 流量控制和接口防护
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/169753.html