SCA Sentinel 分布式系统的流量防卫兵,春招我借这份 PDF 的复习思路
2、减少代码开发,通过 UI 界?配置即可完成细粒度控制(?动投递微服务)
Sentinel 分为两个部分:
核?库:(Java 客户端)不依赖任何框架/库,能够运?于所有 Java 运?时环境,同时对 Dubbo /Spring Cloud 等框架也有较好的?持。
控制台:(Dashboard)基于 Spring Boot 开发,打包后可以直接运?,不需要额外的 Tomcat 等应?容器。
Sentinel 具有以下特征:
丰富的应?场景:Sentinel 承接了阿?巴巴近 10 年的双???促流量的核?场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填?、集群流量控制、实时熔断下游不可?应?等。
完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接?应?的单台机器秒级数据,甚? 500 台以下规模的集群的汇总运?情况。
?泛的开源?态:Sentinel 提供开箱即?的与其它开源框架/库的整合模块,例如与 SpringCloud、Dubbo 的整合。您只需要引?相应的依赖并进?简单的配置即可快速地接? Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易?、完善的 SPI 扩展接?。您可以通过实现扩展接?来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
Sentinel 的主要特性:
Sentinel 的开源?态:
[](
)Sentinel 部署
上面说过,Sentinel 分为核心库和仪表盘。核心库是在我们的服务中引入依赖。仪表盘就可以来监控管理。
[](
)仪表盘
我们先来部署仪表盘,这个官网提供了可直接运行的 jar
官网:
https://github.com/alibaba/Sentinel/releases
我这里选择的是 1.7.2
下载之后,运行。
java -jar -Dfile.encoding=UTF-8 sentinel-dashboard-1.7.2.jar
启动完成之后,浏览器输入:
http://localhost:8080/#/login
?户名/密码:sentinel/sentinel
[](
)核心库
上面仪表盘搭建好了,但是没有数据,因为我们我们还没有在服务中引入核心库,并连接到仪表盘上来。所以接下来我们还实现他们。
引入依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
application.yml 修改:
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080 # sentinel dashboard/console 地址
port: 8719 # sentinel 会在该端口启动 http server,那么这样的话,控制台定义的一些限流等规则才能发送传递过来,如果 8719 端口被占用,那么会依次+1
[](
)测试
接下来,我们测试一下。请求一个接口
http://localhost/api/user/login/1186154608@qq.com/123
可以看到已经可以监控查看啦。说明我们部署成功了。
[](
)Sentinel 关键概念
资源:
它可以是 Java 应?程序中的任何内容,例如,由应?程序提供的服务,或由应?程序调?的其它应?提供的服务,甚?可以是?段代码。我们请求的 API 接?就是资源
规则:
围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整
[](
)Sentinel 流量规则模块
系统并发能?有限,?如系统 A 的 QPS?持 1 个,如果太多请求过来,那么 A 就应该进?流量控制了,?如其他请求直接拒绝
资源名:默认请求路径
针对来源:Sentinel 可以针对调?者进?限流,填写微服务名称,默认 default(不区分来源)阈值类型/单机阈值
QPS:(每秒钟请求数量)当调?该资源的 QPS 达到阈值时进?限流
线程数:当调?该资源的线程数达到阈值的时候进?限流(线程处理请求的时候,如果说业务逻辑执?时间很?,流量洪峰来临时,会耗费很多线程资源,这些线程资源会堆积,最终可能造成服务不可?,进?步上游服务不可?,最终可能服务雪崩)
是否集群:是否集群限流
流控模式:
直接:资源调?达到限流条件时,直接限流
关联:关联的资源调?达到阈值时候限流??
链路:只记录指定链路上的流量
流控效果:
快速失败:直接失败,抛出异常
Warm Up:根据冷加载因?(默认 3)的值,从阈值/冷加载因?,经过预热时?,才达到设置的 QPS 阈 值
排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为 QPS,否则?效
流控模式之关联限流:
关联的资源调?达到阈值时候限流??,?如?户注册接?,需要调?身份证校验接?(往往身份证校验接?),如果身份证校验接?请求达到阈值,使?关联,可以对?户注册接?进?限流。
流控模式之链路限流:
链路模式下会控制该资源所在的调?链路??的流量。需要在规则中配置??资源,即该调?链路??的上下?名称。
?棵典型的调?树如下图所示:(阿?云提供)
上图中来??? Entrance1 和 Entrance2 的请求都调?到了资源 NodeA ,Sentinel 允许只根据某个调???的统计信息对资源限流。?如链路模式下设置??资源为 Entrance1 来表示只有从?? Entrance1 的调?才会记录到 NodeA 的限流统计当中,?不关?经 Entrance2 到来的调?。
流控效果之 Warm up:
当系统?期处于空闲的情况下,当流量突然增加时,直接把系统拉升到??位可能瞬间把系统压垮,?如电商?站的秒杀模块。
通过 Warm Up 模式(预热模式),让通过的流量缓慢增加,经过设置的预热时间以后,到达系统处理请求速率的设定值。
Warm Up 模式默认会从设置的 QPS 阈值的 1/3 开始慢慢往上增加? QPS 设置值。
流控效果之排队等待:
排队等待模式下会严格控制请求通过的间隔时间,即请求会匀速通过,允许部分请求排队等待,通常?于消息队列削峰填?等场景。需设置具体的超时时间,当计算的等待时间超过超时时间时请求就会被拒绝。
很多流量过来了,并不是直接拒绝请求,?是请求进?排队,?个?个匀速通过(处理),请求能等就等着被处理,不能等(等待时间>超时时间)就会被拒绝.
例如,QPS 配置为 5,则代表请求每 200 ms 才能通过?个,多出的请求将排队等待通过。超时时间代表最?排队时间,超出最?排队时间的请求将会直接被拒绝。排队等待模式下,QPS 设置值不要超过 1000(请求间隔 1 ms)。
[](
)Sentinel 降级规则模块
流控是对外部来的?流量进?控制,熔断降级的视?是对内部问题进?处理。
Sentinel 降级会在调?链路中某个资源出现不稳定状态时(例如调?超时或异常?例升?),对这个资源的调?进?限制,让请求快速失败,避免影响到其它的资源?导致级联错误。当资源被降级后,在接下来的降级时间窗?之内,对该资源的调?都?动熔断. 这?的降级其实是 Hystrix 中的熔断,还记得当时 Hystrix 的?作流程么
[](
)策略
Sentinel 不会像 Hystrix 那样放过?个请求尝试?我修复,就是明明确确按照时间窗?来,熔断触发后,时间窗?内拒绝请求,时间窗?后就恢复。
RT(平均响应时间 )
当 1s 内持续进? >=5 个请求,平均响应时间超过阈值(以 ms 为单位),那么在接下的时间窗?(以 s 为单位)之内,对这个?法的调?都会?动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此
阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。
异常?例
当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的?值超过阈值之后,资源进?降级状态,即在接下的时间窗?(以 s 为单位)之内,对这个?法的调?都会?动地返回。异常?率的阈值范围是 [0.0, 1.0] ,代表 0% - 100%。
异常数
当资源近 1 分钟的异常数?超过阈值之后会进?熔断。注意由于统计时间窗?是分钟级别的,若 timeWindow ?于 60s,则结束熔断状态后仍可能再进?熔断状态。时间窗? >= 60s
[](
)Nacos 实现 Sentinel 规则持久化
?前,Sentinel Dashboard 中添加的规则数据存储在内存,微服务停掉规则数据就消失,在?产环境下不合适。我们可以将 Sentinel 规则数据持久化到 Nacos 配置中?,让微服务从 Nacos 获取规则数据。
评论