富阳建设局网站,wordpress首页模板文件,陵水县建设局网站,公司建立网站的作用有文章目录 一、前言二、知识点主要构成1、sentinel基本概念1.1、资源1.2、规则 2、sentinel的基本功能2.1、流量控制2.2、熔断降级 3、控制台安装3.1、官网下载jar包3.2、启动控制台 4、项目集成 sentinel4.1、依赖配置4.2、配置文件中配置sentinel控制台地址信息4.3、配置流控4… 文章目录 一、前言二、知识点主要构成1、sentinel基本概念1.1、资源1.2、规则 2、sentinel的基本功能2.1、流量控制2.2、熔断降级 3、控制台安装3.1、官网下载jar包3.2、启动控制台 4、项目集成 sentinel4.1、依赖配置4.2、配置文件中配置sentinel控制台地址信息4.3、配置流控4.3.1、流控4.3.2、熔断慢调用比例异常比例异常数 4.3.3、授权4.3.4、热点 5、sentinelnacos持久化流控规则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的相关依赖
parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.12.RELEASE/versionrelativePath/ !-- lookup parent from repository --
/parent!--版本管理--
propertiesjava.version11/java.versionspring-cloud.versionHoxton.SR12/spring-cloud.versionspring-cloud-alibaba.version2.2.8.RELEASE/spring-cloud-alibaba.version
/properties!--依赖管理--
dependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring-cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring-cloud-alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement子pom中引入sentinel的依赖和springboot的web模块
!--sentinel相关依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency
!--springbootweb模块相关--
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependency4.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、sentinelnacos持久化流控规则
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: authority5.2、修改sentinel配置
如果是下载的sentinel的源码的话我们可以直接打开项目修改配置信息
server.port8080
nacos.server-addrlocalhost:8848
nacos.namespacesentinel-test
nacos.groupDEFAULT_GROUP如果是直接下载的jar包可以在启动jar的时候通过命令来指定这些配置信息 nohup java -Dnacos.server-addrlocalhost:8848 -Dnacos.namespacesentinel-test -Dnacos.groupDEFAULT_GROUP -jar sentinel-dashboard-1.8.4.jar
三、总结提升
以上是sentinel相关流控规则以及配置持久化的全部过程至于如何配置流控参数还要根据在项目中的实际情况来配置Sentinel是一个强大的分布式服务流量控制组件具有强大的功能和广泛的应用场景。通过使用Sentinel可以提高系统的稳定性和安全性降低运营成本。
如果本篇博客对您有一定的帮助大家记得留言点赞收藏哦。