限流与连接限制
限流保护登录、API、聊天、WebSocket 建连和流媒体路径。多副本部署依赖 Redis 共享限流状态。
connection_limits
Section titled “connection_limits”| 字段 | 默认值 | 用途 |
|---|---|---|
connection_limits.max_per_user | 20 | 每用户最大并发连接 |
connection_limits.max_per_room | 2000 | 每房间最大并发连接 |
connection_limits.max_total | 100000 | 全局最大并发连接 |
connection_limits.idle_timeout_seconds | 300 | 空闲连接断开时间 |
connection_limits.max_duration_seconds | 86400 | 单连接最大生命周期 |
connection_limits.ws_message_rate_limit_per_second | 50 | 单 WebSocket 连接消息速率 |
调整这些值时同时检查 CPU、内存、文件描述符、反向代理限制和 Kubernetes 资源限制。
messaging_rate_limits
Section titled “messaging_rate_limits”messaging_rate_limits: chat_per_second: 10 window_seconds: 1| 字段 | 用途 |
|---|---|
chat_per_second | 每窗口聊天消息上限 |
window_seconds | 统计窗口,单位秒 |
request_rate_limits: auth_max_requests: 5 auth_window_seconds: 60 write_max_requests: 120 write_window_seconds: 60 read_max_requests: 600 read_window_seconds: 60 media_max_requests: 120 media_window_seconds: 60 admin_max_requests: 180 admin_window_seconds: 60 streaming_max_requests: 1200 streaming_window_seconds: 60 websocket_max_requests: 60 websocket_window_seconds: 60每组字段都由两部分组成:
*_max_requests:一个窗口内允许的请求数。*_window_seconds:窗口长度,单位秒。
| 类别 | 用途 |
|---|---|
auth | 登录、注册、刷新 token 等认证接口 |
write | 创建、修改、删除 |
read | 列表、详情、状态查询 |
media | 添加、删除、解析和批量媒体操作 |
admin | 管理接口 |
streaming | HLS、FLV、媒体代理等 streaming HTTP 路径 |
websocket | WebSocket 建连尝试 |
公网部署保持 auth 严格。HLS 播放会产生 playlist 和 segment 请求,所以 streaming 默认更高。
HTTP 和 gRPC 请求使用同一套分类额度。
Redis 和多副本
Section titled “Redis 和多副本”没有 Redis 时,限流状态保存在当前进程内存中。多副本必须使用 Redis,否则每个副本独立计数。
例:3 个副本,每个副本允许每分钟 5 次登录尝试。如果请求分散到所有副本,实际可能变成每分钟 15 次。
| 部署形态 | 要求 |
|---|---|
| 本地测试 | Redis 可选 |
| 生产单机 | 配置 Redis |
| 多副本 | 必须配置 Redis |