网关职责与横向扩展

网关要轻量

WebSocket 网关应该尽量保持轻量,只负责连接层的事:

  • 维护连接。
  • 做基础鉴权。
  • 接收用户消息。
  • 推送房间消息。
  • 执行连接级限流。

复杂审核、落库、统计、推荐等逻辑不要放在网关里——否则网关会变重,扩容和稳定性都会变差。

为什么网关要轻

  • 网关数量多(按连接数扩容),逻辑复杂 → 每台都要维护复杂逻辑。
  • 网关故障影响大(连接都在上面),逻辑复杂 → 故障面更大。
  • 轻量网关可以快速重启、快速扩容。

业务逻辑放到下游消息服务,网关只做「连接的看门人」。

横向扩展

一台网关无法承载所有连接。多网关部署后,要解决「某个房间的用户分散在多台网关上」的问题。

常见方式:

消息服务 -> 发布房间消息 -> 多台网关各自推给本机连接

广播不是由一台服务直接推给所有人,而是:

  1. 消息服务把房间消息发布到房间频道。
  2. 各网关订阅自己的房间。
  3. 网关只推给本机连接。

这就是「发布-订阅 + 本地 fan-out」:扩展的是网关数量,而不是单点能力。

房间频道

  • 每房间一个频道(或按分片多个频道)。
  • 网关订阅它管辖房间的频道。
  • 消息服务负责「发布到正确频道」。

频道机制让广播的复杂度从「连接数」变成「房间数 × 分片数」,可控得多。

连接可观测

长连接系统要监控:

  • 当前连接数。
  • 每秒新建连接和断开连接。
  • 心跳超时率。
  • 单网关发送队列长度。
  • 推送失败率。

一句话

网关轻量化 + 发布订阅 fan-out,是弹幕系统横向扩展的核心:连接分散在网关,广播走频道,网关只推本机。这让系统能通过加网关扛住连接增长。

下一章处理热门房间的高并发广播——广播放大问题。

发现内容有问题?

告诉我们哪里需要改进。