【Sentinel】Sentinel超简单入门,一看就懂!!!

sentinel入门

  • 一、什么是Sentinel
    • 1.1、流量控制
    • 1.2、熔断降级
    • 1.3、热点参数限流
    • 1.4、系统负载保护
  • 二、资源和规则的概念
  • 三、Sentinel工作主流程
  • 四、代码初体验
  • 五、集成控制台

在这里插入图片描述

一、什么是Sentinel

Sentinel 是阿里巴巴开源的流量控制组件,主要用来保护微服务和分布式系统,防止因为流量过大或服务故障导致系统崩溃。可以简单理解为它是一个“保护盾”,用来保障系统的稳定性和高可用性。下面是几个通俗易懂的例子来说明 Sentinel 的作用:

1.1、流量控制

想象你是一家餐馆的老板,餐馆座位有限,突然来了很多客人,如果不加控制,餐馆很容易超负荷运转,服务质量下降。Sentinel 就像一个门卫,当客人太多时,会限制进入的人数,保证每个进来的人都能享受到优质的服务。

例子:你设置餐馆的座位数为100,当店内人数达到100时,Sentinel 会暂时阻止新的客人进入,直到有空位出现。

1.2、熔断降级

如果餐馆的厨师突然生病,菜品的质量和出餐速度都会受到影响。Sentinel 就像一个智能系统,当发现菜品质量下降时,会主动通知客人暂停点菜,等厨师恢复状态再继续接单。

例子:当你的系统某个服务响应时间变得很慢或不可用时,Sentinel 会暂时停止对该服务的调用,防止因为这个问题影响到整个系统。

1.3、热点参数限流

有时候某些菜品特别受欢迎,比如限量的招牌菜,可能会被一抢而空。Sentinel 可以对这些热门菜品进行限流,确保更多的客人都有机会尝到。

例子:你设置每个客人只能点一份招牌菜,当有客人重复点这道菜时,Sentinel 会进行限制。

1.4、系统负载保护

假如你的餐馆有一定的厨房容量,一次性接收太多订单可能会导致厨房忙不过来。Sentinel 会监控整个系统的负载情况,保证不会超出承受范围。

例子:当系统的 CPU 使用率超过设定阈值时,Sentinel 会自动降低请求的通过率,确保系统在高负载下仍能稳定运行。

二、资源和规则的概念

首先要了解两个概念“资源”和“规则”。资源是Sentinel中的一个关键概念,它可以是任何东西,比如服务、方法甚至是代码片段。一旦它被Sentinel API包装,它就被定义为资源,可以申请由Sentinel提供的保护。而规则是Sentinel保护资源的方式,如流量控制、并发限制和断路规则。规则可以动态修改,实时生效。

三、Sentinel工作主流程

整个限流熔断的过程是基于Slot chain实现的,而Slot chain内部是使用链表来实现。在 Sentinel 里面,所有的资源都对应一个资源名称(resourceName),每次资源被调用都会创建一个Entry对象。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用SphU API显式创建。Entry 创建的时候,同时创建一系列功能插槽(slot chain),这些插槽有不同的职责,例如:

  • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;

  • ClusterBuilderSlot 用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;

  • StatisticSlot 则用于记录、统计不同维度的 runtime 指标监控信息;

  • FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;

  • AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;

  • DegradeSlot 通过统计信息以及预设的规则,来做熔断降级;

  • SystemSlot 通过系统的状态,例如 load1 等,来控制总的入口流量;

图1  工作流程图

四、代码初体验

添加POM依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.6.3</version>
</dependency>

