网站建设思路,关键词在线下载,dede鲜花网站模板下载,洛阳建设工程网站Sentinel 规则 流控规则 flow1、QPS流控2、并发线程数流控3、流控模式4、流控效果 熔断#xff08;降级#xff09;规则 degrade1、慢调用比例2、异常比例3、异常数 热点规则 param-flow授权规则 authority1、应用场景2、自定义来源3、授权规则配置 系统规则 前言#xff1a… Sentinel 规则 流控规则 flow1、QPS流控2、并发线程数流控3、流控模式4、流控效果 熔断降级规则 degrade1、慢调用比例2、异常比例3、异常数 热点规则 param-flow授权规则 authority1、应用场景2、自定义来源3、授权规则配置 系统规则 前言 Sentinel 服务容错简介 Doker安装与整合Spring cloud alibaba 作用在资源之上定义以什么样的方式保护资源主要包括流量控制规则、熔断降级规则、热点规则以及系统保 护规则。本质就是用来定义如何进行保护资源。
流控规则 flow
流量控制其原理是监控应用流量的 QPS(每秒查询率) 或 并发线程数 等指标当达到指定的阈值时对流量进行控制以避免被瞬时的流量高峰冲垮从而保障应用的高可用性。它是针对服务提供方进行设置的。
一条限流规则主要由下面几个因素组成我们可以组合这些元素来实现不同的限流效果
resource 资源名即限流规则的作用对象limitApp : 流控针对的调用来源若为 default 则不区分调用来源grade : 限流阈值类型并发线程数 或 QPScount : 限流阈值strategy : 调用关系限流策略直接关联链路controlBehavior : 流量控制效果快速失败、Warm Up、匀速排队
流量控制主要有两种统计类型一种是统计并发线程数另外一种则是统计 QPS(访问数。类型由 FlowRule 的grade 字段来定义。其中0 代表根据并发数量来限流1 代表根据 QPS 来进行流量控制。其中线程数、QPS 值都是由 StatisticSlot 实时统计获取的。 超出流控限制后便会报错可通过代码更改报错信息
1、QPS流控
grade 字段为1根据对资源的访问次数进行流控。
2、并发线程数流控
并发数控制用于保护业务线程池不被慢调用耗尽。假设线程数设置为1当一个线程请求时如果还没有响应的情况下另一个线程又进来访问则这些请求都会排除在外直到响应后再处理下一个线程。例如当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加对于调用者来说意味着吞吐量下降和更多的线程数占用极端情况下甚至导致线程池耗 尽。 为应对太多线程占用的情况业内有使用隔离的方案比如通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢线程池隔离。这种隔离方案虽然隔离性比较好但是代价就是线程数目太多线程上下文切换的 overhead 比较大特别是对低延时的调用有比较大的影响。 Sentinel 并发控制不负责创建和管理线程池而是简单统计当前请求上下文的线程数目正在执行的调用数目如果超出阈值新的请求会被立即拒绝效果类似于信号量隔离。并发数控制通常在调用端进行配置。
3、流控模式
直接接口达到限流条件时开启限流。即只对指定的接口进行流控。也是默认的模式。关联统计与当前资源相关的另一个资源触发阈值时对当前资源限流。 当两个资源之间具有资源争抢或者依赖关系的时候这两个资源便具有了关联。比如对数据库同一个字段的 读操作和写操作 存在争抢读的速度过高会影响写得速度写的速度过高会影响读的速度。如果放任读写操作争抢资源则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢。为读操作增加关联流控关联写操作这样写操作的次数也会被统计在读操作流控中而对于写操作本身没有任何影响。 链路统计从指定上级接口链路访问到本资源的请求触发阈值时对指定链路限流。 例如OrderController 控制器类中的 message1 和 message2 这两个方法都会调用 Service 中的 message 方法这时就可以针对这两个链路的 message资源 进行限流了。注意 Service 中的 message 方法需要用 SentinelResource 注解指定资源名或异常处理函数因为不会走统一异常处理Sentinel 1.7 版本后Sentinel默认会将Controller方法做context收敛导致链路模式的流控失效 需要添加配置
spring.cloud.sentinel.webContextUnifyfalse # 关闭context收敛4、流控效果
所谓流控效果是指当服务被流控了以什么样的效果去处理。在 Sentinel 中内置了以下三种处理方式
快速失败默认: 是默认的流量控制方式当超过任意规则的阈值后新的请求就会被立即拒绝拒绝方式为抛出FlowException 。这种方式适用于对系统处理能力确切已知的情况下比如通过压测确定了系统的准确水位时。Warm Up预热即预热/冷启动方式。当系统长期处于低水位的情况下当流量突然增加时直接把系统拉升到高水位可能瞬间把系统压垮。通过冷启动让通过的流量缓慢增加在预热时长内逐渐增加到阈值上限给冷系统一个预热的时间避免冷系统被压垮。 冷加载因子codeFactor 默认是3即请求 QPS 从 count / 3 开始经预热时长逐渐升至设定的 count 阈值 。需要设置 预热时长秒 排队等待会严格控制请求通过的间隔时间也即是让请求以均匀的速度通过对应的是漏桶算法。 需要设置 超时时长毫秒让所有请求进入一个队列中然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成如果请求预期的等待时间超出最大时长则会被拒绝。
熔断降级规则 degrade
熔断规则就是设置当满足什么条件的时候对服务进行降级。 它通常是在服务消费端来进行配置。 熔断降级规则DegradeRule包含下面几个重要的属性
Field说明默认值resource资源名即规则的作用对象grade熔断策略支持慢调用比例/异常比例/异常数策略慢调用比例count慢调用比例模式下为 慢调用临界 RT超出该值计为慢调用异常比例/异常数模式下为 对应的阈值timeWindow熔断时长单位为 sminRequestAmount熔断触发的最小请求数请求数小于该值时即使异常比率超出阈值也不会熔断1.7.0 引入5statIntervalMs统计时长单位为 ms如 60*1000 代表分钟级1.8.0引入1000msslowRatioThreshold慢调用比例阈值仅慢调用比例模式有效1.8.0 引入
1、慢调用比例
选择以慢调用比例作为阈值需要设置允许的慢调用 RT最大响应时间 毫秒请求的响应时间大于该值则统计为慢调用。当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且慢调用的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若下一个请求响应时间小于设置的慢调用 RT 则结束熔断否则会再次被熔断。
2、异常比例
当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且异常的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALFOPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0] 代表0% - 100%。
3、异常数
当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。注意异常降级 仅针对业务异常 对 Sentinel 限流降级本身的异常 BlockException 不生效。 热点规则 param-flow
何为热点热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据并对其访问进行限制。比如 商品 ID 为参数统计一段时间内最常购买的商品 ID 并进行限制 用户 ID 为参数针对一段时间内频繁访问的用户 ID 并进行限制 热点参数限流会统计传入参数中的热点参数并根据配置的限流阈值与模式对包含热点参数的资源调用进行限流。 热点参数限流可以看做是一种特殊的流量控制仅对包含热点参数的资源调用生效。 Sentinel 利用 LRU 策略统计最近最常访问的热点参数结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。 热点参数规则ParamFlowRule 类似于流量控制规则FlowRule
属性说明默认值resource资源名必填count限流阈值必填grade限流模式QPS 模式durationInSec统计窗口时间长度单位为秒1.6.0 版本开始支持1scontrolBehavior流控效果支持快速失败和匀速排队模式1.6.0 版本开始支持快速失败maxQueueingTimeMssparamIdx热点参数的索引必填对应 SphU.entry(xxx, args) 中的参数索引位置paramFlowItemList参数例外项可以针对指定的参数值单独设置限流阈值不受前面 count 阈值的限制。 仅支持基本类型和字符串类型clusterMode是否是集群参数流控规则falseclusterConfig集群流控相关配置
注意要实现热点参数规则必须使用 SentinelResouce 注解来指定资源否则热点规则将不会生 效。
GetMapping(/message1)
SentinelResource(value messages1, blockHandler hotBlock)
public String message1(Integer id) throws Exception {return message1 id;
}
public String hotBlock(Integer id, BlockException e) {return 热点规则限流....;
}先添加热点规则 可以在热点规则里添加 参数例外项对指定参数进行额外处理
授权规则 authority
很多时候我们需要根据调用来源来判断该次请求是否允许放行这时候可以使用 Sentinel 的来源访问控制黑白名单控制的功能。来源访问控制根据资源的请求来源origin限制资源是否通过 若配置白名单则只有请求来源位于白名单内时才可通过若配置黑名单则请求来源位于黑名单时不通过其余的请求通过。 来源访问控制规则 AuthorityRule 非常简单主要有以下配置项 resource 资源名即限流规则的作用对象。limitApp 对应的 黑名单/白名单不同 origin 用 , 分隔如 appA,appB 。strategy 限制模式 AUTHORITY_WHITE 为白名单模式 AUTHORITY_BLACK 为黑名单模式默认为白名单模式。
1、应用场景 假设有三个微服分别为 A、B 和 C。而 A 和 B 都会访问 C。如果希望 A 可以访问 C而 B 不能访问 C则可以进行授权规则配置来实现。 流控应用是来源标识Sentinel 提供了 RequestOriginParser 接口来处理来源。只 要 Sentinel 保护的接口资源被访问Sentinel 就会调用 RequestOriginParser 的实现类去解析访问来源。
2、自定义来源
区分来源本质是从 request 作用域中获取参数交给流控应用处使用。在 微服中创建一个 config 包并在这个包下新建一个 类例如 RequestOriginParserDefinition并让这个类实现 Sentinel 提供的 RequestOriginParser 接口并添加注解注入Spring然后重写 parseOrigin 方法即可。
Configuration
public class RequestOriginParserDefinition implements RequestOriginParser {Overridepublic String parseOrigin(HttpServletRequest request) {return request.getParameter(serverName);}
}3、授权规则配置
启动微服务浏览器正常访问接口在url地址后添加?serverName来源例如 http://localhost:8072/order/message1?serverNamepc然后再 Sentinel 客户端中添加授权即可。
系统规则
系统保护规则是从应用级别的入口流量进行控制从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和 并发线程数等几个维度监控应用指标让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。系统保护规则是应用整体维度的而不是资源维度的并且仅对入口流量 (进入应用的流量) 生效。Load 自适应仅对 Linux/Unix-like 机器生效系统的 load1 作为启发指标进行自适应系统保护。当系统 load1 超过设定的启发值且系统当前的并发线程数超过估算的系统容量时才会触发系统 保护BBR 阶段。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores *2.5 。CPU 使用率1.5.0 版本当系统 CPU 使用率超过阈值即触发系统保护取值范围 0.0-1.0比较灵敏。平均 RT当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护单位是毫秒。并发线程数当单台机器上所有入口流量的并发线程数达到 阈值 即触发系统保护。入口 QPS当单台机器上所有入口流量的 QPS 达到 阈值 即触发系统保护。