sentinel 官方文档_Sentinel限流

本文介绍了阿里巴巴开源的Sentinel项目,它是一个用于服务稳定性的流量控制组件,支持丰富的流量控制策略和实时监控。Sentinel具有控制台,提供友好的界面和实时监控功能,适用于微服务环境。文中重点讲述了Sentinel的限流特性,包括QPS限流、线程数限流和多种降级模式,并提供了在非Spring Cloud应用中注解方式配置接口限流的简单示例。此外,还强调了Sentinel与阿里全家桶的集成以及动态规则配置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sentinel限流

点击上方“技术支持联盟”,选择“置顶公众号”

第一时间了解程序员大小事儿

作者:老刘头丶

作者简介:从事程序员这个行业之前是在艾泽拉斯拯救世界的脚男。

引言:由于近期实现的需求中有对请求流量限制的需求。故对阿里开源sentinel 进行了深入学习。

c8d591f4c40eeaf3233f41defb5852f4.png

01

Sentinel是什么?

分布式系统的流量防卫兵。官网介绍如下:随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

    1、丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

    2、完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

    3、广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

4、完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel 的主要特性:

49071c99c35afbae8a060df36382498d.png

Sentinel 的开源生态:

9a49a6c8ca7e45d1ebc45298275aa689.png

Sentinel 分为两个部分:

    核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

    控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

官方文档参考:https://github.com/alibaba/Sentinel/wiki

0 2

Sentinel的优势

1.有控制台项目,部署成功后可打开控制面板,界面非常友好,并且支持实时监控。

c3b1a30623a42ec6540224cc5d751730.png

e30dd157be99b3b919cb2a03d4339920.png

2.多种限流支持和策略。支持QPS限流,线程数限流,策略如:快速失败、Warm Up、排队等待等

8160fdcc804401adb2fc36c3cf8bb0da.png

3.多种降级模式,支持按平均返回时间降级,按多种异常数降级,按异常比率降级

4.支持链路的关联,按链路统计限流,系统保护,热门资源保护等等。

30c7a0a365e69c6f9acd3ea924cd4746.png

5.支持在线热更新,随时改动随时生效,无效重启项目,方便快捷,根据预设的规则,结合对资源的实时统计信息,对流量进行控制。通过Sentinel开放的接口,可以方便的定义及改变规则。

6.支持阿里全家桶持续集成。

