当前位置: 首页 > news >正文

苏州企业商务网站建设市场营销推广活动方案

苏州企业商务网站建设,市场营销推广活动方案,动态网站收录,linux wordpress 安装前言 本文小新为大家带来 Sentinel控制台规则配置 相关知识#xff0c;具体内容包括流控规则#xff08;包括#xff1a;QPS流控规则#xff0c;并发线程数流控规则#xff09;#xff0c;BlockException统一异常处理#xff0c;流控模式#xff08;包括#xff1a;直…前言 本文小新为大家带来 Sentinel控制台规则配置 相关知识具体内容包括流控规则包括QPS流控规则并发线程数流控规则BlockException统一异常处理流控模式包括直接流控模式关联流控模式链路流控模式预热流控效果熔断降级规则包括熔断降级规则说明熔断策略热点参数限流系统规则授权控制规则集群规则等进行详尽介绍~ 不积跬步无以至千里不积小流无以成江海。每天进步一点点在成为强者的路上小新与大家共同成长 博主主页小新要变强 的主页 Java全栈学习路线可参考【Java全栈学习路线】最全的Java学习路线及知识清单Java自学方向指引内含最全Java全栈学习技术清单~ 算法刷题路线可参考算法刷题路线总结与相关资料分享内含最详尽的算法刷题路线指南及相关资料分享~ Java微服务开源项目可参考企业级Java微服务开源项目开源框架用于学习、毕设、公司项目、私活等减少开发工作让您只关注业务 ↩️本文上接Spring Cloud Alibaba全家桶六——微服务组件Sentinel介绍与使用 目录 Sentinel控制台规则配置前言目录一、流控规则1️⃣QPS流控规则2️⃣并发线程数流控规则二、BlockException统一异常处理三、流控模式1️⃣直接流控模式2️⃣关联流控模式3️⃣链路流控模式4️⃣预热流控效果四、熔断降级规则1️⃣熔断降级规则说明2️⃣熔断策略五、热点参数限流六、系统规则七、授权控制规则八、集群规则后记一、流控规则 流量控制flow control其原理是监控应用流量的 QPS 或并发线程数等指标当达到指定的阈值时对流量进行控制以避免被瞬时的流量高峰冲垮从而保障应用的高可用性。 同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历直到有规则触发限流或者所有规则遍历完毕。一条限流规则主要由下面几个因素组成我们可以组合这些元素来实现不同的限流效果。 Field说明默认值resource资源名资源名是限流规则的作用对象count限流阈值grade限流阈值类型QPS 模式1或并发线程数模式0QPS 模式limitApp流控针对的调用来源default代表不区分调用来源strategy调用关系限流策略直接、链路、关联根据资源本身直接controlBehavior流控效果直接拒绝/WarmUp/匀速排队等待不支持按调用关系限流直接拒绝clusterMode是否集群限流否 参考文档https://github.com/alibaba/Sentinel/wiki/流量控制 1️⃣QPS流控规则 QPSQuery Per Second每秒请求数就是说服务器在一秒的时间内处理了多少个请求。 进入簇点链路选择具体的访问的API然后点击流控按钮。 测试 2️⃣并发线程数流控规则 并发数控制用于保护业务线程池不被慢调用耗尽。例如当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加对于调用者来说意味着吞吐量下降和更多的线程数占用极端情况下甚至导致线程池耗尽。为应对太多线程占用的情况业内有使用隔离的方案比如通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢线程池隔离。这种隔离方案虽然隔离性比较好但是代价就是线程数目太多线程上下文切换的 overhead 比较大特别是对低延时的调用有比较大的影响。 Sentinel 并发控制不负责创建和管理线程池而是简单统计当前请求上下文的线程数目正在执行的调用数目如果超出阈值新的请求会被立即拒绝效果类似于信号量隔离。并发数控制通常在调用端进行配置。 可以利用jmeter测试 二、BlockException统一异常处理 springwebmvc接口资源(BlockException异常统一处理)限流入口在HandlerInterceptor的实现类AbstractSentinelInterceptor的preHandle方法中对异常的处理是BlockExceptionHandler的实现类sentinel 1.7.1 引入了sentinel-spring-webmvc-adapter.jar 。 自定义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);} }测试 三、流控模式 基于调用关系的流量控制。调用关系包括调用方、被调用方一个方法可能会调用其它方法形成一个调用链路的层次关系。 1️⃣直接流控模式 资源(直接 )调用达到设置的阈值后直接被流控抛出异常。 2️⃣关联流控模式 当两(关联)个资源之间具有资源争抢或者依赖关系的时候这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢读的速度过高会影响写得速度写的速度过高会影响读的速度。如果放任读写操作争抢资源则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢举例来说read_db 和 write_db 这两个资源分别代表数据库读写我们可以给 read_db 设置限流规则来达到写优先的目的设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时读数据的请求会被限流。 3️⃣链路流控模式 根据(链路)调用链路入口限流。 下面中记录了资源之间的调用链路这些资源通过调用关系相互之间构成一棵调用树。这棵树的根节点是一个名字为 getUser 的虚拟节点调用链的入口都是这个虚节点的子节点。 一棵典型的调用树如下图所示 getUser / \ / \ /order/test1 /order/test2上图中来自入口 /order/test1 和 /order/test2的请求都调用到了资源 getUserSentinel 允许只根据某个入口的统计信息对资源限流。 测试会发现链路规则不生效。 注意高版本此功能直接使用不生效如何解决 从1.6.3 版本开始Sentinel Web filter默认收敛所有URL的入口context因此链路限流不生效。1.7.0 版本开始对应SCA的2.1.1.RELEASE)官方在CommonFilter 引入了WEB_CONTEXT_UNIFY 参数用于控制是否收敛context。将其配置为 false 即可根据不同的URL 进行链路限流。SCA 2.1.1.RELEASE之后的版本,可以通过配置spring.cloud.sentinel.web-context-unifyfalse即可关闭收敛。 spring.cloud.sentinel.web‐context‐unify: false测试 此场景拦截不到BlockException对应SentinelResource指定的资源必须在SentinelResource注解中指定 blockHandler处理BlockException。 总结 为了解决链路规则引入ComonFilter的方式除了此处问题还会导致更多的问题不建议使用ComonFilter的方式。 流控链路模式的问题等待官方后续修复或者使用AHAS。 4️⃣预热流控效果 RuleConstant.CONTROL_BEHAVIOR_DEFAULT方式是默认的流量控制方式当QPS超过任意规则的阈值后新的请求就会被立即拒绝拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下比如通过压测确定了系统的准确水位时。 1Warm Up激增流量 Warm UpRuleConstant.CONTROL_BEHAVIOR_WARM_UP方式即预热/冷启动方式。当系统长期处于低水位的情况下当流量突然增加时直接把系统拉升到高水位可能瞬间把系统压垮。通过冷启动让通过的流量缓慢增加在一定时间内逐渐增加到阈值上限给冷系统一个预热的时间避免冷系统被压垮。 冷加载因子: codeFactor 默认是3即请求 QPS 从 threshold / 3 开始经预热时长逐渐升至设定的 QPS 阈值。通常冷启动的过程系统允许通过的 QPS 曲线如下图所示 测试用例 RequestMapping(/test) public String test() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return test(); }编辑流控规则 jmeter测试 查看实时监控可以看到通过QPS存在缓慢增加的过程 2匀速排队脉冲流量 匀速排队RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER方式会严格控制请求通过的间隔时间也即是让请求以均匀的速度通过对应的是漏桶算法。 该方式的作用如下图所示 这种方式主要用于处理间隔性突发的流量例如消息队列。想象一下这样的场景在某一秒有大量的请求到来而接下来的几秒则处于空闲状态我们希望系统能够在接下来的空闲期间逐渐处理这些请求而不是在第一秒直接拒绝多余的请求。 注意 匀速排队模式暂时不支持 QPS 1000 的场景。 jemeter压测 查看实时监控可以看到通过QPS为5体现了匀速排队效果。 四、熔断降级规则 除了流量控制以外对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。我们需要对不稳定的弱依赖服务调用进行熔断降级暂时切断不稳定调用避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段通常在客户端调用端进行配置。 1️⃣熔断降级规则说明 熔断降级规则DegradeRule包含下面几个重要的属性 Field说明默认值resource资源名即规则的作用对象grade熔断策略支持慢调用比例/异常比例/异常数策略慢调用比例count慢调用比例模式下为慢调用临界 RT超出该值计为慢调用异常比例/异常数模式下为对应的阈值timeWindow熔断时长单位为 sminRequestAmount熔断触发的最小请求数请求数小于该值时即使异常比率超出阈值也不会熔断1.7.0 引入5statIntervalMs统计时长单位为 ms如 60*1000 代表分钟级1.8.0 引入1000 msslowRatioThreshold慢调用比例阈值仅慢调用比例模式有效1.8.0 引入 2️⃣熔断策略 1慢调用比例 慢调用比例 (SLOW_REQUEST_RATIO)选择以慢调用比例作为阈值需要设置允许的慢调用 RT即最大的响应时间请求的响应时间大于该值则统计为慢调用。当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且慢调用的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF­OPEN 状态若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断若大于设置的慢调用 RT 则会再次被熔断。 测试用例 RequestMapping(/test) public String test() {try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}return test(); }jemeter压测/test接口保证每秒请求数超过配置的最小请求数 查看实时监控可以看到断路器熔断效果 此时浏览器访问会出现服务降级结果 2异常比例 异常比例 (ERROR_RATIO)当单位统计时长statIntervalMs内请求数目大于设置的最小请求数目并且异常的比例大于阈值则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态HALF­OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0]代表 0% ­ 100%。 测试用例 RequestMapping(/test2) public String test2() {atomicInteger.getAndIncrement();if (atomicInteger.get() % 2 0){//模拟异常和异常比率int i 1/0;}return test2(); }配置降级规则 查看实时监控可以看到断路器熔断效果 3异常数 异常数 (ERROR_COUNT)当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态HALF­OPEN 状态若接下来的一个请求成功完成没有错误则结束熔断否则会再次被熔断。 注意异常降级仅针对业务异常对 Sentinel 限流降级本身的异常BlockException不生效。 配置降级规则 jemeter测试 查看实时监控可以看到断路器熔断效果 整合openfeign进行降级 引入依赖 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring‐cloud‐starter‐alibaba‐sentinel/artifactId /dependency dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring‐cloud‐starter‐openfeign/artifactId /dependencyapplication.yml #对Feign的支持 feign:sentinel:enabled: true # 添加feign对sentinel的支持openfegin接口 FeignClient(value nacos‐payment‐provider,fallback ConsumerFallBackService.class ) public interface ConsumerService {GetMapping(value /paymentSQL/{id})public CommonResultPayment paymentSQL(PathVariable(id) Long id); }openfegin的fallback实现类 Component public class ConsumerFallBackService implements ConsumerService {Overridepublic CommonResultPayment paymentSQL(Long id) {return new CommonResultPayment(500,进入兜底方法‐‐‐ConsumerFallBackService,null);} }五、热点参数限流 热点参数限流 热点识别流控何为热点热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的数据并对其访问进行限制。比如 热点参数限流会统计传入参数中的热点参数并根据配置的限流阈值与模式对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制仅对包含热点参数的资源调用生效。 注意 热点规则需要使用SentinelResource(“resourceName”)注解否则不生效参数必须是7种基本数据类型才会生效 测试用例 RequestMapping(/info/{id}) SentinelResource(value userinfo,blockHandlerClass CommonBlockHandler.class,blockHandler handleException2,fallbackClass CommonFallback.class,fallback fallback) 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。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ec667e76c7844353a0dc7322d2368f90.png#pic_center 400x) 六、系统规则 Sentinel 系统自适应限流从整体维度对应用入口流量进行控制结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标通过自适应的流控策略让系统的入口流量和系统的负载达到一个平衡让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。 Load 自适应仅对 Linux/Unix­like 机器生效系统的 load1 作为启发指标进行自适应系统保护。当系统load1 超过设定的启发值且系统当前的并发线程数超过估算的系统容量时才会触发系统保护BBR 阶段。系统容量由系统的 maxQps × minRt 估算得出。设定参考值一般是 CPU cores × 2.5。CPU usage1.5.0 版本当系统 CPU 使用率超过阈值即触发系统保护取值范围 0.0­1.0比较灵敏。平均 RT当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护单位是毫秒。并发线程数当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。入口 QPS当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。 编写系统规则 jemeter配置 测试结果 七、授权控制规则 很多时候我们需要根据调用来源来判断该次请求是否允许放行这时候可以使用 Sentinel 的来源访问控制黑白名单控制的功能。来源访问控制根据资源的请求来源origin限制资源是否通过若配置白名单则只有请求来源位于白名单内时才可通过若配置黑名单则请求来源位于黑名单时不通过其余的请求通过。 来源访问控制规则AuthorityRule非常简单主要有以下配置项 resource资源名即限流规则的作用对象。limitApp对应的黑名单/白名单不同 origin 用 , 分隔如 appA,appB。strategy限制模式AUTHORITY_WHITE 为白名单模式AUTHORITY_BLACK 为黑名单模式默认为白名单模式。 配置授权规则 第一步实现com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser接口在parseOrigin方法中区分来源并交给spring管理注意如果引入CommonFilter此处会多出一个 import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;/** * author Fox */ Component public class MyRequestOriginParser implements RequestOriginParser {/*** 通过request获取来源标识交给授权规则进行匹配* param request* return*/Overridepublic String parseOrigin(HttpServletRequest request) {// 标识字段名称可以自定义String origin request.getParameter(serviceName);// if (StringUtil.isBlank(origin)){// throw new IllegalArgumentException(serviceName参数未指定);// }return origin;} }测试origin是order的请求不通过。 八、集群规则 为什么要使用集群流控呢假设我们希望给某个用户限制调用某个 API 的总 QPS 为 50但机器数可能很多比如有 100 台。这时候我们很自然地就想到找一个 server 来专门来统计总的调用量其它的实例都与这台 server 通信来判断是否可以调用。这就是最基础的集群流控的方式。 另外集群流控还可以解决流量不均匀导致总体限流效果不佳的问题。假设集群中有 10 台机器我们给每台机器设置单机限流阈值为 10 QPS理想情况下整个集群的限流阈值就为 100 QPS。不过实际情况下流量到每台机器可能会不均匀会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量结合单机限流兜底可以更好地发挥流量控制的效果。 https://github.com/alibaba/Sentinel/wiki/集群流控 集群流控中共有两种身份 Token Client集群流控客户端用于向所属 Token Server 通信请求token。集群限流服务端会返回给客户端结果决定是否限流。Token Server即集群流控服务端处理来自 Token Client的请求根据配置的集群规则判断是否应该发放token是否允许通过。 Sentinel 集群流控支持限流规则和热点规则两种规则并支持两种形式的阈值计算方式 集群总体模式即限制整个集群内的某个资源的总体 qps 不超过此阈值。单机均摊模式单机均摊模式下配置的阈值等同于单机能够承受的限额token server 会根据连接数来计算总的阈值比如独立模式下有 3个 client 连接到了 token server然后配的单机均摊阈值为 10则计算出的集群总量就为30按照计算出的总的阈值来进行限制。这种方式根据当前的连接数实时计算总的阈值对于机器经常进行变更的环境非常适合。 Sentinel 集群限流服务端有两种启动方式 独立模式Alone即作为独立的 token server 进程启动独立部署隔离性好但是需要额外的部署操作。独立模式适合作为Global Rate Limiter 给集群提供流控服务。 嵌入模式Embedded即作为内置的 token server与服务在同一进程中启动。在此模式下集群中各个实例都是对等的token server 和 client可以随时进行转变因此无需单独部署灵活性比较好。但是隔离性不佳需要限制 token server 的总QPS防止影响应用本身。嵌入模式适合某个应用集群内部的流控。 云上版本 AHAS Sentinel 提供开箱即用的全自动托管集群流控能力无需手动指定/分配 token server 以及管理连接状态同时支持分钟小时级别流控、大流量低延时场景流控场景同时支持 Istio/Envoy 场景的 Mesh 流控能力。 后记 Java全栈学习路线可参考【Java全栈学习路线】最全的Java学习路线及知识清单Java自学方向指引内含最全Java全栈学习技术清单~ 算法刷题路线可参考算法刷题路线总结与相关资料分享内含最详尽的算法刷题路线指南及相关资料分享~
http://www.dnsts.com.cn/news/1261.html

