在 Sentinel 中,异常比例(Exception Ratio)和异常数(Exception Count)是两种用于触发熔断机制的策略。这两种策略都是为了防止服务过载或故障传播,但它们的触发条件有所不同。
异常比例(Exception Ratio)
异常比例策略是基于请求的异常率来决定是否触发熔断的。当一段时间内的异常请求占总请求数的比例超过预设的阈值时,Sentinel 将触发熔断。
配置方式:
- 定义资源:首先需要定义一个资源,例如一个服务调用或 API 端点。
- 设置熔断规则:
- 异常比例阈值:设置一个阈值,例如 0.5 表示当异常请求占比超过 50% 时触发熔断。
- 统计时间窗口:指定一个时间窗口长度,在这个时间段内计算异常请求的比例。例如设置为 10 秒。
例子配置:
FlowRule rule = new FlowRule();
rule.setResource("your-resource-name");
rule.setGrade(RuleConstant.FLOW_GRADE_EXCEPTION);
rule.setCount(0.5); // 设置异常比例阈值为 50%
rule.setIntervalSec(10); // 设置统计时间窗口为 10 秒
FlowRuleManager.loadRules(Collections.singletonList(rule));
异常数(Exception Count)
异常数策略是基于在指定时间窗口内的异常请求次数来决定是否触发熔断的。当异常请求次数超过预设的阈值时,Sentinel 将触发熔断。
配置方式:
- 定义资源:同样需要定义一个资源。
- 设置熔断规则:
- 异常数阈值:设置一个阈值,例如 5 表示当异常请求次数超过 5 次时触发熔断。
- 统计时间窗口:指定一个时间窗口长度,在这个时间段内统计异常请求的次数。例如设置为 10 秒。
例子配置:
FlowRule rule = new FlowRule();
rule.setResource("your-resource-name");
rule.setGrade(RuleConstant.FLOW_GRADE_EXCEPTION_COUNT);
rule.setCount(5); // 设置异常数阈值为 5
rule.setIntervalSec(10); // 设置统计时间窗口为 10 秒
FlowRuleManager.loadRules(Collections.singletonList(rule));
区别
- 触发条件:异常比例是基于请求异常率的百分比来触发熔断的,而异常数是基于异常请求次数来触发的。
- 应用场景:异常比例适合用于那些异常请求率较高的情况,而异常数则更适合用于那些异常请求次数较少但依然需要保护的情况。
- 灵活性:异常比例策略相对更为灵活,因为它考虑了请求总量的变化;而异常数策略则更为直接简单,只需要设置一个具体的数字阈值即可。
总结
异常比例和异常数两种策略各有特点,可以根据实际应用场景选择最适合的策略。在配置时,需要根据服务的实际运行情况来合理设置阈值和统计时间窗口,以确保熔断机制能够有效防止故障传播。