微服务-sentinel详解

文章目录

  • 一、前言
  • 二、知识点主要构成
    • 1、sentinel基本概念
      • 1.1、资源
      • 1.2、规则
    • 2、sentinel的基本功能
      • 2.1、流量控制
      • 2.2、熔断降级
    • 3、控制台安装
      • 3.1、官网下载jar包
      • 3.2、启动控制台
    • 4、项目集成 sentinel
      • 4.1、依赖配置
      • 4.2、配置文件中配置sentinel控制台地址信息
      • 4.3、配置流控
        • 4.3.1、流控
        • 4.3.2、熔断
          • 慢调用比例
          • 异常比例
          • 异常数
        • 4.3.3、授权
        • 4.3.4、热点
    • 5、sentinel+nacos持久化流控规则
      • 5.1、修改配置文件
      • 5.2、修改sentinel配置
  • 三、总结提升

一、前言

在分布式系统领域,流量控制和系统熔断是保障系统稳定性和可用性的重要手段。Spring Cloud作为微服务架构的代表性框架,提供了多种流量控制和熔断的组件。其中,Sentinel是阿里巴巴出品的一款专门用于流量控制和系统熔断的组件,它具有轻量级、高性能、易用性等优点。

本文将详细介绍Sentinel的各个方面,包括其基本概念、核心功能、使用方法以及与Spring Cloud其他组件的集成。通过本文的阅读,您将了解到如何使用Sentinel实现流量控制和系统熔断,并掌握如何在实际应用中进行Sentinel的配置和使用。

二、知识点主要构成

1、sentinel基本概念

1.1、资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

1.2、规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

2、sentinel的基本功能

2.1、流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:
在这里插入图片描述
流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

2.2、熔断降级

什么是熔断降级

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。
在这里插入图片描述

3、控制台安装

3.1、官网下载jar包

博主这里给大家演示使用的是sentinel1.8.4的版本,下载地址sentinel-1.8.4

3.2、启动控制台

下载完之后,直接启动jar包,就可以看到sentinel的控制台页面了;
在这里插入图片描述
访问localhost:8080即可打开控制台页面,默认的账号sentinel,密码也是sentinel

在这里插入图片描述
进来之后我们只能看到一个首页页面,那是因为我们没有一个项目和sentinel进行集成,集成之后当项目的某个接口被调用之后就可以在sentinel的控制台对其进行配置流控等规则了;
在这里插入图片描述
在这里插入图片描述

4、项目集成 sentinel

4.1、依赖配置

引入相关依赖:SpringBoot、SpringCloudAlibaba、SpringCloudAlibaba-Sentinel
先来看一下我的项目结构:
在这里插入图片描述
这里我们在父pom中引入SpringBoot和Spring Cloud Alibaba的相关依赖

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent><!--版本管理-->
<properties><java.version>11</java.version><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
</properties><!--依赖管理-->
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

子pom中引入sentinel的依赖和springboot的web模块

<!--sentinel相关依赖-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--springbootweb模块相关-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

4.2、配置文件中配置sentinel控制台地址信息

server:port: 9000servlet:context-path:spring:application:name: user-democloud:sentinel:transport:dashboard: localhost:8080 # 控制台地址port: 9000 # 启动该服务,会在应用程序的相应服务器上启动HTTP Server,并且该服务器将与Sentinel dashboard进行交互#这个端口是自己项目服务器所要开放的端口,不然会出现sentinel控制台上显示有服务注册进来,#这里是配置的一个开始端口号,每一个服务都需要使用一个端口号来和sentinel控制台进行交互,#如果当前配置的端口号被占用以后会在该端口号基础上自动加1进行连接,如果还是被占用则继续加1进行连接,直到连接成功位置。

4.3、配置流控

在这里插入图片描述
在簇点链路中可以看到我们刚刚进行调用的接口,在这里可以给这个接口进行配置:流控、熔断、热点、授权

4.3.1、流控

