公司做网站要多久,竞价托管推广,济南网站建设艮安,网站设计专题页目录 什么是Sentinel发展历史与Hystrix的异同 Sentinel可以做什么#xff1f;Sentinel的功能Sentinel的开源生态Sentinel的用户安装Sentinel控制台预备环境准备Sentinel 分为两个部分:下载地址 项目集成Sentinel创建项目修改依赖信息添加启动注解添加配置信息在控制器类中新增… 目录 什么是Sentinel发展历史与Hystrix的异同 Sentinel可以做什么Sentinel的功能Sentinel的开源生态Sentinel的用户安装Sentinel控制台预备环境准备Sentinel 分为两个部分:下载地址 项目集成Sentinel创建项目修改依赖信息添加启动注解添加配置信息在控制器类中新增一个测试接口启动Nacos、order-sentinel-provider Sentinel核心功能Sentinel分布式系统的流量防卫兵流量控制熔断降级Sentinel熔断降级策略限制并发线程数进行降级通过响应时间进行降级 系统负载保护Sentinel核心规则QPS和TPSQPSTPSQPS VS TPS RT响应时间并发数吞吐量系统吞吐量几个重要参数 簇点链路规则配置直接流控模式——阈值类型为QPS配置直接流控模式——阈值类型为线程数接口(先访问一下)然后再去控制台配置关联流控模式——阈值类型为QPS配置流控效果——Warm Up预热配置流控效果——排队等待 流控规则配置项的说明Sentinel的降级规则回顾熔断降级Sentinel熔断策略RT平均响应时间秒级异常比例 (ERROR_RATIO)异常数 (ERROR_COUNT) 配置降级规则——降级策略为RT配置降级规则——降级策略为异常比例配置降级规则——降级策略为异常数 Sentinel的热点参数限流何为热点热点参数限流兜底方法 附参考百度解释吞吐量TPS、QPS、并发数、响应时间RT几个概念响应时间(RT)吞吐量(Throughput)并发用户数QPS每秒查询率(Query Per Second) 什么是Sentinel
分布式系统的流量防卫兵Sentinel 是阿里中间件团队开源的面向分布式服务架构的轻量级高可用流量控制组件主要以流量为切入点从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。Sentinel官网https://github.com/alibaba/Sentinel/Sentinel中文官网https://github.com/alibaba/Sentinel/wiki/介绍
发展历史
2012年Sentinel诞生于阿里巴巴其主要目标是流量控制。2013-2017年Sentinel迅速发展并成为阿里巴巴所有微服务的基本组成部分。 它已在6000多个应用程序中使用涵盖了几乎所有核心电子商务场景。2018年Sentinel演变为一个开源项目。2020年Sentinel Golang发布。
与Hystrix的异同
SentinelHystrix产生背景阿里巴巴公司Netflix公司用途服务容错框架服务容错框架支持语言Java、Go、CJava支持功能流量控制、熔断降级、系统自适应保护流量控制、熔断降级线程模型单线程模型多线程模型监控中心自带的Sentinel控制台需要借助Hystrix Dashboard配置方式通过规则或代码配置通过注解或配置文件隔离策略信号量隔离线程池隔离/信号量隔离熔断降级策略基于响应时间或失败比率基于失败比率实时指标实现滑动窗口滑动窗口基于 RxJava规则配置支持多种数据源支持多种数据源扩展性多个扩展点插件的形式基于注解的支持支持支持限流基于 QPS支持基于调用关系的限流不支持流量整形支持慢启动、匀速器模式不支持系统负载保护支持不支持控制台开箱即用可配置规则、查看秒级监控、机器发现等不完善常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix
Sentinel可以做什么
丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C 等多语言的原生实现。完善的 SPI 扩展机制Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
Sentinel的功能
功能说明实时监测Sentinel能够实时监测系统、网络或应用程序的活动以便及时发现异常或威胁。预警和警报当发现异常情况或威胁时Sentinel能够发送警报或预警提醒相关人员采取行动。自动化分析Sentinel利用机器学习和人工智能等技术能够对大量数据进行自动化分析识别潜在的威胁和异常行为。威胁情报Sentinel能够从不同的安全信息源获取最新的威胁情报以帮助分析和应对威胁。多层防御Sentinel通过多层次的防御机制包括防火墙、入侵检测系统和反病毒软件等来保护系统免受不同类型的攻击。日志记录和审计Sentinel可以记录和审计系统的活动日志以便对安全事件进行调查和分析。自定义规则和策略Sentinel允许管理员根据自己的需求制定自定义的监测规则和安全策略。可扩展性Sentinel能够适应不同规模和复杂度的系统并能够扩展以支持更大的负载和数据量。用户友好界面Sentinel通常提供直观简洁的用户界面使管理员能够轻松配置和监控安全系统。
Sentinel的开源生态 Sentinel的用户 安装Sentinel控制台
预备环境准备
Sentinel依赖 Java 环境来运行。请确保安装了JDK或JRE。
Sentinel 分为两个部分:
核心库Java 客户端不依赖任何框架/库能够运行于所有 Java 运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持。控制台Dashboard基于 Spring Boot 开发打包后可以直接运行不需要额外的 Tomcat 等应用容器。
下载地址
https://github.com/alibaba/Sentinel/releases选择的版本1.7.2将下载好的jar包拷贝到D:\Soft\Sentinel(需要自己创建也可以是其他盘路径)进入D:\Soft\Sentinel在磁盘地址栏中输入cmd出现命令行窗口在命令行窗口输入java -jar sentinel-dashboard-1.7.2.jar 因为我的电脑上装了JDK8和JDK17sentinel这个版本只能用JDK8运行因此我用这个命令C:\Program Files\Java\jdk1.8.0_281\binjava -jar D:\soft\Sentinel\sentinel-dashboard-1.7.2.jar 运行成功后访问Sentinel的控制台在浏览器中输入http://localhost:8080输入用户名和密码sentinel
项目集成Sentinel
创建项目
指定artifactId为order-sentinel-provider
修改依赖信息 添加启动注解
EnableDiscoveryClient
SpringBootApplication
EnableDiscoveryClient
public class OrderSentinelProviderApplication {public static void main(String[] args) {SpringApplication.run(OrderSentinelProviderApplication.class, args);}
}添加配置信息
spring:application:name: order-sentinel-providercloud:nacos:discovery:server-addr: localhost:8848sentinel:transport:dashboard: localhost:8080port: 8719
server:port: 8086在控制器类中新增一个测试接口
RestController
Slf4j
public class LimitFlowController {RequestMapping(/test)public String test(){log.info(阈值类型为QPSSentinel测试。);return Sentinel调试环境已经准备;}
}启动Nacos、order-sentinel-provider
注意直接启动订单微服务和Sentinel会发现Sentinel中没有订单微服务的数据因为Sentinel是懒加载机制所以需要访问一下接口再去访问Sentinel 就有数据了 Sentinel核心功能
Sentinel分布式系统的流量防卫兵
随着微服务的流行服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。所以Sentinel的核心功能包括流量控制、熔断降级、系统负载保护。
流量控制
在高并发、大流量场景下进入系统的流量如果不加控制的话系统就很有可能会被流量压垮。所以在流量正式进入系统之前需要对流量进行控制以便使流量均匀、可控的方式进入系统。Sentinel作为一个非常出色的容错组件能够将不可控的流量经过处理转化成均匀、可控的流量。
熔断降级
如果检测到系统中的某个调用链路中某个节点出现故障比如请求超时、服务宕机或者异常比超出一定阈值时就会对出现故障的节点的调用频率进行限制甚至不调用出现故障的节点让请求能够快速失败并返回以最大程度避免影响到其他节点的服务而导致系统的级联故障。
Sentinel熔断降级策略
Sentinel主要通过限制并发线程数和响应时间对资源的访问进行降级
限制并发线程数进行降级
Sentinel可以通过限制服务节点的并发线程数量来减少对其他服务节点的影响。例如当某个服务节点出现故障例如响应时间变长或者直接宕机。此时对服务的直接影响就是会造成请求线程数的不断堆积。如果这些堆积的线程数达到一定的数量后对当前服务节点的后续请求就会被拒绝等到堆积的线程完成任务后再开始继续接收新的请求。
通过响应时间进行降级
Sentinel除了可以通过限制并发线程数进行降级外也能够通过响应时间进行降级。如果依赖的服务出现响应时间过长的情况则所有对该服务的请求都会被拒绝直到过了指定的时间窗口之后才能再次访问该服务。
系统负载保护
Sentinel提供了系统维度的自适应保护能力。当系统的压力和负载比较高的时候如果还持续让大量的请求进入系统此时就有可能将系统压垮进而导致系统宕机。Sentinel会在集群环境下将本应服务A承载的流量转发到其他服务器上比如转发到服务器B上。如果此时服务器B也处于高负载的状态则Sentinel会提供相应的保护机制让系统的入口流量和系统的整体负载达到平衡让系统整体可用并且能够最大限度的处理请求。
Sentinel核心规则
Sentinel的核心规则包括流控规则、熔断规则、热点规则、授权规则和系统规则Sentinel能够对流量进行控制主要是监控应用的QPS流量或者并发线程数等指标如果达到指定的阈值时就会被流量进行控制以避免服务被瞬时的高并发流量击垮保证服务的高可靠性
QPS和TPS
QPS
Queries Per Second意思是“每秒查询率”是一台服务器每秒能够相应的查询次数是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS
是Transactions Per Second的缩写也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时收到服务器响应后结束计时以此来计算使用的时间和完成的事务个数。
QPS VS TPS
QPS基本类似于TPS但是不同的是对于一个页面的一次访问形成一个TPS但一次页面请求可能产生多次对服务器的请求服务器对这些请求就可计入“QPS”之中。如访问一个页面会请求服务器2次一次访问产生一个“T”产生2个“Q”。
RT响应时间
响应时间执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间RT(Response-time)是一个系统最重要的指标之一它的数值大小直接反应了系统的快慢。
并发数
并发数是指系统同时能处理的请求数量这个也是反应了系统的负载能力。
吞吐量
系统的吞吐量与request对CPU的消耗、外部接口、IO等等紧密关联。单个request 对CPU消耗越高外部系统接口、IO速度越慢系统吞吐能力越低反之越高。
系统吞吐量几个重要参数
分别是QPSTPS、并发数、响应时间。
QPSTPSQuery Per Second每秒钟request/事务 数量并发数系统同时处理的request/事务数响应时间一般取平均响应时间
QPS(TPS) 并发数/平均响应时间并发数 QPS * 平均响应时间
簇点链路规则 点击簇点链路菜单可以看到之前访问过的接口如下所示 点击右侧的流控按钮会弹出新增流控规则的提示框如下所示
配置直接流控模式——阈值类型为QPS
这里针对 http://localhost:8086/test接口进行直接流控模式在新增流控规则里阈值类型选择QPS单机阈值输入1表示每秒钟的请求量如果超过1则会触发Sentinel的限流操作
配置直接流控模式——阈值类型为线程数
这里针对 http://localhost:8086/test2接口进行直接流控模式在新增流控规则里阈值类型选择线程数单机阈值输入1表示当调用API的线程数达到阈值时则会触发Sentinel的限流操作
接口(先访问一下)然后再去控制台
RestController
Slf4j
public class LimitFlowController {RequestMapping(/test)public String test(){log.info(阈值类型为QPSSentinel测试。);return Sentinel调试环境已经准备;}RequestMapping(/test2)public String test2() throws InterruptedException {System.out.println(阈值类型为线程数Sentinel测试。);TimeUnit.SECONDS.sleep(2);return Sentinel调试环境已经准备;}
}配置关联流控模式——阈值类型为QPS
这里针对 http://localhost:8086/test3接口进关联流控模式在新增流控规则里阈值类型选择QPS单机阈值输入5表示当关联资源/test的QPS阈值超过5时就限流/test3的访问 RequestMapping(/test3)public String test3() {System.out.println(阈值类型为QPS流控模式为关联。);return Sentinel调试环境已经准备;}配置流控效果——Warm Up预热
Warm up也叫预热模式是应对服务冷启动的一种方案。请求阈值初始值是 threshold / coldFactor持续指定时长后逐渐提高到threshold值。而coldFactor的默认值是3。 RequestMapping(/save)public String save() {System.out.println(阈值类型为QPS流控模式为直接流控效果为 Warm up预热。);return Sentinel调试环境已经准备预热;}配置流控效果——排队等待
能够使请求均匀的通过单机的阈值为每秒通过的请求数量其余的请求会排队等待。另外还会设置一个超时时间当请求超过超时时间未处理时会被丢弃。 RequestMapping(/query)public String query() {System.out.println(阈值类型为QPS流控模式为直接流控效果为等待。);return Sentinel调试环境已经准备排队等待;}流控规则配置项的说明
资源名资源的唯一名称默认就是请求的接口路径可以自行修改但是要保证唯一。针对来源具体针对某个微服务进行限流默认值为default表示不区分来源全部限流。阈值类型 QPS每秒钟的请求数量当调用该API的阈值达到达到阈值时候进行限流并发线程数当调用该API的线程数达到阈值时进行限流。 单机阈值与阈值类型组合使用。如果阈值类型选择的是QPS表示当调用接口的QPS达到阈值时进行限流操作。如果阈值类型选择的是并发线程数则表示当调用接口的并发线程数达到阈值时进行限流操作。是否集群选中则表示集群环境不选中则表示非集群环境。流控模式 直接当API调用达到限流条件时直接限流关联当关联的资源达到阈值时限流自己链路统计从指定链路访问到本资源的请求触发阈值时对指定链路限流 流控效果 快速失败直接失败抛出异常Warm Up根据codeFactor(冷加载因子 默认为3)的值从阈值/codeFactor经过预热时长才达到设置的QPS阈值。排队等待匀速排队让请求以均匀的速度通过阈值类型必须设置为QPS否则无效
Sentinel的降级规则
回顾熔断降级
除了流量控制以外对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块可能是另外的一个远程服务、数据库或者第三方 API 等。例如支付的时候可能需要远程调用银联提供的 API查询某个商品的价格可能需要进行数据库查询。然而这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况请求的响应时间变长那么调用服务的方法的响应时间也会变长线程会产生堆积最终可能耗尽业务自身的线程池服务本身也变得不可用。现代微服务架构都是分布式的由非常多的服务组成。不同服务之间相互调用组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定就可能会层层级联最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级暂时切断不稳定调用避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段通常在客户端调用端进行配置。
Sentinel熔断策略
RT平均响应时间秒级
平均响应时间超出阈值且在时间窗口内通过的请求5,两个条件同时满足后触发降级窗口期过后关闭断路器RT最大为4900更大的值需要在配置文件中设置
异常比例 (ERROR_RATIO)
QPS5且异常比例秒级统计超过阈值时触发降级时间窗口结束后关闭降级
异常数 (ERROR_COUNT)
异常数分钟统计超过阈值时触发降级时间窗口结束后关闭降级
配置降级规则——降级策略为RT
这里针对 http://localhost:8086/hy1接口进行降级 RequestMapping(/hy1)public String hy1() throws InterruptedException {TimeUnit.SECONDS.sleep(1);System.out.println(降级测试策略为RTSentinel测试。);return Sentinel调试环境已经准备降级测试;}配置降级规则——降级策略为异常比例
这里针对 http://localhost:8086/api/testSentinelE接口进行降级 RequestMapping(/hy2)public String hy2() throws InterruptedException {System.out.println(1/0);System.out.println(降级测试策略为异常比例Sentinel测试。);return Sentinel调试环境已经准备异常比例;}配置降级规则——降级策略为异常数
这里针对 http://localhost:8086/api/testSentinelF接口进行降级在新增降级规则里降级策略选择异常数异常数为5时间窗口为70。当1分钟的异常数超过超过5时触发降级点击5次以后触发降级 RequestMapping(/hy3)public String hy3() throws InterruptedException {System.out.println(1/0);System.out.println(降级测试策略为异常数Sentinel测试。);return Sentinel调试环境已经准备异常数;}Sentinel的热点参数限流
何为热点
热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据并对其访问进行限制。比如 商品 ID 为参数统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流
热点参数限流会统计传入参数中的热点参数并根据配置的限流阈值与模式对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制仅对包含热点参数的资源调用生效。
兜底方法
之前的兜底方法限流出问题后系统默认提示 Blocked by Sentinel(flow limiting) SentinelResource 注解用于自定义定义资源并提供可选的异常处理和 fallback 配置项 value资源名称必需项不能为空。blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称可选项。fallback / fallbackClassfallback 函数名称可选项用于在抛出异常的时候提供 fallback 处理逻辑。 RequestMapping(/getGoods)SentinelResource(value getGoods,blockHandler blockHandlerGetGoods)public String xian(String id,String name) {return Sentinel调试环境已经准备异常比例;}public String blockHandlerGetGoods(String id, String name, BlockException ex){return 访问过快等一会再访问吧;}注意兜底方法参数要一致添加BlockException配置热点规则——热点参数限流 这里针对 http://localhost:8086/getGoods接口进行热点参数限流新增热点规则 发送请求测试 http://localhost:8086/getGoods http://localhost:8086/getGoods?id1 http://localhost:8086/getGoods?id1nameaa http://localhost:8086/getGoods?nameaa
附参考百度解释吞吐量TPS、QPS、并发数、响应时间RT几个概念
响应时间(RT)
响应时间是指系统对请求作出响应的时间。直观上看这个指标与人对软件性能的主观感受是非常一致的因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能而不同功能的处理逻辑也千差万别因而不同功能的响应时间也不尽相同甚至同一功能在不同输入数据的情况下响应时间也不相同。所以在讨论一个系统的响应时间时人们通常是指该系统所有功能的平均时间或者所有功能的最大响应时间。当然往往也需要对每个或每组功能讨论其平均响应时间和最大响应时间。 对于单机的没有并发操作的应用系统而言人们普遍认为响应时间是一个合理且准确的性能指标。需要指出的是响应时间的绝对值并不能直接反映软件的性能的高低软件性能的高低实际上取决于用户对该响应时间的接受程度。对于一个游戏软件来说响应时间小于100毫秒应该是不错的响应时间在1秒左右可能属于勉强可以接受如果响应时间达到3秒就完全难以接受了。而对于编译系统来说完整编译一个较大规模软件的源代码可能需要几十分钟甚至更长时间但这些响应时间对于用户来说都是可以接受的。
吞吐量(Throughput)
吞吐量是指系统在单位时间内处理请求的数量。对于无并发的应用系统而言吞吐量与响应时间成严格的反比关系实际上此时吞吐量就是响应时间的倒数。前面已经说过对于单用户的系统响应时间或者系统响应时间和应用延迟时间可以很好地度量系统的性能但对于并发系统通常需要用吞吐量作为性能指标。 对于一个多用户的系统如果只有一个用户使用时系统的平均响应时间是t当有你n个用户使用时每个用户看到的响应时间通常并不是n×t而往往比n×t小很多当然在某些特殊情况下也可能比n×t大甚至大很多。这是因为处理每个请求需要用到很多资源由于每个请求的处理过程中有许多不走难以并发执行这导致在具体的一个时间点所占资源往往并不多。也就是说在处理单个请求时在每个时间点都可能有许多资源被闲置当处理多个请求时如果资源配置合理每个用户看到的平均响应时间并不随用户数的增加而线性增加。实际上不同系统的平均响应时间随用户数增加而增长的速度也不大相同这也是采用吞吐量来度量并发系统的性能的主要原因。一般而言吞吐量是一个比较通用的指标两个具有不同用户数和用户使用模式的系统如果其最大吞吐量基本一致则可以判断两个系统的处理能力基本一致。
并发用户数
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。与吞吐量相比并发用户数是一个更直观但也更笼统的性能指标。实际上并发用户数是一个非常不准确的指标因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。以网站系统为例假设用户只有注册后才能使用但注册用户并不是每时每刻都在使用该网站因此具体一个时刻只有部分注册用户同时在线在线用户就在浏览网站时会花很多时间阅读网站上的信息因而具体一个时刻只有部分在线用户同时向系统发出请求。这样对于网站系统我们会有三个关于用户数的统计数字注册用户数、在线用户数和同时发请求用户数。由于注册用户可能长时间不登陆网站使用注册用户数作为性能指标会造成很大的误差。而在线用户数和同事发请求用户数都可以作为性能指标。相比而言以在线用户作为性能指标更直观些而以同时发请求用户数作为性能指标更准确些。
QPS每秒查询率(Query Per Second)
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准在因特网上作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec即每秒的响应请求数也即是最大吞吐能力。 看来是类似于TPS只是应用于特定场景的吞吐量