范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

sentinel中的QPS降级操作DegradeSlot

  sentinel通过在各种slot来实现不同的功能,其中的DegradeSlot就是根据各种规则来进降级操作,下面介绍一下DegradeSlot。
  DegradeSlot #entry public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, boolean prioritized, Object... args)         throws Throwable {         DegradeRuleManager.checkDegrade(resourceWrapper, context, node, count);         fireEntry(context, resourceWrapper, node, count, prioritized, args);     }   public static void checkDegrade(ResourceWrapper resource, Context context, DefaultNode node, int count)         throws BlockException {           Set rules = degradeRules.get(resource.getName());         if (rules == null) {             return;         }           for (DegradeRule rule : rules) {             if (!rule.passCheck(context, node, count)) {                 throw new DegradeException(rule.getLimitApp(), rule);             }         }     }
  Degrade通过函数checkDegrade来实现降级操作。先通过资源名从degradeRules中获取降级规则DegradeRule的集合,然后逐个调用DegradeRule中的函数passCheck来进行校验。
  DegradeRule#passCheck public boolean passCheck(Context context, DefaultNode node, int acquireCount, Object... args) {     //返回false直接进行降级     if (cut.get()) {         return false;     }     //降级是根据资源的全局节点来进行判断降级策略的     ClusterNode clusterNode = ClusterBuilderSlot.getClusterNode(this.getResource());     if (clusterNode == null) {         return true;     }     //根据响应时间降级策略     if (grade == RuleConstant.DEGRADE_GRADE_RT) {         //获取节点的平均响应时间         double rt = clusterNode.avgRt();         if (rt < this.count) {             passCount.set(0);             return true;         }         //rtSlowRequestAmount默认是5         // Sentinel will degrade the service only if count exceeds.         if (passCount.incrementAndGet() < rtSlowRequestAmount) {             return true;         }         //    根据异常比例降级     } else if (grade == RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO) {         double exception = clusterNode.exceptionQps();         double success = clusterNode.successQps();         double total = clusterNode.totalQps();         // If total amount is less than minRequestAmount, the request will pass.         if (total < minRequestAmount) {             return true;         }           // In the same aligned statistic time window,         // "success" (aka. completed count) = exception count + non-exception count (realSuccess)         double realSuccess = success - exception;         if (realSuccess <= 0 && exception < minRequestAmount) {             return true;         }           if (exception / success < count) {             return true;         }         //    根据异常数降级     } else if (grade == RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) {         double exception = clusterNode.totalException();         if (exception < count) {             return true;         }     }     //根据设置的时间窗口进行重置     if (cut.compareAndSet(false, true)) {         ResetTask resetTask = new ResetTask(this);         pool.schedule(resetTask, timeWindow, TimeUnit.SECONDS);     }       return false; }
  这个方法首先会去获取cut的值,如果是true那么就直接进行限流操作。然后会根据resource获取ClusterNode全局节点。往下分别根据三种不同的策略来进行降级。 DEGRADE_GRADE_RT根据响应时间进行降级if (grade == RuleConstant.DEGRADE_GRADE_RT) {     //获取节点的平均响应时间     double rt = clusterNode.avgRt();     if (rt < this.count) {         passCount.set(0);         return true;     }     //rtSlowRequestAmount默认是5     // Sentinel will degrade the service only if count exceeds.     if (passCount.incrementAndGet() < rtSlowRequestAmount) {         return true;     }  }
  如果是根据响应时间进行降级,那么会获取clusterNode的平均响应时间,如果平均响应时间大于所设定的count(默认是毫秒),那么就调用passCount加1,如果passCount大于5,那么直接降级。
  所以看到这里我们应该知道根据平均响应时间降级前几个请求即使响应过长也不会立马降级,而是要等到第六个请求到来才会进行降级。
  我们进入到clusterNode的avgRt方法中看一下是如何获取到clusterNode的平均响应时间的。public double avgRt() {     //获取当前时间窗口内调用成功的次数     long successCount = rollingCounterInSecond.success();     if (successCount == 0) {         return 0;     }     //获取窗口内的响应时间     return rollingCounterInSecond.rt() * 1.0 / successCount; }
  这个方法主要是调用rollingCounterInSecond获取成功次数,然后再获取窗口内的响应时间,用总响应时间除以次数得到平均每次成功调用的响应时间。 而在时间窗口内的总相应时间和总成功次数,则是通过StatisticSlot整个slot中的滑窗功能来统计。
  DEGRADE_GRADE_RT根据响应时间进行降级if (grade == RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO) {     //获取每秒异常的次数     double exception = clusterNode.exceptionQps();     //获取每秒成功的次数     double success = clusterNode.successQps();     //获取每秒总调用次数     double total = clusterNode.totalQps();     // If total amount is less than minRequestAmount, the request will pass.     // 如果总调用次数少于5,那么不进行降级     if (total < minRequestAmount) {         return true;     }       // In the same aligned statistic time window,     // "success" (aka. completed count) = exception count + non-exception count (realSuccess)     double realSuccess = success - exception;     if (realSuccess <= 0 && exception < minRequestAmount) {         return true;     }       if (exception / success < count) {         return true;     }  } ...... return false;
  这个方法中获取成功调用的Qps和异常调用的Qps,验证后,然后求一下比率,如果没有大于count,那么就返回true,否则返回false抛出异常。
  们再进入到exceptionQps方法中看一下: public double exceptionQps() {     return rollingCounterInSecond.exception() / rollingCounterInSecond.getWindowIntervalInSec(); }
  rollingCounterInSecond.getWindowIntervalInSec方法是表示窗口的时间长度,用秒来表示。这里返回的是1。 根据异常数降级DEGRADE_GRADE_EXCEPTION_COUNTif (grade == RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) {     double exception = clusterNode.totalException();     if (exception < count) {         return true;     } }
  根据异常数降级是非常的直接的,直接根据统计的异常总次数判断是否超过count。

中兴新机官方预热5月9日见,全新屏下摄像头屏幕设计成为今年手机行业中的硬骨头,所以不少品牌仍是坚持发布打孔屏设计,原本以为一年一更,比如2017年的刘海屏2018年升降屏2019年水滴屏2020年打孔屏。到了2021年虽然IP属地上线社交平台拆穿人在美国,刚下飞机谎言中国新闻网近日,微博全量上线IP属地功能,即国内显示到省份地区,国外显示到国家,用户无法关闭该功能。一时间,各种人在美国人在日本的网红无处遁形原来他们都在国内。IP属地来了,究竟谁会赚钱的库克为何没有雷军聪明?原因有三,得了便宜别卖乖如果要问全世界最会赚钱的人是谁,相信很多人第一个想到的就是库克,毕竟苹果是全世界最赚钱的公司,没有之一。苹果公司2021年净利润高达946。8亿美元,约合6309。76亿元。对比之山东出现奥密克戎进化分支BA。2。3,系国内首次发现,更危险吗?4月25日,山东烟台市召开疫情防控新闻发布会,介绍疫情防控最新情况,山东烟台病例基因分型为奥密克戎BA。2。3进化分支,此前国内尚未发现。根据意大利安莎通讯引述的那不勒斯大学疾病工戴尔工作站Precision3260小型工作站评测戴尔新上市的超小型工作站Precision3260全面升级12代产品,到底表现怎么样今天给大家测看看。配置CPUi912900内存DDR532G4800Mhz(单根)硬盘双512G巅峰时以90亿把孩子卖给阿里,自己则成打工人,张旭豪图啥有句话说懒人是推动人类进步的原动力。这话猛一听有点离谱,但是细细想来,好像还真是这么个道理。事实上,有很多发明和创造,都是懒人为了省心省事想出来的解决办法。懒得走路,于是发明了自行115页PPT带您详细了解智慧工地怎么建设?5G智慧工地整体解决方案版权声明本资料来源网络,仅用于行业知识分享,供个人学习参考,不得作商业用途。侵删致歉如有侵权请联系小编,将在收到信息后第一时间进行删除!方案目录智慧工地产品应用5G智慧工地产品应用青春风暴来袭!vivoS15系列将携多款新品正式亮相vivo在近年来深耕手机产业,推出了许多实力派产品。近日,vivo官方发布了包含vivoS15系列在内的众多新品海报,海报内新款耳机平板设备的外观设计都充满青春气息,与如今的夏日氛夫妻相真的存在吗?研究结果这样解释你们真有夫妻相。这大概是夫妻在一起经常能听到的恭维。很多人都有这样的看法,长期生活在一起的伴侣看上去无论是样貌还是性格,都很相似。但夫妻在一起生活越久,他们的言行举止真的会越来越像盘点那些一千多的高通骁龙870手机随着高通骁龙888和8Gen1发热问题严重,性能良好,功耗均衡的870成为了这两年的香饽饽。870的机型在主攻性价比的品牌上1000多就能入手了,下面我们一起盘点一下。1红米K40鸿蒙3。0支持机型确定?盘点618值得入的3款华为手机,买对不买贵鸿蒙2。0系统更新已经快一年了,而鸿蒙3。0系统预计67月份就要发布了,很多小伙伴都对鸿蒙3。0支持机型名单十分关注,这也直接影响了消费者是否换新机的计划。近日,网上出现了一份鸿蒙
用加密货币和区块链可以构建一个什么样的世界?以太坊(英语Ethereum)是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称以太币)提供去中心化的虚拟机(称为以太虚拟机EthereumVi2021下半年顶级旗舰怎么选?4款最佳机型推荐,良心不踩坑现在的手机价格越来越贵了,很多机友都吐槽根本买不起新手机。这确实是一个很大的烦恼。但同时我们也必须注意到,很多价格贵的手机,确实也有贵的理由,它们用起来就是比一般的手机更好用,而且小米新系统曝光,CPU时间减少22,首发机型确认成立十年的小米公司,目前已经是一家全球知名的科技互联网企业,也是目前最年轻的世界500强公司,凭借手机和Alot产品的出色竞争力,小米产品进入千家万户,降低大家入手科技产品的门槛,中国5G领跑世界之际,再次夺下6G专利!美媒美国还是成为了第二中国在5G应用领域领跑之际,已经再次夺下了6G专利,成为全球第一?美国媒体无奈感叹,美国最终还是落伍,成为了中国人的陪练。近年来,我国在科技领域所取得的成绩也是非常显著的,随着中国独家东南亚小腾讯Shopee将推短视频应用,瞄准TikTok品玩获悉,冬海集团(SeaGroup)旗下的电商公司虾皮购物(Shopee),将在东南亚市场推出一款短视频应用,直接对标字节跳动旗下的短视频产品TikTok。据了解,该短视频项目的是她泄露了iPhone13?苹果高管被开除调查她半年了距离苹果秋季发布会还剩下最后几天,关于iPhone13系列的外观配置价格,网上早已曝光了无数次,距离发布会时间越近,曝光的消息就越准确。至于iPhone13系列的参数来自何处,Tw红米K50P将于春节前夕发布骁龙898IP68百瓦快充,价格感人日子过得飞快,转眼间已经到了9月中旬,与此同时关于各大厂商明年初的旗舰产品也是传来不少新消息,比如红米K50Pro便是其中的典型代表,根据近期多位博主的披露,作为红米K50系列中的8月新能源车销量宏光MINI夺冠,ModelY回前三,比亚迪4款车上榜乘联会最新数据显示,8月份新能源狭义乘用车销量25。0万辆,同比增长168。0,环比增长12。3累计销量148。0万辆,同比增长202。4。相比7月份,新的榜单前十变化明显,宏光M中俄科学家携手研发高速列车智能大脑新华社兰州9月11日电(记者张文静刘书辰)未来,如果高速列车司机遇到紧急情况,中俄研发的车载安全控制平台就可以帮助司机做出判断,进行安全操作。近日,中俄先进智能交通技术联合实验室中2款最便宜的12256GB手机,一款1899一款2199,都香得不行今年的安卓机非常流行12256GB的配置。12GB带来了非常够用的内存,256GB带来了非常够用的存储容量,过去旗舰机都很少有的搭配,今年在中端机彻底普及,目前最便宜的2款都只要2高效手机存储闪迪DDC4值得拥有随着手机像素的发展,我们走到哪里都是拍拍拍,于是手机的存储就开始不够用了,可是手机换个存储价格就变得高了很多。为了解决手机存储空间居高不下的价格,省一些钱给自己当做零花钱,我在网上