这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
网关职责与横向扩展
网关要轻量
WebSocket 网关应该尽量保持轻量,只负责连接层的事:
- 维护连接。
- 做基础鉴权。
- 接收用户消息。
- 推送房间消息。
- 执行连接级限流。
复杂审核、落库、统计、推荐等逻辑不要放在网关里——否则网关会变重,扩容和稳定性都会变差。
为什么网关要轻
- 网关数量多(按连接数扩容),逻辑复杂 → 每台都要维护复杂逻辑。
- 网关故障影响大(连接都在上面),逻辑复杂 → 故障面更大。
- 轻量网关可以快速重启、快速扩容。
业务逻辑放到下游消息服务,网关只做「连接的看门人」。
横向扩展
一台网关无法承载所有连接。多网关部署后,要解决「某个房间的用户分散在多台网关上」的问题。
常见方式:
消息服务 -> 发布房间消息 -> 多台网关各自推给本机连接
广播不是由一台服务直接推给所有人,而是:
- 消息服务把房间消息发布到房间频道。
- 各网关订阅自己的房间。
- 网关只推给本机连接。
这就是「发布-订阅 + 本地 fan-out」:扩展的是网关数量,而不是单点能力。
房间频道
- 每房间一个频道(或按分片多个频道)。
- 网关订阅它管辖房间的频道。
- 消息服务负责「发布到正确频道」。
频道机制让广播的复杂度从「连接数」变成「房间数 × 分片数」,可控得多。
连接可观测
长连接系统要监控:
- 当前连接数。
- 每秒新建连接和断开连接。
- 心跳超时率。
- 单网关发送队列长度。
- 推送失败率。
一句话
网关轻量化 + 发布订阅 fan-out,是弹幕系统横向扩展的核心:连接分散在网关,广播走频道,网关只推本机。这让系统能通过加网关扛住连接增长。
下一章处理热门房间的高并发广播——广播放大问题。
发现内容有问题?
告诉我们哪里需要改进。