使用代码控制访问QPS<=2,当1秒内访问次数<=2时,网页返回Hi,sentinel......!!!;当1秒内访问次数>=2时,网页返回busy...........

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 org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;/*** @author hanson.huang* @version V1.0* @ClassName Sentinel* @Description TODO* @date 2024/7/26 15:30**/
@RestController
public class Sentinel {/*** 处理 /sentinel 的 GET 请求。* 该方法尝试进入一个 Sentinel 保护的资源。* 如果由于流量控制导致资源被阻止,则捕获 BlockException 并返回 "busy" 消息。* 否则,返回成功消息。** @return 表示请求是否成功或被阻止的字符串。*/@GetMapping("sentinel")public String sentinel() {// 声明一个Entry对象,用于后续的资源保护Entry entry = null;try {// 尝试进入资源保护,如果流量超过限制,会抛出BlockExceptionSphU.entry("sentinel");// 如果没有抛出异常,则返回成功消息return "Hi, sentinel......!!!";} catch (BlockException e) {// 如果流量超过限制,捕获BlockException并打印堆栈信息,返回繁忙消息e.printStackTrace();return "busy......!!!";} finally {// 确保在最终块中退出Entry,释放资源if (entry != null) {entry.exit();// 这个return语句会覆盖上面的return,因此不会被执行到return "this is final";}}}/*** 初始化流量控制规则。* 在 Spring 容器初始化时执行,用于设置 Sentinel 的流量控制规则。* 这里将资源 "sentinel" 的 QPS 限制设置为 2。*/@PostConstructprivate static void initFlowRules() {// 创建一个FlowRule列表,用于存储流量控制规则List<FlowRule> rules = new ArrayList<>();// 创建一个新的FlowRule对象,设置流量控制的相关参数FlowRule rule = new FlowRule();// 设置受保护的资源名称为"sentinel"rule.setResource("sentinel");// 设置流量控制的方式为QPS(每秒查询率)rule.setGrade(RuleConstant.FLOW_GRADE_QPS);// 设置QPS的阈值为2,即每秒最多允许2次访问rule.setCount(2);// 将这个流量控制规则添加到规则列表中rules.add(rule);// 加载这些规则到FlowRuleManager中,使其生效FlowRuleManager.loadRules(rules);}
}

来回刷新请求这个接口会爆busy…!!!

在这里插入图片描述
在这里插入图片描述

五、集成控制台

https://github.com/alibaba/Sentinel/releases

在这里插入图片描述
控制台是一个jar包,在该目录下打开cmd窗口,输入如下命令进行启动(要改成你下载的包名,我这里是sentinel-dashboard-1.8.8.jar):

java -Dserver.port=8083 -Dcsp.sentinel.dashboard.server=localhost:8083 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.8.jar

访问:http://127.0.0.1:8083

在这里插入图片描述

登录Sentinel控制台后,服务端不会第一时间注册到Sentinel控制台,需要主动触发下资源接口。( 初始账号密码均为sentinel

POM文件添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>com.csdn.dev</groupId><artifactId>csdn-dev-boot</artifactId><version>${revision}</version></parent><packaging>jar</packaging><modelVersion>4.0.0</modelVersion><artifactId>sentinel-demo</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version><sentinel.transport.version>1.6.3</sentinel.transport.version><sentinel.annotation.aspectj>1.6.3</sentinel.annotation.aspectj><spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version></properties><dependencies><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.6.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--Sentinel集成控制台--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>${sentinel.transport.version}</version></dependency><!--Sentinel注解依赖--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>${sentinel.annotation.aspectj}</version></dependency><!--Sentinel集成SpringCloud--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel</artifactId><version>${spring-cloud-alibaba.version}</version></dependency></dependencies>
</project>
server:port: 10000
spring:application:name: csdn-sentinel-democloud:nacos:discovery:server-addr: 127.0.0.1:8848sentinel:transport:dashboard: localhost:8083

在这里插入图片描述
启动项目成功后,在浏览器中访问接口地址,正常情况下网页会出现Hello sentinel,当访问量>2时,会返回this is helloblockHandler.....

在这里插入图片描述
在这里插入图片描述

代码:GItHub

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488851.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Can we Deploy Web Application in Azure OpenAI of Production Level

题意&#xff1a;我们可以在Azure OpenAI中部署生产级别的Web应用程序吗 问题背景&#xff1a; I have created azure ai search service and used Text split skillset and made index. I also deployed a web Application but have a question that If I want to create to …

《Milvus Cloud向量数据库指南》——BGE-M3:多功能、多语言、多粒度的文本表示学习模型

引言 在自然语言处理(NLP)领域,随着大数据时代的到来,对文本信息的精准处理与高效检索成为了研究热点。BERT(Bidirectional Encoder Representations from Transformers)作为近年来NLP领域的里程碑式模型,以其强大的上下文理解能力在多项任务中取得了显著成效。然而,面…

鼠标视觉特效ClickShow

录课、直播都希望能清晰看到鼠标在屏幕上的移动轨迹以及点击动作。WIndows默认是不支持的&#xff0c;为此我找了好久&#xff0c;终于在开源平台github上找到一个精品&#xff0c;这个软件就叫ClickShow。 1.软件基本信息 官网&#xff1a;GitHub - cuiliang/ClickShow: 鼠标…

DolphinDB Web 端权限管理:可视化操作指南

在现代数据库管理中&#xff0c;高效和直观的权限管理对于用户的数据安全是至关重要的。过去 DolphinDB 用户需要依赖系统脚本来管理用户和权限&#xff0c;这对于缺乏技术背景的管理员来说既复杂又容易出错。 为了提升用户体验和操作效率&#xff0c;DolphinDB 目前在 Web 上…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

如何评价估计量的好坏

目录 三大方法 概念 无偏性 如何计算估计量的无偏性&#xff1f; 步骤 有效性 有效性在不同类型的数据分析中如何评估&#xff1f; 步骤 一致性 一致性原则在实际应用中的挑战有哪些&#xff1f; 挑战 在大样本情况下&#xff0c;如何准确测量估计量的一致性&#xf…

Linux 安装 GDB (无Root 权限)

引入 在Linux系统中&#xff0c;如果你需要在集群或者远程操作没有root权限的机子&#xff0c;安装GDB&#xff08;GNU调试器&#xff09;可能会有些限制&#xff0c;因为通常安装新软件或更新系统文件需要管理员权限。下面我们介绍可以在没有root权限的情况下安装GDB&#xf…

网络安全科普:网络准入控制系统哪个软件最好?

场景&#xff1a; 企业会议室&#xff0c;两人正在进行关于网络安全的讨论。 张无忌&#xff1a;&#xff08;翻阅资料&#xff09;赵姑娘&#xff0c;我听说网络准入控制系统&#xff08;NAC&#xff09;是提升网络安全的重要手段&#xff0c;但具体它有哪些功能呢&#xff1f…

Linux构建远程YUM仓库与NFS共享存储服务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下&#xff0c;初始分支称为 main; 如果使用 Git 2.28.0 或更高版本&#xff0c;则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本&#xff0c;则可以使用 git symbo…

<数据集>水果识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;10012张 标注数量(xml文件个数)&#xff1a;10012 标注数量(txt文件个数)&#xff1a;10012 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Watermelon, Orange, Grape, Apple, peach, Banana, Pineapple] 序…

Redis常用指令(不定期更新)

Redis常用指令&#xff08;不定期更新&#xff09; 查询指定前缀key的数量查看键空间事件开启键空间通知 查询指定前缀key的数量 查询【TEST前缀】的key数量 EVAL "return #redis.call(keys,TEST:*)" 0返回信息 查看键空间事件 config get notify-keyspace-even…

Python | Leetcode Python题解之第284题窥视迭代器

题目&#xff1a; 题解&#xff1a; class PeekingIterator:def __init__(self, iterator):self.iterator iteratorself._next iterator.next()self._hasNext iterator.hasNext()def peek(self):return self._nextdef next(self):ret self._nextself._hasNext self.itera…

AI绘画美女图如何带货? 分享最容易的起号方式,一定别错过!!

学习AI绘画最好的工具有两种。 一个是Midjourney&#xff0c;新手只需要知道提示词怎么写就可以了。 不懂得写&#xff0c;就直接去抄&#xff0c;去复制粘贴&#xff0c;AI绘画最值得鼓励的就是抄。 先学会抄&#xff0c;再考虑改&#xff0c;国外有很多设计师赚钱的方式就…

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查&#xff0c;然后自己用本地的环境&#xff0c;在自己建的库里面进行了sql语句的测试&#xff0c;主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…

原型图设计指南:从基础到精通

用户体验设计师和原型设计的主要功能 PM、网站开发工程师通过展示产品内容、结构和粗略布局来沟通最初产品设想的重要工具&#xff0c;说明用户将如何与产品互动&#xff0c;而不是视觉设计。在大厂中&#xff0c;岗位分工更加细致明确&#xff0c;大部分原型都是产品经理做的&…

【Linux】线程互斥和同步

目录 线程互斥 相关概念 互斥量mutex 互斥量的接口 初始化互斥量 销毁互斥量 互斥量加锁/解锁 可重入VS线程安全 概念 可重入与线程安全的联系 可重入与线程安全的区别 死锁 死锁的四个必要条件 避免死锁 避免死锁的算法 线程同步 条件变量 条件变量函数 初始…

Stable Diffusion WebUI本地环境搭建

一、项目代码下载 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui 二、环境配置 conda create --n stafu python3.10.6 实际上跟自己创建的环境没有关系&#xff0c;项目启动会自动复制这个环境&#xff0c;之后项目根据这个基础环境构建 也可以在自己…

UE5.4内容示例(1)- 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例&#xff0c;可以用此示例熟悉一遍UE5的功能 模型与材质部分 StaticMeshes FBX_Import_Options Material_Advanced Material_Decals Material_Instances Material_N…

5G智能防爆手持终端在石油化工行业中扮演着什么角色?

5G智能防爆手持终端在石油化工行业中扮演着至关重要的角色&#xff0c;主要体现在以下几个方面&#xff1a; 一、确保安全生产 防爆设计&#xff1a;石油化工行业的工作环境往往存在易燃易爆的危险&#xff0c;5G智能防爆手持终端采用特殊材料和设计&#xff0c;能够在这些极端…