微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
微服务保护
文章目录
- 微服务框架
- 微服务保护
- 32 隔离和降级
- 32.6 熔断策略【异常比例、异常数】
- 32.6.1 熔断策略【异常比例、异常数】
- 32.6.2 案例
- 32.6.3 总结
32 隔离和降级
32.6 熔断策略【异常比例、异常数】
32.6.1 熔断策略【异常比例、异常数】
断路器熔断策略有三种:慢调用、异常比例或异常数
- 异常比例或异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。例如:
解读:统计最近1000ms内的请求,如果请求量超过10次,并且异常比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。
32.6.2 案例
【案例】熔断策略-异常比例
需求:给 UserClient的查询用户接口设置降级规则,统计时间为1秒,最小请求数量为5,失败阈值比例为0.4,熔断时长为5s
提示:为了触发异常统计,我们需要修改UserService中的业务,抛出异常:
修改controller 控制器
/**
* 路径: /user/110
*
* @param id 用户id
* @return 用户
*/
@GetMapping("/{id}")
public User queryById(@PathVariable("id") Long id,
@RequestHeader(value = "Truth", required = false) String truth) throws InterruptedException {
if (id == 1) {
//休眠,触发熔断
Thread.sleep(60);
} else if (id == 2) {
throw new RuntimeException("故意出错,触发熔断");
}
return userService.queryById(id);
}
OK。重启user 服务
先访问一下102
没问题,故意抛出了异常
打开sentinel 控制台
【异常比例】
直接新增
OK,现在就要模拟,1秒 请求5 次,异常比例0.4
先连续访问5 次102, 异常比例阈值达到,熔断,103 也不能正常访问
熔断前103 正常
OK,没毛病【快速失败】
32.6.3 总结
Sentinel熔断降级的策略有哪些?
- 慢调用比例:超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断
- 异常比例:统计单位时长内异常调用的比例,超过阈值则熔断
- 异常数:统计单位时长内异常调用的次数,超过阈值则熔断