当前位置: 首页 > Web前端 > vue.js

SpringCloud微服务实战-搭建企业级开发框架(十五):集成Sentinel的高可用流量管理框架【熔断与降级】

时间:2023-04-01 02:06:14 vue.js

Sentinel不仅是流量控制,也是吹降不稳定资源的保障调用链路高可用性的重要措施之一。由于调用关系的复杂性,如果调用环节中某个资源不稳定,请求最终会累积起来。Sentinelfusedowngrade会在调用链路中某个资源处于不稳定状态(比如调用超时或比值异常升高)时,限制对该资源的调用,从而使请求快速失败,避免影响其他资源。连接错误。当资源降级时,对资源的调用将在下一个降级时间窗口内自动断开。Sentinel提供了以下熔断策略:慢调用率(SLOW_REQUEST_RATIO):选择慢调用率作为阈值,需要设置允许的慢调用RT(即最大响应时间)。如果请求的响应时间大于这个值,就会被算作慢调用。当单位统计时长(statIntervalMs)内的请求数大于设置的最小请求数,且慢调用比例大于阈值时,将在下一个中断时长内自动中断请求。熔断时间过后,保险丝进入检测恢复状态(HALF-OPEN状态)。如果下一次请求的响应时间小于设置的慢调用RT,则熔断结束,如果大于设置的慢调用RT,则再次熔断。异常比例(ERROR_RATIO):当单位统计时长(statIntervalMs)内的请求数大于设置的最小请求数,且异常比例大于阈值时,将在下一个时长内自动断开请求的断路器。熔断时间结束后,熔断器将进入检测恢复状态(HALF-OPEN状态)。如果下一次请求成功完成(没有错误),则熔断结束,否则再次熔断。异常值比率的阈值范围是[0.0,1.0],表示0%-100%。异常次数(ERROR_COUNT):当单位统计时间内的异常次数超过阈值时,将自动进行熔断。熔断时间结束后,熔断器将进入检测恢复状态(HALF-OPEN状态)。如果下一次请求成功完成(没有错误),则熔断结束,否则再次熔断。断路器降级规则说明:断路器降级规则(DegradeRule)包含以下重要属性:strategyslowcallratiocount在慢调用比例模式下,为慢调用临界RT(超过这个值算慢调用);在异常比/异常数模式下,是对应的阈值timeWindow熔断持续时间,单位为sminRequestAmount熔断触发的最小请求数,请求数小于此值时设置,即使异常比超过阈值,5statIntervalMs统计时长(单位ms)不会被吹断。例如60*1000表示分钟级1000msslowRatioThreshold慢调用比阈值,只有慢调用比模式有效。单独进行配置测试:1.寿险在SystemController.java中增加一个需要熔断测试的接口@ApiOperation(value="slowcallratiofusestrategy")@GetMapping(value="sentinel/slow/request/ratio")public结果sentinelRR(){try{doublerandomNumber;randomNumber=Math.random();如果(randomNumber>=0&&randomNumber<=0.80){Thread.sleep(300L);}elseif(randomNumber>=0.80&&randomNumber<=0.80+0.10){线程。睡眠(10L);}}catch(InterruptedExceptione){e.打印堆栈跟踪();}返回结果。成功ess("慢调用率熔断策略");}@ApiOperation(value="异常比率熔断策略")@GetMapping(value="sentinel/error/ratio")publicResultsentinelRatio(){inti=1/0;returnResult.success("异常比例熔断策略");}@ApiOperation(value="异常数熔断策略")@GetMapping(value="sentinel/error/count")publicResultsentinelCount(){inti=1/0;returnResult.success("异常数融合策略");}2。在浏览器中打开Sentinel管理控制台,打开降级规则菜单,添加降级规则,首先测试“慢调用率”,根据官方介绍,最大RT是指允许的最大响应时间。这里我们设置为200ms,比例阈值设置为0.8,熔断时长为10s,最小请求数为5,即:1ms内请求数大于5,慢调用比例大于80%,请求将在下一个熔断持续时间内自动断开。熔断持续时间为10秒,10秒后进入检测恢复状态(HALF-OPEN状态)。如果下一个请求的响应时间小于200ms,则熔断结束,如果大于200ms,则再次熔断。3.打开Jmeter,点击New->TestPlan->ThreadGroup->HTTPRequest-AggregateReport。线程组设置为15,循环次数为10004,测试结果为5,异常比例和异常个数参照上述测试方法进行测试,这里不再赘述,之前测试,需要在GitEgg-Platform中对GitEggControllerAdvice.java统一异常处理的代码进行注释,否则会捕获到测试代码抛出的异常,达不到预期的效果。本文源码在https://gitee.com/wmz1930/GitEgg的chapter-15分支。