Sentinel三大流控策略全解析

Sentinel 中的三种流控策略(STRATEGY_DIRECTSTRATEGY_RELATESTRATEGY_CHAIN)是 针对不同业务场景设计的精细化流量控制手段 。它们的核心区别在于:"以什么维度来判断是否触发限流"

下面逐个详解其含义、原理和典型应用场景:


🟢 1. STRATEGY_DIRECT(直接流控)

✅ 含义:

  • 对当前资源本身进行限流
  • 可进一步细分为:
    • 按调用方(origin)限流 :如只限制来自 "mobile" 应用的请求。
    • 对所有调用方统一限流 :即 limitApp = "default"

🔧 原理:

  • 使用 当前资源的统计节点ClusterNodeOriginNode)来判断 QPS/线程数是否超限。
  • 例如:/order/create 接口每秒最多处理 100 次请求。

📌 典型场景:

场景 配置示例 说明
接口整体保护 resource="/pay", limitApp="default", strategy=DIRECT 所有来源的 /pay 请求总和不能超过阈值
多租户隔离 resource="/api", limitApp="tenantA", strategy=DIRECT 只限制租户 A 的调用量,不影响 tenantB
防刷/防爬 resource="/login", limitApp="crawler", strategy=DIRECT 识别并限制爬虫流量

💡 最常用、最直观的策略,适用于绝大多数基础限流需求。


🔵 2. STRATEGY_RELATE(关联流控)

✅ 含义:

  • 当某个"关联资源"达到阈值时,限流当前资源
  • 即:A 资源的流量影响 B 资源的可用性,通过控制 B 来保护 A。

🔧 原理:

  • 限流判断依据不是当前资源的指标,而是 另一个资源(refResource)的全局流量
  • 例如:当 order-service 被大量调用时,自动限制 payment-service 的入口,防止支付服务拖垮订单服务。

📌 典型场景:

场景 配置示例 说明
保护下游依赖 resource="/pay", refResource="db-write", strategy=RELATE 当数据库写入压力大时,限制支付请求
削峰填谷 resource="/submit-order", refResource="/query-stock", strategy=RELATE 库存查询频繁时,限制下单(避免超卖)
第三方 API 保护 resource="/notify-user", refResource="sms-api", strategy=RELATE 短信接口快打满时,暂停用户通知

⚠️ 注意:refResource全局资源名,不区分调用方。


🟣 3. STRATEGY_CHAIN(链路流控)

✅ 含义:

  • 只在特定的调用链路(入口)上触发限流
  • 即:同一个接口,从不同入口调用时,限流策略不同。

🔧 原理:

  • 通过 Context.getName()(即 入口资源名 )判断当前调用链是否匹配 refResource
  • 仅当 入口资源 == refResource 时,才对当前资源进行限流。

📌 典型场景:

场景 配置示例 说明
区分内外流量 resource="/user/info", refResource="gateway-entry", strategy=CHAIN 只限制从网关进来的请求,内部服务调用不受限
防止入口打爆内部服务 resource="/cache/get", refResource="/order/detail", strategy=CHAIN 只有 /order/detail 调用缓存时才限流,其他路径不限
灰度发布控制 resource="/new-feature", refResource="gray-gateway", strategy=CHAIN 仅对灰度入口限流,不影响主干

🔑 关键点:

  • refResource 必须是 调用链的入口资源名(通常是第一个被 Sentinel 保护的资源)。
  • 内部服务间调用(无入口上下文)通常不会触发此策略。

🆚 三者对比总结

策略 判断依据 适用场景 是否依赖 refResource
DIRECT 当前资源自身流量(可按 origin 细分) 通用限流、多租户隔离 ❌ 否
RELATE 另一个资源(refResource)的全局流量 保护依赖、联动限流 ✅ 是
CHAIN 当前调用链的入口资源是否匹配 refResource 链路级精细化控制 ✅ 是

💡 实际配置示例(代码)

java 复制代码
// 1. DIRECT: 限制 mobile 应用访问 /api
FlowRule rule1 = new FlowRule("api")
    .setLimitApp("mobile")
    .setStrategy(RuleConstant.STRATEGY_DIRECT)
    .setCount(10);

// 2. RELATE: 当 /order 流量高时,限制 /pay
FlowRule rule2 = new FlowRule("pay")
    .setLimitApp("default")
    .setStrategy(RuleConstant.STRATEGY_RELATE)
    .setRefResource("order") // 关联资源
    .setCount(50);

// 3. CHAIN: 只在从 gateway 进来的链路限制 /user
FlowRule rule3 = new FlowRule("user")
    .setLimitApp("default")
    .setStrategy(RuleConstant.STRATEGY_CHAIN)
    .setRefResource("gateway") // 入口资源名
    .setCount(20);

✅ 总结一句话:

  • DIRECT → "我自己不能太忙"
  • RELATE → "他太忙了,我得帮他挡一挡"
  • CHAIN → "只有从那条路来的人,我才管"

理解这三种策略,就能在复杂微服务架构中实现 精准、灵活、安全的流量治理

相关推荐
数据法师25 分钟前
开源情报收集工具GhostTrack深度测评:IP、手机号、用户名的合规信息查询方案
网络·网络协议·tcp/ip
丑八怪大丑2 小时前
Java网络编程
linux·服务器·网络
想成为优秀工程师的爸爸2 小时前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
数智工坊3 小时前
【SAM-DETR论文阅读】:基于语义对齐匹配的DETR极速收敛检测框架
网络·论文阅读·人工智能·深度学习·transformer
时空自由民.4 小时前
蓝牙协议之GAP协议
linux·服务器·网络
灰子学技术4 小时前
Envoy HTTP Connection Manager (HCM) 技术文档
网络·网络协议·http
byoass4 小时前
企业云盘与设计软件深度集成:AutoCAD/Revit/SolidWorks插件开发与API集成实战
服务器·网络·数据库·安全·oracle·云计算
智慧光迅AINOPOL5 小时前
全光网设备厂家选型参考:评估要点与技术标准说明
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案
qq_三哥啊5 小时前
【mitmproxy】提取 OpenCode 的 API 接口
网络·代理模式
dog2505 小时前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php