可参考:(https://github.com/spring-cloud-incubator/spring-cloud-alibaba )

03

Sentinel 限流部分在项目中的应用

由于近期项目有对接口流量控制的需求,故对Sentinel 限流部分进行了详细的研究和学习,在此分享给大家参考。

注:

1.默认jdk环境为1.8,低于1.8版本请注意: 从 Sentinel 1.5.0 开始仅支持 JDK 1.7 或者以上版本。Sentinel 1.5.0 之前的版本最低支持 JDK 1.6。

2.默认maven 构建工程。

3.默认使用注解方式使用sentinel(还可以使用手工埋点)

4.主要针对传统非springCloud应用使用进行配置讲解。SpringCloud 的配置官网写的很好,很清晰,就不再赘述了。

5.sentinel功能非常丰富,文档内容很多很复杂,本部分主要简单配置实现了一下接口限流,降级,热点,授权等功能未说明。

6.本文只按照Spring AOP 形式实现了集群接口限流,sentinel在官方文档中有各种各样的配置方式,非常多,此文只按 Spring AOP方式最合适的方式配置,若要了解其他方式的配置,请自行查阅官方文档。

7.由于Sentinel 的配置都是存储在内存中,没有注册中心和配置中心的话,项目重启配置就会丢失,故采用了本地文件方式实现动态规则(近期看文档还可以使用Redis 作为DataSource)。

在应用中引入Sentinel 相关Jar包

关于jar包其实使用什么就要加什么依赖,这个其实是最麻烦的,如果使用阿里全家桶的依赖就简单多了,要不然就要一点一点啃官方文档,找需要的jar。

阿里全家桶依赖:

<dependency>

    <groupId>com.alibaba.cloudgroupId>

    <artifactId>spring-cloud-starter-alibaba-sentinelartifactId>

dependency>

本次使用的依赖:

1.7.2   

            com.alibaba.csp

            sentinel-core

            ${sentinel.version}

            com.alibaba.csp

            sentinel-annotation-aspectj

            ${sentinel.version}

            com.alibaba.csp

            sentinel-transport-simple-http

            ${sentinel.version}

                    com.alibaba

                    fastjson

            com.alibaba.csp

            sentinel-datasource-extension

            ${sentinel.version}

            com.alibaba.csp

            sentinel-cluster-client-default

            ${sentinel.version}

            com.alibaba.csp

            sentinel-cluster-server-default

            ${sentinel.version}

            com.alibaba.csp

            sentinel-parameter-flow-control

            ${sentinel.version}

注册注解配置为一个 Spring Bean

@Configuration

public class SentinelAspectConfiguration {

    @Bean

    public SentinelResourceAspect sentinelResourceAspect() {

        return new SentinelResourceAspect();

    }

}

配置启动项

启动项其实有好多配置的东西在里面,此部分配置是为了对接控制台,详细的配置可参考官网文档。一、打造先于用户发现并解决问题的能力

46a86bf14e0d0f487c9261f1cfea1963.png

其中:

System.setProperty("csp.sentinel.dashboard.server", run.getEnvironment().getProperty("sentinel.dashboard.server", "10.7.8.7:8080"));

参数sentinel.dashboard.server ,在配置文件application.yml  中配置控制台地址来对接控制台

16bea0d181554ab93c28dfa0342e2547.png

官方文档地址:

https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9

        启动项其实有好多配置的东西在里面,此部分配置是为了对接控制台,详细的配置可参考官网文档。46a86bf14e0d0f487c9261f1cfea1963.png

     其中:

System.setProperty("csp.sentinel.dashboard.server", run.getEnvironment().getProperty("sentinel.dashboard.server", "10.7.8.7:8080"));

    参数sentinel.dashboard.server ,在配置文件application.yml  中配置控制台地址来对接控制台

16bea0d181554ab93c28dfa0342e2547.png

官方文档地址:

https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9

12f0bbd307a3bc208ea29ac244cfc6cf.png

动态规则配置

通过查找资料找到的本地文件实现规则的方式为:

1.在项目的resource 下新建文件,文件内容为指定的配置类

META-INF/services/com.alibaba.csp.sentinel.init.InitFunc

2.此处要注意,这个配置是要生成规则的json文件的,项目启动的文件夹不能有特殊字符和中文,否则会导致创建文件失败导致功能失效。

ac87cebc63977bddbd14a310ac47a094.png

 3.配置类代码如下:

7292e52fb9438d3348b2c7bf9bd46da5.png

参考文章:

https://blog.youkuaiyun.com/admin1973/article/details/85764525

限流配置

在接口上使用注解方式配置

ca89aaecb39c5e9f6d0766a3487d88dc.png

@SentinelResource(value = "sentinel-----", blockHandler = "getCashPoolHandler")

其中  value 是指限流资源名,这个是在控制台中配置规则的时候使用的。blockHandler 是指限流异常使用的方法,此处作为限流提示处理了。

a01acbed8ba8d742bda8cd0cf3c0a958.png

控制台配置

A.下载地址

1.jar包:https://github.com/alibaba/Sentinel/releases

2.代码(自行构建版):https://github.com/alibaba/Sentinel/tree/master/sentinel-dashboard

3.Docker也可以部署,自行 docker search ** 吧。 

本文采用的方式是通过下载官方release包启动的控制台。

B.启动 Sentinel 控制台需要 JDK 版本为 1.8 及以上版本,下载完毕后,请安装JDK1.8及以上版本,并配置好环境变量。

C.启动命令:

java 

-Dserver.port=8080

-Dsentinel.dashboard.auth.username=payment

-Dsentinel.dashboard.auth.password=Payment123! 

-Dcsp.sentinel.dashboard.server=localhost:8080

-jar sentinel-dashboard.jar

-运行端口

-登录控制台用户名

-登录控制台密码

-监听控制台本身(个人感觉没啥意义)

-启动 jar ,注意jar 包版本, 第一次启动建议 不要后台启动,先看看控制台有没有报错,正常运行成功了再加上 nohup  ----  &  。 

注意:

控制台尽量不要和项目部署在同一个机器上,否则会发生冲突问题,导致项目注册失败,此时可以更改控制台相关端口,和项目pid日志(也就是项目启动项的System.setProperty("csp.sentinel.log.use.pid", "true"); 这部分)来解决。要是不行,多换几个端口啥,之前发现同一个机器部署这个有问题就是冲突了。

控制台官方文档地址:

https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0

限流资源配置

此时,若无报错等问题,项目正常启动,控制台正常启动,那么打开控制台就可以看到机器列表的健康状态。

ff6c58d7fee242c068fd2d1d11c0b465.png

然后就可以开始配置限流了

147e12debbb935a6db1619551faffd9f.png

7075b9a7736f39154d6f43bd86403492.png

集群流控

针对于集群流控,官方提供两种模式 独立模式 和 嵌入模式

官方文档:

https://github.com/alibaba/Sentinel/wiki/%E9%9B%86%E7%BE%A4%E6%B5%81%E6%8E%A7

集群流控要指定TokenServer

通过此菜单配置:

254b21f49e275bffd7e8dd2a2074b809.png

可以根据业务需求,选择不同的模式

73bdb96920a19c6fb6724d1704ae7468.png

注:集群流控一定要实现动态规则配置,否则无法实现集群流控,就算配置了,也是会退化为单机模式。

2631218611b8bbeb3097e166b33a564d.png

历史文章

解决方案:

基于公有云实时音视频通道的构建音视频组件方法与实战经验

分布式定时任务调度探讨

阿里云OSS JavaAPI分享

Jmeter压测的使用

API接口安全优化浅谈

基于idea将传统应用maven化改造实践

安全漏洞预扫小工具

Nacos作为注册中心,配置中心部署方案

Rancher+K8S简化学习环境搭建方案

Excel大数据量解析优化方案

Sharding-JDBC个性化分表方案

基于JWT的接口权限认证

Spring Cloud Gateway实现限流

公网发布的通用技术解决方案

Nginx结合Lua实现限流

Mysql数据同步Canal方案

Weblogic部署基于Spring Cloud项目应用实例

智能验证码解析java语言实现

数据库的演绎与变迁-下架最后一台小型机

关于struts架构通过引入spring包实现dubbo调用测试的未来式

架构系列:

架构师入门系列:架构三板斧“缓存,消息,异步”

监控&运维

redis监控工具-redislive

微服务链路追踪工具 Apache  SkyWalking部署与实践

快速发现生产环境SQL问题

Grafana-业务数据监控实践

自动化运维能力提升

服务器监控及问题定位排除

基于Spring Boot Admin告警之应用状态告警

Ansible在自动化运维中的使用

自助迁发分支工具

大数据

基于CDH集群的大数据项目的优化总结

Oracle实时同步大数据平台解决方案

实时流关联维表解决方案

中间件

浅谈Elasticsearch的资源分配

Apache Kafka使用规范Elasticsearch安装及使用

SSDB介绍及使用

RabbitMq使用简单介绍

Spring Cloud常用组件介绍

前端

ESLint + Prettier 规范前端代码

Vue.js对WinXP系统对兼容性

关于采集操作系统、浏览器版本的设计方案及一些浏览器兼容性问题处理

安卓动态加载SO文件

对浏览器的理解及兼容移动端H5本地化方案调研和实践

自适应网页设计

短信/浏览器唤起APP方案

基础知识

Sonar简介

JVM基础系列1:JVM内存模型介绍

JVM基础系列2:JVM配置参数和Java内存模型

JVM基础系列3  虚拟机字节码执行引擎

开发规范

Java异常处理规范

战略方向

金融保险系统开源浪潮下机遇与挑战

项目实战

客户为中心,统筹协调,把控风险

让我们的管理看的见

cb2cdfca3413fa6f6412c897f088d6c9.pngEND

916400fcdbdbea1555af5c9f3f0af785.gif

请识别下方二维码,关注 技术支持联盟

e75ac982c5f1556ede865fcfbba8c1f9.png

需要交流Sentinel限流技术的,欢迎扫码进群

7f1114b718b9d1dce23593b5115d4036.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值