网站推广的主流方法,wordpress 导航栏顺序,自己建网站免费,团购网站销售技巧目录
Sentinel控制台介绍
实时监控
簇点链路
流控规则
限流阈值类型
流控模式
流控效果
熔断降级规则
熔断策略之慢调用比例
熔断策略之异常比例
熔断策略之异常数
热点规则
系统规则——系统自适应保护
系统规则阈值类型
授权控制规则——来源访问控制#xf…目录
Sentinel控制台介绍
实时监控
簇点链路
流控规则
限流阈值类型
流控模式
流控效果
熔断降级规则
熔断策略之慢调用比例
熔断策略之异常比例
熔断策略之异常数
热点规则
系统规则——系统自适应保护
系统规则阈值类型
授权控制规则——来源访问控制黑白名单 Sentinel控制台介绍
Sentinel 提供一个轻量级的开源控制台它提供机器发现以及健康情况管理、监控单机和集群规则管理和推送的功能。
Sentinel 控制台包含如下功能:
查看机器列表以及健康情况收集 Sentinel 客户端发送的心跳包用于判断机器是否在线。监控 (单机和集群聚合)通过 Sentinel 客户端暴露的监控 API定期拉取并且聚合应用监控信息最终可以实现秒级的实时监控。规则管理和推送统一管理推送规则。鉴权生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。 实时监控 监控接口的通过的QPS和拒绝的QPS 。同一个服务下的所有机器的簇点信息会被汇总并且秒级地展示在实时监控下。
注意: 实时监控仅存储 5 分钟以内的数据如果需要持久化需要通过调用实时监控接口来定制。 注意请确保 Sentinel 控制台所在的机器时间与自己应用的机器时间保持一致否则会导致拉不到实时的监控数据。 簇点链路 用来显示微服务的所监控的API。簇点链路单机调用链路页面实时的去拉取指定客户端资源的运行情况。它一共提供两种展示模式一种用树状结构展示资源的调用链路另外一种则不区分调用链路展示资源的运行情况。 流控规则 流量控制flow control其原理是监控应用流量的 QPS 或并发线程数等指标当达到指定的阈值时对流量进行控制以避免被瞬时的流量高峰冲垮从而保障应用的高可用性。 同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历直到有规则触发限流或者所有规则遍历完毕。一条限流规则主要由下面几个因素组成我们可以组合这些元素来实现不同的限流效果。 Field 说明 默认值 resource 资源名资源名是限流规则的作用对象 count 限流阈值 grade 限流阈值类型QPS 模式1或并发线程数模式0 QPS 模式 limitApp 流控针对的调用来源 default代表不区分调用来源 strategy 调用关系限流策略直接、链路、关联 根据资源本身直接 controlBehavior 流控效果直接拒绝/WarmUp/匀速排队等待不支持按调用关系限流 直接拒绝 clusterMode 是否集群限流 否
限流阈值类型 流量控制主要有两种统计类型一种是统计并发线程数另外一种则是统计 QPS。类型由 FlowRule 的 grade 字段来定义。其中0 代表根据并发数量来限流1 代表根据 QPS 来进行流量控制。
QPSQuery Per Second每秒请求数就是说服务器在一秒的时间内处理了多少个请求。
QPS
进入簇点链路选择具体的访问的API然后点击流控按钮 BlockException异常统一处理 springwebmvc接口资源限流入口在HandlerInterceptor的实现类AbstractSentinelInterceptor的preHandle方法中对异常的处理是BlockExceptionHandler的实现类。
自定义BlockExceptionHandler 的实现类统一处理BlockException
Slf4j
Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {log.info(BlockExceptionHandler BlockExceptione.getRule());R r null;if (e instanceof FlowException) {r R.error(100,接口限流了);} else if (e instanceof DegradeException) {r R.error(101,服务降级了);} else if (e instanceof ParamFlowException) {r R.error(102,热点参数限流了);} else if (e instanceof SystemBlockException) {r R.error(103,触发系统保护规则了);} else if (e instanceof AuthorityException) {r R.error(104,授权规则不通过);}//返回json数据response.setStatus(500);response.setCharacterEncoding(utf-8);response.setContentType(MediaType.APPLICATION_JSON_VALUE);new ObjectMapper().writeValue(response.getWriter(), r);}
}
并发线程数 并发线程数控制用于保护业务线程池不被慢调用耗尽。例如当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加对于调用者来说意味着吞吐量下降和更多的线程数占用极端情况下甚至导致线程池耗尽。为应对太多线程占用的情况业内有使用隔离的方案比如通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢线程池隔离。这种隔离方案虽然隔离性比较好但是代价就是线程数目太多线程上下文切换的 overhead 比较大特别是对低延时的调用有比较大的影响。Sentinel 并发控制不负责创建和管理线程池而是简单统计当前请求上下文的线程数目正在执行的调用数目如果超出阈值新的请求会被立即拒绝效果类似于信号量隔离。并发数控制通常在调用端进行配置。 流控模式 基于调用关系的流量控制。调用关系包括调用方、被调用方。一个方法可能会调用其它方法形成一个调用链路的层次关系。
直接
资源调用达到设置的阈值后直接被流控抛出异常。
关联 当两个资源之间具有资源争抢或者依赖关系的时候这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢读的速度过高会影响写得速度写的速度过高会影响读的速度。 链路 根据调用链路入口限流。 NodeSelectorSlot 中记录了资源之间的调用链路这些资源通过调用关系相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点调用链的入口都是这个虚节点的子节点。
一棵典型的调用树如下图所示 上图中来自入口 Entrance1 和 Entrance2 的请求都调用到了资源 NodeASentinel 允许只根据某个入口的统计信息对资源限流。 流控效果 当 QPS 超过某个阈值的时候则采取措施进行流量控制。流量控制的效果包括以下几种快速失败直接拒绝、Warm Up预热、匀速排队排队等待。
快速失败:达到阈值后新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。warm up:预热模式对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化从一个较小值逐渐增加到最大阈值。排队等待:让所有的请求按照先后次序排队执行两个请求的间隔不能小于指定时长。 熔断降级规则 除了流量控制以外对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。我们需要对不稳定的弱依赖服务调用进行熔断降级暂时切断不稳定调用避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段通常在客户端调用端进行配置。
熔断降级规则说明
熔断降级规则DegradeRule包含下面几个重要的属性 Field 说明 默认值 resource 资源名即规则的作用对象 grade 熔断策略支持慢调用比例/异常比例/异常数策略 慢调用比例 count 慢调用比例模式下为慢调用临界 RT超出该值计为慢调用异常比例/异常数模式下为对应的阈值 timeWindow 熔断时长单位为 s minRequestAmount 熔断触发的最小请求数请求数小于该值时即使异常比率超出阈值也不会熔断1.7.0 引入 5 statIntervalMs 统计时长单位为 ms如 60*1000 代表分钟级1.8.0 引入 1000 ms slowRatioThreshold 慢调用比例阈值仅慢调用比例模式有效1.8.0 引入
熔断策略之慢调用比例 慢调用比例 (SLOW_REQUEST_RATIO)选择以慢调用比例作为阈值需要设置允许的慢调用 RT即最大的响应时间请求的响应时间大于该值则统计为慢调用。当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且慢调用的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断若大于设置的慢调用 RT 则会再次被熔断。 熔断策略之异常比例 异常比例 (ERROR_RATIO)当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且异常的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0]代表 0% - 100%。 熔断策略之异常数 异常数 (ERROR_COUNT)当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态HALF-OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。
注意异常降级仅针对业务异常对 Sentinel 限流降级本身的异常BlockException不生效。 热点规则 何为热点热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据并对其访问进行限制。比如
商品 ID 为参数统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数针对一段时间内频繁访问的用户 ID 进行限制 热点参数限流会统计传入参数中的热点参数并根据配置的限流阈值与模式对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制仅对包含热点参数的资源调用生效。
注意
热点规则需要使用SentinelResource(resourceName)注解否则不生效。参数必须是7种基本数据类型才会生效。
测试用例
RequestMapping(/info/{id})
SentinelResource(value userinfo, blockHandler handleException)
public R info(PathVariable(id) Integer id){UserEntity user userService.getById(id);return R.ok().put(user, user);
}
配置热点参数规则
注意 资源名必须是SentinelResource(value资源名)中 配置的资源名热点规则依赖于注解 具体到参数值限流配置参数值为3,限流阈值为1 测试
http://localhost:8800/user/info/1 限流的阈值为3
http://localhost:8800/user/info/3 限流的阈值为1 系统规则——系统自适应保护
Sentinel 做系统自适应保护的目的
保证系统不被拖垮。在系统稳定的前提下保持系统的吞吐量。 系统保护规则是从应用级别的入口流量进行控制从单台机器的总体 Load、RT、入口 QPS 和线程数四个维度监控应用数据让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 系统保护规则是应用整体维度的而不是资源维度的并且仅对入口流量生效。入口流量指的是进入应用的流量EntryType.IN。
系统规则阈值类型
Load仅对 Linux/Unix-like 机器生效当系统 load1 超过阈值且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5。
CPU usage1.5.0 版本当系统 CPU 使用率超过阈值即触发系统保护取值范围 0.0-1.0。RT当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护单位是毫秒。线程数当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。入口 QPS当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
编写系统规则 授权控制规则——来源访问控制黑白名单 可以使用 Sentinel 的来源访问控制黑白名单控制的功能。来源访问控制根据资源的请求来源origin限制资源是否通过若配置白名单则只有请求来源位于白名单内时才可通过若配置黑名单则请求来源位于黑名单时不通过其余的请求通过。
来源访问控制规则AuthorityRule非常简单主要有以下配置项
resource资源名即限流规则的作用对象。limitApp对应的黑名单/白名单不同 origin 用 , 分隔如 appA,appB。strategy限制模式AUTHORITY_WHITE 为白名单模式AUTHORITY_BLACK 为黑名单模式默认为白名单模式。