流控策略:直接、关联、链路三种模式

引言:不同的限流粒度 前面我们学习了流控效果(快速失败、Warm Up、匀速排队),解决了"如何处理超出阈值的请求"。 但还有一个问题:限流的目标是谁? 场景思考: 场景1:订单查询接口被限流,应该影响订单创建吗? 场景2:同一个接口,从网关调用和从定时任务调用,限流阈值应该一样吗? 场景3:写接口压力大,是否应该限制读接口来保护写接口? 这些问题的答案,藏在Sentinel的三种流控策略中: 直接:直接限流当前资源 关联:关联资源达到阈值时,限流当前资源 链路:从特定入口调用时才限流 一、直接模式:最常用的限流策略 1.1 原理 直接模式:直接对当前资源进行限流,最简单直接。 资源A:限流阈值100 请求 → 资源A ↓ QPS统计 ↓ 超过100? ├─ Yes → 限流 └─ No → 通过 特点: ✅ 最常用(95%的场景) ✅ 简单直接 ✅ 独立限流,不影响其他资源 1.2 配置方式 FlowRule rule = new FlowRule(); rule.setResource("order_query"); // 资源名称 rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // QPS限流 rule.setCount(100); // 阈值100 // 流控策略:直接(默认,可省略) rule.setStrategy(RuleConstant.STRATEGY_DIRECT); FlowRuleManager.loadRules(Collections.singletonList(rule)); 1.3 适用场景 大多数API接口: @RestController public class OrderController { // 订单查询:直接限流 @GetMapping("/api/order/{id}") @SentinelResource("order_query") public Result query(@PathVariable Long id) { Order order = orderService.getById(id); return Result.success(order); } // 订单创建:直接限流 @PostMapping("/api/order/create") @SentinelResource("order_create") public Result create(@RequestBody OrderDTO dto) { Order order = orderService.create(dto); return Result.success(order); } } // 配置规则 FlowRule rule1 = new FlowRule(); rule1.setResource("order_query"); rule1.setCount(1000); // 查询接口1000 QPS FlowRule rule2 = new FlowRule(); rule2.setResource("order_create"); rule2.setCount(500); // 创建接口500 QPS FlowRuleManager.loadRules(Arrays.asList(rule1, rule2)); 二、关联模式:保护关联资源 2.1 原理 关联模式:当关联资源达到阈值时,限流当前资源。 ...

2025-01-21 · maneng

如约数科科技工作室

浙ICP备2025203501号

👀 本站总访问量 ...| 👤 访客数 ...| 📅 今日访问 ...