跳至正文
← 全部技术洞察

TECHNICAL INSIGHTS / 技术洞察

.NET 服务限流应该按 IP、用户还是租户?

一个共享出口 IP 可能代表整个企业,单个用户也可能同时使用多个客户端。限流维度选择不当,会误伤正常业务或无法限制真正的高负载调用。应从资源消耗和业务公平性出发设计。

区分防滥用与容量保护

登录尝试、普通查询和批量导出需要不同规则。IP 可以提供部分来源信息,但不应被当成稳定用户身份。对已认证接口,可结合租户、用户或操作类型设计配额,并处理未认证流量。

单实例限制不等于全站配额

多个副本各自维护计数时,总体允许量可能随副本数变化。方案应说明限制作用在哪一层、是否需要跨实例协调,以及协调设施不可用时如何处理。不要让扩容悄悄改变对客户承诺的额度。

拒绝结果也属于接口契约

调用方需要知道请求被限制,是否允许稍后重试。对昂贵任务也可以考虑排队与配额,但应提供状态和等待上限。限流不能替代授权,更不能允许用户换标识绕过业务权限。

验收公平性与峰值行为

测试同一租户多用户、多个租户共享 IP 和副本变化等情况。检查正常业务是否受影响,以及拒绝是否减少了目标资源压力。规则应可观测并有调整记录。

常见问题:阈值可以直接按服务器 CPU 设置吗?

不宜单独依据 CPU。还需要结合数据库、外部依赖、请求成本和业务峰值进行验证。

技术参考:微软:ASP.NET Core 限流。具体接口与配置请结合使用版本核对。

将评估落实到你的系统

如果内部团队需要把这些约定落到可运行的工程中,可以通过微服务基础架构建设沟通接口、公共能力与交接范围,先以一个业务场景验证方案。