这里为给大家展示效果就简单配置了一个流控规则:资源名就是我们被调用的接口路径,阈值类型选择了QPS,阈值为1。这里还需根据实际项目的QPS大小来决定阈值具体为多少,也可根据并发线程数来进行选择;
在这里插入图片描述
配置好流控规则后,我们再次调用接口可发现流控规则已经生效了:
在这里插入图片描述

4.3.2、熔断

熔断这里给大家介绍以下几种熔断策略吧,由于是demo展示,demo没有部署成集群的形式,接口只是一个简单查询,不容易出现慢调用的情况。

慢调用比例

慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。
在这里插入图片描述

异常比例

异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
在这里插入图片描述

异常数

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。
在这里插入图片描述

4.3.3、授权

授权相对来说就比较好理解了,这里指调用方的ip,如果是多个ip的话可以用英文的逗号隔开。
在这里插入图片描述

4.3.4、热点

热点配置,也就是请求中的热点参数进行限流,当设定限流的参数达到阈值时,执行限流;
先来准备一个带参数的API
在这里插入图片描述
可以看到我们给getAllUser接口,添加了SentinelResource注解,再次调用该接口,可以看到sentinel控制台中会增加一个资源。
在这里插入图片描述
接下来就是要给这个名为hot的资源配置热点规则:参数索引就是getAllUser这个接口入参的索引,0指第一个参数,1指第二个参数等。
在这里插入图片描述
当我们多次调用该接口时,超过该参数配置的阈值就会报错:
在这里插入图片描述

5、sentinel+nacos持久化流控规则

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。但是sentinel 无法持久化流量防控的规则,当项目重新启动的时候就要重新配置相关的流控规则了,接下来带大家看一下sentinel结合nacos如何持久化流控规则。

5.1、修改配置文件

在sentinel下面增加sentinel的datasource相关配置;

spring:application:name: user-democloud:sentinel:transport:dashboard: localhost:8080 # 控制台地址port: 9000 # 启动该服务,会在应用程序的相应服务器上启动HTTP Server,并且该服务器将与Sentinel dashboard进行交互#这个端口是自己项目服务器所要开放的端口,不然会出现sentinel控制台上显示有服务注册进来,#这里是配置的一个开始端口号,每一个服务都需要使用一个端口号来和sentinel控制台进行交互,#如果当前配置的端口号被占用以后会在该端口号基础上自动加1进行连接,如果还是被占用则继续加1进行连接,直到连接成功位置。datasource:# 流控规则flow:nacos:server-addr: localhost:8848namespace: sentinel-testgroup-id: DEFAULT_GROUPdata-id: ${spring.application.name}-sentinel-flow-rules# 规则类型:flow、degrade、param-flow、system、authoritydata-type: jsonrule-type: flow# 熔断降级degrade:nacos:server-addr: localhost:8848namespace: sentinel-testgroup-id: DEFAULT_GROUPdata-id: ${spring.application.name}-sentinel-degrade-rulesrule-type: degrade# 热点规则param-flow:nacos:server-addr: localhost:8848namespace: sentinel-testgroup-id: DEFAULT_GROUPdata-id: ${spring.application.name}-sentinel-param-flow-rulesrule-type: param-flow# 系统规则system:nacos:server-addr: localhost:8848namespace: sentinel-testgroup-id: DEFAULT_GROUPdata-id: ${spring.application.name}-sentinel-system-rulesrule-type: system# 授权规则authority:nacos:server-addr: localhost:8848namespace: sentinel-testgroup-id: DEFAULT_GROUPdata-id: ${spring.application.name}-sentinel-authority-rulesrule-type: authority

5.2、修改sentinel配置

如果是下载的sentinel的源码的话我们可以直接打开项目修改配置信息:

server.port=8080
nacos.server-addr=localhost:8848
nacos.namespace=sentinel-test
nacos.group=DEFAULT_GROUP

如果是直接下载的jar包,可以在启动jar的时候通过命令来指定这些配置信息:
nohup java -Dnacos.server-addr=localhost:8848 -Dnacos.namespace=sentinel-test -Dnacos.group=DEFAULT_GROUP -jar sentinel-dashboard-1.8.4.jar