相关文章:

  • 云南火电建设公司网站推广营销网络
  • 区域信息网站怎么做平台推广是什么工作
  • 郑州网站建设包括哪些推广普通话的意义30字
  • 郑州专业网站建设公司百度如何添加店铺位置信息
  • 制作 网站合肥网站排名提升
  • 图书页面设计模板网络推广优化服务
  • 什么是网站跳出率如何建立企业网站
  • 莱芜新闻头条沈阳百度seo排名优化软件
  • 博物馆装饰设计公司aso推广优化
  • 微信营销软件网站建设直销产业发展论坛
  • 阿里云网站建设好了怎么网络营销分类
  • 邢台吧贴吧seo搜索引擎推广
  • 最牛网站建设是谁google搜索首页
  • 百度网站收入提交网站友情链接购买
  • 直播网站模板怎样做企业推广
  • wordpress 上标 小圆1网络优化培训骗局
  • 网页设计尺寸详解seopeix
  • 有创意的广告上海搜索优化推广
  • 上海昆山网站公司迅雷磁力
  • 基础微网站开发信息跨境电商怎么开店铺
  • 华强北电子网站建设优化法治化营商环境
  • dw如何做网站后台平面设计主要做什么
  • 集约化网站数据库建设规范行业关键词分类
  • 河北提供网站建设公司哪家好上海最近3天疫情情况
  • 全友全屋定制官网网站优化是什么意思
  • wordpress淘宝客建站教程视频体验营销策略
  • 如何查看网站开发公司搜狗营销
  • 苏州品牌网站设计站长工具seo综合查询columbu cat
  • 做黄网站赚钱吗万能优化大师下载
  • 做任务领黄钻的网站seo推广培训费用