当前位置: 首页 > news >正文

Sentinel限流中间件

目录

介绍

Sentinel 的特征

Sentinel 的组成

实战使用

简单实例

配置本地控制台

使用可视化ui配置简单流控

配置异步任务限流

使用注解定义限流资源

SpringCloud整合Sentinel

简单整合

 并发线程流控

关联模式 

整合openFeign使用


介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 的特征

丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷(对于突然到来的大量请求,您可以配置流控规则,以稳定的速度逐步处理这些请求,从而避免流量突刺造成系统负载过高)、集群流量控制、实时熔断下游不可用应用等
完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架 / 库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel
完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等

Sentinel 的组成

核心库(Java 客户端): 不依赖任何框架 / 库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持
控制台(Dashboard): 基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器

实战使用

简单实例

准备一个springboot项目.这里不再演示如何创建一个新的springboot项目

添加sentinle必备依赖

<!--        sentinel核心依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.6</version></dependency>

书写接口限流测试

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import jakarta.annotation.PostConstruct;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RestController
public class TestController {@GetMapping("hello")public String hello(){//使用限流规则try (Entry entry = SphU.entry("Hello")){ //限流入口System.out.println("你好");return "你好 sentinel"; //被保护的资源}catch (BlockException e){e.printStackTrace();return "系统繁忙,请稍后"; //被限流或者被降级的操作处理}}/*** 定义限流规则* @PostConstruct  当前类的构造函数执行之后执行*/@PostConstructpublic void initFlowRule(){//创建存放限流规则的集合List<FlowRule> ruleList = new ArrayList<>();//创建限流规则FlowRule rule = new FlowRule();//定义资源 表示Sentinel会对哪个资源生效 相当于做一个标记rule.setResource("Hello");//定义限流规则类型 RuleConstant.Flow_GRADE_QPS: QPS限流类型rule.setGrade(RuleConstant.FLOW_GRADE_QPS);//定义QPS每秒能通过的请求个数rule.setCount(2);//将限流规则存放到集合中ruleList.add(rule);//加载限流规则FlowRuleManager.loadRules(ruleList);}
}

这里配置限流规则为1秒中最多可以通过2次,启动测试:

 可以看到请求过快的话会直接返回接口中配置限流规则后的异常信息,说明sentinel已经初步使用成功

配置本地控制台

sentinel可以通过配置本地控制台ui来进行接口限流的可视化管理,首先需要下载官网提供的可视化jar包

Releases · alibaba/Sentinel · GitHub

当然有下载比较慢的问题,所以也可以在本博主提供的链接里进行下载

sentinel1.8.6-jar阿里云下载

下载后在cmd窗口中运行启动

java -Dserver.port=9000 -jar sentinel-dashboard-1.8.6.jar

 

浏览器地址栏输入localhost:9000进行访问,账号密码默认都是sentinel

 

 此时登录后会发现没有被监控的服务,因为该控制台还没有和本地项目进行关联

关联本地项目需要添加控制台所需依赖

<!--        本地sentinel控制台依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>1.8.6</version></dependency>

然后在idea启动配置中添加启动配置

-Dcsp.sentinel.dashboard.server=localhost:9000   Sentinel控制台的地址和端口号
-Dproject.name=SentinelQuickStart                本地应用在控制台中的名称

这里博主使用的是idea新版ui,和旧版ui可能有些许不同

 

 

 

 

命令配置以空格隔开即可

启动项目后发现sentinel中可能还是没有检测到服务,这里需要重新调用下之前配置的限流规则接口,也就是前面的hello接口,调用后再刷新sentinel页面就可以看到监听的本地服务了

使用可视化ui配置简单流控

前面的流控是在底层书写代码进行限流控制的,还可以使用可视化ui来配置接口的限流策略

首先注释掉之前书写的限流规则

重启项目再测试接口

 

可以看到此时手写的限流规则已失效,切换到sentinel控制台

 

 注意此处的资源名要和后台接口中配置的资源名一致

点击保存

再测试接口

可以看到和之前的手动书写的限流规则一样都起到了接口限流的作用,而且在控制台中也可以看到接口的监控情况

配置异步任务限流

在主启动类中开启允许异步任务

 新建书写一个服务层,并书写异步方法

 

在sentinel中新增流控规则:

启动测试:

 可以看到异步任务的限流也成功监控

使用注解定义限流资源

 前面都是使用的代码方式来进行接口资源的定义,下面使用注解的形式来进行资源定义

首先导入所需依赖

        <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>1.8.6</version></dependency>

书写sentinel注解定义配置类

 书写接口

 测试:

 可以看到基于注解定义的流控资源也已生效

SpringCloud整合Sentinel

简单整合

新建一个springboot项目,引入依赖:

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel</artifactId><version>2.2.0.RELEASE</version></dependency>

书写配置:

server.port=8083
# 设置本地应用名称
spring.application.name=SentinelSpringCloud
# 设置sentinel控制台的地址和端口
spring.cloud.sentinel.transport.dashboard=localhost:9000
#Spring表达你允许循环依赖存在,并且希望Spring能够自动解决这些循环依赖关系。启用此配置后,
# Spring会尝试自动解决循环依赖,以支持相关Bean之间的相互引用。
spring.main.allow-circular-references=true