三、总结提升

以上是sentinel相关流控规则以及配置持久化的全部过程,至于如何配置流控参数,还要根据在项目中的实际情况来配置,Sentinel是一个强大的分布式服务流量控制组件,具有强大的功能和广泛的应用场景。通过使用Sentinel,可以提高系统的稳定性和安全性,降低运营成本。

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python之父加入微软三年后,Python嵌入Excel!

近日&#xff0c;微软传发布消息&#xff0c;Python被嵌入Excel&#xff0c;从此Excel里可以平民化地进行机器学习了。只要直接在单元格里输入“PY”&#xff0c;回车&#xff0c;调出Python&#xff0c;马上可以轻松实现数据清理、预测分析、可视化等等等等任务&#xff0c;甚…

音频基本知识

声音传播方式: 1)声音的传播需要介质,在真空中不能传播; 2)声波属于纵波,即如下图传播方向与振动方向一致; 声音速度: 1)常温常压下,一般空气速度为340m/s; 2)温度越高,声速越大; 3)液体、固体的传播速度比空气快; 人耳可接收到的频域范围: 1)通常范围…

Ansible自动化运维工具(三)

目录 Ansible 的脚本 --- playbook 剧本 ​编辑2.vars模块实战实例 3.指定远程主机sudo切换用户 4.when模块实战实例 5.with_items迭代模块实战实例 6.Templates 模块实战实例 &#xff08;1&#xff09;先准备一个以 .j2 为后缀的 template 模板文件&#xff0c;设置引用…

链表OJ练习(2)

一、分割链表 题目介绍&#xff1a; 思路&#xff1a;创建两个链表&#xff0c;ghead尾插大于x的节点&#xff0c;lhead尾插小于x的节点。先遍历链表。最后将ghead尾插到lhead后面&#xff0c;将大小链表链接。 我们需要在创建两个链表指针&#xff0c;指向两个链表的头节点&…

Node基础and包管理工具

Node基础 fs 模块 fs 全称为 file system&#xff0c;称之为 文件系统&#xff0c;是 Node.js 中的 内置模块&#xff0c;可以对计算机中的磁盘进行操作。 本章节会介绍如下几个操作&#xff1a; 1. 文件写入 2. 文件读取 3. 文件移动与重命名 4. 文件删除 5. 文件夹操作 6. …

python“魂牵”京东商品历史价格数据接口(含代码示例)

要通过京东的API获取商品详情历史价格数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品详情历史价格数据&#xff1a; 首先&#xff0c;确保您已注册成为京东开放平台的开发者…

[SpringBoot3]博客管理系统(源码放评论区了)

八、博客管理系统 创建新的SpringBoot项目&#xff0c;综合运用以上知识点&#xff0c;做一个文章管理的后台应用。依赖&#xff1a; Spring WebLombokThymeleafMyBatis FrameworkMySQL DriverBean Validationhutool 需求&#xff1a;文章管理工作&#xff0c;发布新文章&…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第五、六节:边界描述和矩描述

文章目录 一&#xff1a;边界描述&#xff08;1&#xff09;边界链码A&#xff1a;概述B&#xff1a;边界链码改进C&#xff1a;程序 &#xff08;2&#xff09;傅里叶描绘子A&#xff1a;概述B&#xff1a;程序 二&#xff1a;矩描述&#xff08;1&#xff09;矩A&#xff1a;…

SpringBoot-学习笔记(基础)

文章目录 1. 概念1.1 SpringBoot快速入门1.2 SpringBoot和Spring对比1.3 pom文件坐标介绍1.4 引导类1.5 修改配置1.6 读取配置1.6.1 读取配置信息1.6.2 读取配置信息并创建类进行封装 1.7 整合第三方技术1.7.1 整合JUnit1.7.1 整合Mybatis1.7.1 整合Mybatis-Plus1.7.1 整合Drui…

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase

