Sentinel 流量控制和接口防护

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。

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个线程暴力请求接口

  1. 打开JMeter,并创建一个新的测试计划。Test Plan

  2. 右击Test Plan,在测试计划中添加一个线程组(Thread Group)。

Sentinel 流量控制和接口防护
  1. 配置线程组中的线程数(Number of Threads)为10,循环次数设置为无限(Infinite)。
Sentinel 流量控制和接口防护
  1. 右击Thread Group添加一个HTTP请求(HTTP Request)到线程组中。
Sentinel 流量控制和接口防护
  1. 在HTTP请求中配置接口地址和请求方法等基本信息。

  2. 配置HTTP请求的参数、请求头等相关信息。

Sentinel 流量控制和接口防护
  1. 运行测试计划,即可模拟10个线程暴力请求接口。
Sentinel 流量控制和接口防护

6. 测试结果

6.1 JMeter 测试结果

可以看到QPS2万左右。

「QPS(Queries-per-second),每秒请求次数。」

Sentinel 流量控制和接口防护

6.2 加上流量控制

Sentinel 后台加上流量控制,设置QPS阈值为 5000:每秒接口请求次数封顶5000次,超过5000次都被拒绝。

Sentinel 流量控制和接口防护
Sentinel 流量控制和接口防护

加上流控后的结果

Sentinel 流量控制和接口防护
  • 可以看到通过的QPS封顶5000,其它的都被拒绝了。

6.3 流量控制规则

Sentinel提供了多种流量控制规则,包括快速失败、Warm Up和排队等待等。

Sentinel 流量控制和接口防护
  1. 快速失败规则:快速失败规则是最常用的规则之一,它会在请求超出一定阈值时,将请求快速失败,避免系统出现过载。使用快速失败规则,可以限制系统的并发数和请求数,从而防止系统崩溃。

  2. Warm Up规则:使用Warm Up规则,可以在服务启动时慢慢增加系统的流量,使得系统在承受大流量时更加稳定。例如,可以使用Warm Up规则在服务启动的前10分钟内逐渐增加系统的流量,这样可以防止系统因为突然的大流量而出现问题。

  3. 排队等待规则:排队等待规则可以在系统出现短暂的高峰流量时,将请求放到队列中等待处理。使用排队等待规则,可以避免服务因为突然的高并发而出现直接崩溃的情况,从而保障系统的持久稳定。

7. 总结

Sentinel是一款强大的流量控制和防护工具,它为分布式系统提供了可靠的保护机制,确保服务在面对高并发和大流量时的稳定性和可靠性。


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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!