概述
下载Sentinel,我的版本是1.7.2
https://github.com/alibaba/Sentinel/releases/download/1.7.2/sentinel-dashboard-1.7.2.jar
下载完成后用java -jar 运行 即可在本地localhost:8080看到控制台界面如下
登陆的账号密码都是sentinel.
pom中引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.2</version>
<scope>test</scope>
</dependency>
application.yml配置
spring:
cloud:
sentinel:
transport:
dashboard: 127.0.0.1:8080
port: 8719
# 开启所有端点允许HTTP查看
management:
endpoints:
web:
exposure:
include: "*"
sentinel的功能有:
1.流量控制
2.熔断降级
3.热点参数限流
4.黑白名单控制
一.流量控制
阈值类型可以选择
1.QPS(每秒的查询数)
2.并发线程数
流控模式可以选择
1.直接:超过定义的阈值后直接进行处理
2.关联: 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢.比如可以给路径testA添加流控规则,当路径testB的访问量过大时可以让testA直接报错
3.链路:
NodeSelectorSlot 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点,调用链的入口都是这个虚节点的子节点。
一棵典型的调用树如下图所示:
machine-root
/
/
Entrance1 Entrance2
/
/
DefaultNode(nodeA) DefaultNode(nodeA)
上图中来自入口 Entrance1 和 Entrance2 的请求都调用到了资源 NodeA,Sentinel 允许只根据某个入口的统计信息对资源限流。比如我们可以设置 FlowRule.strategy 为 RuleConstant.CHAIN,同时设置 FlowRule.ref_identity 为 Entrance1 来表示只有从入口 Entrance1 的调用才会记录到 NodeA 的限流统计当中,而不关心经 Entrance2 到来的调用。
流控效果可以选择
1.直接失败: 达到流控规则会直接报错
2.Warm up 暖启动
也叫预热,根据codeFactor(默认3)的值,从(阀值/codeFactor)为初始阀值,经过预热时长,才到达设置的QPS的阀值
我们来举个案例,阀值为100,预热时长设置10秒。
代表的含义就是,系统初始化的阀值为 100/3 ,即阀值为33;然后过了10秒,阀值才恢复到100
这个预热的应用场景,如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,慢慢的把阀值增长到设置的阀值。
3.排队等待
从字面上面就能够猜到,匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
补充:
1.限流既可以对url进行限流,也可以按客户自定义名称,需要使用sentinelResource注解
2.达到系统限流/熔断规则后到达默认报错界面,也可自定义报错提示
二.熔断降级
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出
DegradeException)。
降级策略
1.RT(平均响应时间 )
当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException.
2.异常比例
当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。
3.异常数
当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于60s,则结束熔断状态后仍可能再进入熔断状态。
异常的处理
三.热点参数限流
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Sentinel Parameter Flow Control Sentinel 利用 LRU
策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
如果10s内传值相同的参数两次,则会触发限流规则
规则持久化
1.引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>1.7.2</version>
</dependency>
2.yml配置
sentinel:
transport:
dashboard: localhost:8080
port: 8719
datasource:
dsl:
nacos:
server-addr: localhost:8848
data-id: ${spring.application.name}
group-id: DEFAULT_GROUP
data-type: json
rule-type: flow
3.nacos创建规则
配置规则解释:
resource:资源名称,yml文件中配置的spring.application.name
limitApp:来源应用
grade:阈值类型 0表示线程数,1表示qps
count:单机阈值 超过触发规则
strategy:流控模式 0直接失败 1表示关联 2表示链路
controlBehavior: 流控效果 0快速失败 1表示warmup 2 表示排队
clusterMode:是否集群
官网文档
https://github.com/alibaba/Sentinel/wiki
最后
以上就是淡定玫瑰为你收集整理的Sentinel使用教程的全部内容,希望文章能够帮你解决Sentinel使用教程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复