8 月 1 日&#xff0c;理想汽车公布 7 月交付数据&#xff0c;理想汽车 2023 年 7 月共交付新车 34,134 辆&#xff0c;同比增长 227.5%&#xff0c;并已连续两个月交付量突破三万。至此&#xff0c;理想汽车 2023 年累计交付量已经达到 173,251 辆&#xff0c;远超 2022 年全年…

K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(下)

温故知新 &#x1f4da;第三章 Kubernetes各组件部署&#x1f4d7;安装kubectl&#xff08;可直接跳转到安装kubeadm章节&#xff0c;直接全部安装了&#xff09;&#x1f4d5;下载kubectl安装包&#x1f4d5;执行kubectl安装&#x1f4d5;验证kubectl &#x1f4d7;安装kubead…

FLASH读写数据

目录 嵌入式 Flash大概了解 数据手册2.3.2章节 结构图f407 等待周期 Flash 控制寄存器解锁 编程/擦除并行位数 擦除 编程&#xff08;写入&#xff09; 工程程序 嵌入式 Flash大概了解 可以从flash区域启动程序&#xff1b;大概是程序区可以在flash&#xff0c;所以是可以…

JavaScript实现系统级别的取色器、EyeDropper、try、catch、finally

文章目录 效果图htmlJavaScript关键代码EyeDroppertry...catch颜色值相减(色差)的传送门 效果图 html <div class"d_f fd_c ai_c"><button id"idBtn" class"cursor_pointer">开始取色</button><div id"idBox" c…

PocketMiner:基于深度学习发现蛋白的隐式口袋

文章目录 1. 文章简介2. 前言3. 方法3.1 模型框架 4. 结果4.1 已知隐式口袋在分子动力学模拟分析迅速打开4.2 图神经网络模型能够准确预测模拟中口袋的动态变化4.3 隐式口袋数据集数据集揭示了新的隐式口袋形成的模式4.4 PocketMiner能够从无配体的蛋白结构中精准预测预测口袋4…

TBOX开发需求说明

TBOX功能需求&#xff1a; 支持4G上网功能&#xff0c;可获取外网IP&#xff0c;可和云端平台连通支持路由功能&#xff0c;支持计算平台、网关和云端平台建立网络连接支持USB转网口&#xff0c;智能座舱会通过USB连接AG35建立网络连接&#xff08;类似IVI通过USB口连接TBOX&a…

linux中dmesg命令用法

在Linux系统中&#xff0c;dmesg&#xff08;diagnostic message&#xff09;是一个非常有用的命令行工具&#xff0c;用于显示和控制内核环形缓冲区中的消息。这些消息通常包含系统启动时的内核生成的信息&#xff0c;例如硬件设备的状态&#xff0c;驱动程序的加载&#xff0…

浅析Linux SCSI子系统:错误恢复

文章目录 概述SCSI错误恢复处理添加错误恢复命令错误恢复线程scsi_eh_ready_devs IO超时处理相关参考 概述 IO路径是一个漫长的过程&#xff0c;从SCSI命令请求下发到请求完成返回&#xff0c;中间的任何一个环节出现问题都会导致IO请求的失败。从SCSI子系统到低层驱动&#x…

【云原生】Ansible自动化批量操作工具playbook剧本

目录 1.playbook相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 2.1 playbook编写Apache安装剧本&#xff08;yum方式安装&#xff09; 报错集&#xff1a; 实例2&#xff1a;playbook编写nginx 的yum安装并且能修改其监听端口的…

认识JVM的内存模型

从上一节了解到整个JVM大的内存区域&#xff0c;分为线程共享的heap&#xff08;堆&#xff09;&#xff0c;MethodArea&#xff08;方法区&#xff09;&#xff0c;和线程独享的 The pc Register&#xff08;程序计数器&#xff09;、Java Virtual Machine Stacks&#xff08;…

MVC,MVP,MVVM的理解和区别

MVC MVC &#xff0c;早期的开发架构&#xff0c;在安卓里&#xff0c;用res代表V&#xff0c;activity代表Controller层&#xff0c;Model层完成数据请求&#xff0c;更新操作&#xff0c;activity完成view的绑定&#xff0c;以及业务逻辑的编写&#xff0c;更新view&#xf…