 书写接口: 

启动项目

输入之前的 命令启动下载的可视化jar包

java -Dserver.port=9000 -jar sentinel-dashboard-1.8.6.jar

在控制台中添加限流策略资源

 

调用接口测试

 并发线程流控

并发线程数
并发数控制用于保业务线程池不被慢调用耗尽,例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延增加对于调用者来说,意味着否叫量下降和更多的线程教占用,极端值下其至导致线程池耗尽,为应对大多线程占用的情况,业内有使用隔离的方案,比通过不同业务逻使用不同线程池来隔富业务自身之间的资源争抢线程池离),这种属富方案虽然爆宫性比较好,但是代价就是线程数目大多,线程上下文切换的 ovehead 比大,特别是对低延的调用有比较的影响,Sein 并发控制不负责创建和管理池,而是简单统计当前请求上下文的线数目(正在执行的调用数目),如果超出闻值,新的请求会被立即拒绝,效果类似于信号量隔离。并发数控制涌常在调用端进行配置

调整接口

新增流控规则时选择并发线程数

 启动测试:

关联模式 

关联当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数一个字段的读和写操作存在争抢,读的速度过高会影响写得速度,写的违度过高会影响读的速度如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的否量,可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,tead h 和 mite h 这两个资源分别代表数车读写,我们同以给 read  设置限流规达到优先的目的:设置 strate 为 1etatSIRTECT L时设置 eert 为 te这当/于时教据的会被限流

举例 生成订单和查询订单,当生成订单接口访问过高时,被关联的查询订单接口被限流

书写接口:

控制台中创建限流规则

 

 

正常测试:

 

这里手动点击很难看到限流作用,所以使用一些压测工具进行测试.可以使用传统压测工具jemter进行压测,这里使用apipost进行压测

 

对生成订单进行接口压测,然后查看查询订单接口是否服务降级 

 可以看到对生成订单进行压测,关联的查询订单却受到了流控服务降级

整合openFeign使用

首先准备一个最少有两个服务的微服务项目并将服务注册到nacos中,这样可以进行服务之间的远程调用,从而使用openFeign再整合sentinel 这里不再从头演示,具体使用openFeign可以查看博主之前文章

这里准备一个生产者服务,一个消费者服务

在生产者中新建接口

在消费者中创建fen接口进行远程调用生产者接口

控制层书写接口调用

 启动测试:

调用消费者接口,消费者通过openFeign调用生产者的接口,说明此时接口已经调通

更改接口,手动添加错误异常,从而模拟服务降级场景,从而使用sentinel进行整合服务降级

 

重启调用接口查看异常效果:

 

 整合sentinel进行服务降级

配置中开启fen对sentinel使用

创建服务降级服务实现fen服务

 

 设置服务降级服务接口

启动测试:

 

相关文章:

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…...

使用ajax进行前后端交互的方法

使用ajax进行前后端交互的方法&#xff1a;&#xff08;我只测试通了json对象作为参数的方式&#xff0c;其他方式我没有测试通过&#xff09; 1、前端方法&#xff1a; 传参方式&#xff1a;POST 请求类型&#xff1a;json对象 响应类型&#xff1a;json对象 function test() …...

动手学深度学习——线性回归从零开始

生成数据集synthetic_data()读取数据集data_iter()初始化模型参数w, b定义模型&#xff1a;线性回归模型linreg()定义损失函数&#xff1a;均方损失squared_loss()定义优化算法&#xff1a;梯度下降sgd()进行训练&#xff1a;输出损失loss和估计误差 %matplotlib inline impor…...

Redis缓存击穿

Redis缓存击穿是指在使用Redis作为缓存时&#xff0c;某个热点数据过期或不存在&#xff0c;导致大量请求直接打到后端存储系统&#xff08;例如数据库&#xff09;&#xff0c;使得后端系统压力骤增&#xff0c;性能下降的情况。这种情况通常发生在热点数据失效的瞬间。 缓存…...

网络安全(黑客)自学的一些建议

1.选择方向 首先是选择方向的问题&#xff0c;网络安全是一个很宽泛的专业&#xff0c;包含的方向特别多。比如 web安全&#xff0c;系统安全&#xff0c;无线安全 &#xff0c;二进制安全&#xff0c;运维安全&#xff0c;渗透测试&#xff0c;软件安全&#xff0c;IOT安全&a…...

