Sentinel 在这套系统里主要守在 Gateway:按接口做 QPS 限流,按客户端 IP 做参数流控,并为路由配置异常比例和慢请求熔断。
一、规则配置化
zjc:
gateway:
sentinel:
enabled: true
interfaces:
- name: provider-user-detail
pattern: /api/[^/]+/provider/user/\d+
total-qps: 100
per-ip-qps: 10
interval-sec: 1
同一条接口规则同时生成全局 QPS 和单 IP QPS 限制。阈值写在配置里,代码负责装配和校验规则。
二、两种资源不能混
Sentinel Gateway Filter 按“路由 + API 分组”建立资源,用于接口限流;路由熔断由 Reactive CircuitBreaker 单独建立资源。两条链路语义不同,项目里刻意保持分离。
三、拒绝响应要统一
被限流或熔断拒绝时,Gateway 返回统一 JSON 结构,而不是把框架内部信息直接抛给调用方。这样调用方能按稳定错误码处理。
四、避坑点
- 单 IP 限流必须确认客户端 IP 来源,不能盲信
X-Forwarded-For。 - 熔断阈值要有最小请求数,避免低流量时误判。
- 限流是保护手段,不能替代容量规划。
- 规则越具体越容易失控,先守关键入口,再逐步细化。
五、经验总结
Sentinel 把“流量异常”变成可配置的规则。项目把它放在网关层,先保护系统总入口,再考虑服务内部更细粒度的治理。