实时与异步链路拆分

同步全做的代价

如果用户发送弹幕后,服务端同步完成审核、落库、统计、推荐、通知再返回,会发生什么:

  • 延迟很高:一个慢环节拖慢整条链路。
  • 峰值崩盘:大促时同步调用放大压力。
  • 耦合紧密:一个下游挂了,发送就失败。

直播弹幕系统需要把实时链路和异步链路拆开。

实时与异步的分工

用户发送 -> 快速校验 -> 投递消息 -> 实时分发
                         -> 异步审核/落库/统计
  • 实时链路:快速校验 + 投递 + 分发,只做必须同步的事。
  • 异步链路:审核、落库、统计,通过消息队列慢慢做。

消息队列的作用是削峰和解耦:

  • 削峰:高峰消息先入队,消费端慢慢消化。
  • 解耦:发送方不依赖下游的可用性。

拆开的收益

  • 延迟稳定:实时链路不被慢环节拖累。
  • 容错增强:异步任务失败可重试,不影响发送。
  • 扩展独立:落库慢就加消费实例,不影响分发。

拆开的代价

  • 一致性变弱:异步结果是「最终一致」。
  • 需要幂等:重复投递要能去重。
  • 需要监控:队列积压要能看到。

一句话

实时 + 异步拆分是弹幕系统的架构分水岭:实时链路追求低延迟,异步链路负责落库与治理。消息队列就是这两条链路的连接器。

下一节看队列怎么拆——不同任务不能共用一个队列。

发现内容有问题?

告诉我们哪里需要改进。