Skeyevss FAQ:API 限流、熔断与排队
试用安装包下载 | SMS | 在线演示
项目地址:https://github.com/openskeye/go-vss
1. 为什么需要限流
开放 API 面临:爬虫、误循环脚本、DDoS、租户突发批量任务。不限流时,数据库与 SIP 模块可能被 HTTP 层拖垮,出现全站注册异常等次生故障。
2. 限流维度
- 全局限流:保护集群;
- 按租户/用户:公平性;
- 按 IP:防滥用,注意NAT 后误伤;
- 按接口:登录、检索、导出等高成本接口单独更严。
算法常用令牌桶、漏桶、滑动窗口。
3. 熔断与降级
当下游错误率超阈(如 DB 超时激增),快速失败比堆积请求更健康。熔断打开期间返回503 + Retry-After,客户端应指数退避。
注意:读接口熔断与写接口熔断策略可不同;核心SIP 路径可能与 HTTP 管理面隔离。
4. 排队 vs 拒绝
- 同步排队会占用worker 与连接,长队列放大延迟;
- 异步队列适合导出报表类任务;
- 对实时性高的播放信令,通常直接拒绝优于无限排队。
5. 观测
- 暴露限流命中次数、熔断状态、排队深度;
- 告警429/503 比例突增。
6. 与网关协同
若API 网关已限流,业务层重复限流需避免逻辑冲突;统一错误码便于前端处理。
限流是容量管理的一部分;上线前应用压测得出单实例安全 QPS,再配阈值。