Sentinel服务治理知识梳理【原理笔记】

目录
1、流量控制
2、熔断降级
3、热点参数限流
4、集群流控
5、系统防护

1、流量控制

把随机来的流量进行整形,将流量控制在系统的能力范围内,增强应用可用性。

通过运行指标控制
1.基于QPS。备注:使用RuleConstant.FLOW_GRADE_QPS策略
2.线程数。备注:使用RuleConstant.FLOW_GRADE_THREAD策略

通过资源的调用关系控制
1.根据调用来源限流
分为不区分调用来源、针对特定的调用者、针对除特定应用以外的调用者三种类型
备注:通过AbstractRule.setLimitApp来实现

2.关联限流
通过控制当前资源关联流量实现。
备注:使用RuleConstant.STRATEGY_RELATE和FlowRule.ref_identity策略

3.链路限流
在调用链路中,通过只根据某个入口的统计信息对资源限流量。
备注:使用RuleConstant.CHAIN和FlowRule.ref_identity策略

流量控制结果
快速失败:流量超过阀值则快速失败FlowException或者返回mock数据。


预热模式:通过的流量缓慢增加,经过设置的预热时间以后,到达系统处理请求速率的设定值。默认会从设置的QPS阈值的1/3开始慢慢往上增加至QPS设置值。
备注:使用RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER策略。


排队等待:严格控制请求通过的间隔时间,请求匀速通过。需设置具体的超时时间,当计算的等待时间超过超时时间时请求就会被拒绝。
备注:通过CONTROL_BEHAVIOR_RATE_LIMITER来实现

2、熔断降级

熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。
熔断降级支持的策略:

RT模式:资源的平均响应时间都超过阈值(秒级平均RT,以ms为单位),资源调用会被熔断。在接下的降级时间窗口(在降级规则中配置,以s为单位)之内,对这个方法的调用都会自动返回(抛出 DegradeException)。
备注:使用RuleConstant.DEGRADE_GRADE_RT策略

异常比例模式:当资源的每秒异常数占通过量的比值超过阈值之后,资源进入降级状态,即在接下的降级时间窗口(在降级规则中配置,以s为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是[0.0, 1.0],代表0%-100%。
备注:使用RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO策略

分钟级异常数模式:当资源最近1分钟的异常数目超过阈值之后会进行熔断。
备注:使用RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT策略

通常对弱依赖进行熔断,对强依赖进行隔离降级。
弱依赖:若依赖的第三方应用出错不会影响而整体流程,则称之为弱依赖。
强依赖:若依赖的第三方应用或组件,或者应用自身的内部方法出错会影响而整体流程,则称之为强依赖。

3、热点参数限流

热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的Top K数据,并对其访问进行限制。比如:
商品ID为参数,统计一段时间内最常购买的商品ID并进行限制
用户ID为参数,针对一段时间内频繁访问的用户ID进行限制
备注:使用ParamFlowRule.setParamFlowItemList和ParamFlowRuleManager.loadRules

4、集群流控

实际情况下流量到每台机器可能会不均匀,仅靠单机维度去限制的话会无法精确地限制总体流量。通过精确地控制整个集群的调用总量,结合单机限流,实现集群整体防护。
集群流控中共有两种身份:
Token Client:集群流控客户端,用于向所属 Token Server 通信请求 token。集群限流服务端会返回给客户端结果,决定是否限流。
Token Server:即集群流控服务端,处理来自 Token Client 的请求,根据配置的集群规则判断是否应该发放 token(是否允许通过)。
备注:通过ClusterTokenServer和ClusterTokenClient实现

5、系统防护

从Load、总体平均RT、入口QPS和线程数几个维度进行监控,平衡系统负载与入口流量,提高整体稳定性。
系统规则支持四种阈值类型:
Load(仅对 Linux/Unix-like机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过预计的系统容量时才会触发系统保护。
备注:通过SystemRule.highestSystemLoad实现

RT:当单台机器上所有入口流量的平均RT达到阈值即触发系统保护,单位是毫秒。
备注:通过SystemRule.avgRt实现

线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
备注:通过SystemRule.maxThread实现

入口QPS:当单台机器上所有入口流量的QPS达到阈值即触发系统保护。
备注:通过SystemRule.qps实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值