全志F1C200S嵌入式驱动开发(基于usb otg的spi-nor镜像烧入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面既然已经搞定了spi-nor驱动,那么下一步考虑的就是怎么从spi-nor flash上面加载uboot、kernel和rootfs。目前spi-nor就是一块白片,上面肯定什么都没有,那么这个时候,我们要做…...

如何恢复损坏/删除的 Word 文件

有关如何修复不可读的 Microsoft Word 文件或 Rich Text 文件中的文本的分步说明。这些说明有助于从损坏的*.doc、*.docx、*.dot、*.dotx、*.rtf文件&#xff08;任何版本和大小&#xff09;中提取文本&#xff0c;只需单击几下&#xff1a; 从此处下载奇客数据恢复 &#xff…...

【论文阅读】Feature Inference Attack on Shapley Values

摘要 研究背景 近年来&#xff0c;解释性机器学习逐渐成为一个热门的研究领域。解释性机器学习可以帮助我们理解机器学习模型是如何进行预测的&#xff0c;它可以提高模型的可信度和可解释性。Shapley值是一种解释机器学习模型预测结果的方法&#xff0c;它可以计算每个特征对…...

TDesign 中后台系统搭建

目录 1 模板安装2 启动项目3 添加页面总结 一般如果希望开发小程序&#xff0c;是要给使用的用户提供一套中后台系统来管理数据的。现在中后台系统开源项目也比较多&#xff0c;本篇我们介绍一个腾讯开源的TDesign模板。 1 模板安装 先要在电脑里安装好nodejs&#xff0c;搜索…...

Android 实现阅读用户协议的文字控件效果

开发中&#xff0c;经常要用到一些阅读隐私协议的场景&#xff0c;原生的textview控件很难做到在一个控件里有两个点击事件&#xff0c;那现在就来安利一个强大的组件——SpannableStringBuilder。 先看看效果&#xff1a; 直接上代码&#xff0c;布局文件&#xff1a; <Li…...

19.主题时钟

主题时钟 html部分 <div class"btn">黑色</div><div class"clock-container"><div class"time">21</div><div class"date">21</div><div class"clock"><div class&qu…...

ChatGPT在智能电子设备中的应用如何?

ChatGPT在智能电子设备中有着广泛的应用潜力&#xff0c;可以为电子设备提供更智能、更个性化的用户体验&#xff0c;并为用户提供更多便利和高效的功能和服务。智能电子设备是指通过集成计算机、传感器、网络和人工智能等技术&#xff0c;实现智能化的功能和交互的设备。ChatG…...

MGRE之OSPF实验

目录 题目&#xff1a; 步骤二&#xff1a;拓扑设计与地址规划​编辑 步骤三&#xff1a;IP地址配置 步骤四&#xff1a;缺省路由配置 步骤五&#xff1a;NAT的配置 步骤六&#xff1a;MGRE配置 中心站点R1配置 分支站点配置 中心站点R5 R1配置 分支站点配置 检测&…...

【Selenium+Pytest+allure报告生成自动化测试框架】附带项目源码和项目部署文档

目录 前言 【文章末尾给大家留下了大量的福利】 测试框架简介 首先管理时间 添加配置文件 conf.py config.ini 读取配置文件 记录操作日志 简单理解POM模型 简单学习元素定位 管理页面元素 封装Selenium基类 创建页面对象 简单了解Pytest pytest.ini 编写测试…...

如何负载均衡中的日志统一管理

详细部署步骤&#xff1a;将负载均衡中的日志统一管理 调研和规划 确定日志管理的需求和目标。调研可用的日志收集工具和中心化存储系统。 选择合适的日志收集工具 根据需求选择适合负载均衡环境的日志收集工具&#xff0c;如Logstash、Fluentd或Filebeat。 在负载均衡服务器…...

Java_26_Stream流

Stream 什么是Stream流&#xff1f; 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0c; 引入了一个全新的Stream流概念 &#xff0c;用于解决已有集合/数组类库有的弊端。 Stream流能解决什么问题? 可以解决已有集合类库或者数组API的弊端。 Stream认为集合…...

周四见 | 物流人的一周资讯

京东支付年活跃用户数超1.9亿 7月27日消息&#xff0c;京东科技发布2022年环境、社会及公司治理报告。报告显示&#xff0c;在推动社会公平方面&#xff0c;2022年京东科技帮助超207万家中小微企业实现数智化转型&#xff0c;为42万中小微企业提供贷款&#xff0c;节省融资成本…...

uniapp 即时通讯开发流程详解

今天我将为您详细介绍UniApp开发中的即时通讯流程。本文将向您展示如何在UniApp中实现即时通讯功能&#xff0c;为您的应用程序增添交互性和实时性。 1. 准备工作 在开始开发之前&#xff0c;确保您已完成以下准备工作&#xff1a; 确保您已经安装好UniApp开发环境&#xff…...

【Terraform学习】Terraform-docker部署快速入门(快速入门)

Terraform-docker部署快速入门 实验步骤 创建 EC2 IAM 角色 导航到IAM 在左侧菜单中&#xff0c;单击角色 。单击创建角色该按钮以创建新的 IAM 角色。 在创建角色部分&#xff0c;为角色选择可信实体类型&#xff1a; AWS 服务 使用案例:EC2 单击下一步 添加权限&#x…...

C# 全局响应Ctrl+Alt+鼠标右键

一、简述 某些应用&#xff0c;我们希望全局自定义热键。按键少了会和别的应用程序冲突&#xff0c;按键多了可定用户操作不变。因此我计划左手用CtrlAlt&#xff0c;右手用鼠标右键呼出我自定义的菜单。 我使用键盘和鼠标事件进行简单测试&#xff08;Ctrl鼠标右键&#xff…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...