这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
实时与异步链路拆分
同步全做的代价
如果用户发送弹幕后,服务端同步完成审核、落库、统计、推荐、通知再返回,会发生什么:
- 延迟很高:一个慢环节拖慢整条链路。
- 峰值崩盘:大促时同步调用放大压力。
- 耦合紧密:一个下游挂了,发送就失败。
直播弹幕系统需要把实时链路和异步链路拆开。
实时与异步的分工
用户发送 -> 快速校验 -> 投递消息 -> 实时分发
-> 异步审核/落库/统计
- 实时链路:快速校验 + 投递 + 分发,只做必须同步的事。
- 异步链路:审核、落库、统计,通过消息队列慢慢做。
消息队列的作用是削峰和解耦:
- 削峰:高峰消息先入队,消费端慢慢消化。
- 解耦:发送方不依赖下游的可用性。
拆开的收益
- 延迟稳定:实时链路不被慢环节拖累。
- 容错增强:异步任务失败可重试,不影响发送。
- 扩展独立:落库慢就加消费实例,不影响分发。
拆开的代价
- 一致性变弱:异步结果是「最终一致」。
- 需要幂等:重复投递要能去重。
- 需要监控:队列积压要能看到。
一句话
实时 + 异步拆分是弹幕系统的架构分水岭:实时链路追求低延迟,异步链路负责落库与治理。消息队列就是这两条链路的连接器。
下一节看队列怎么拆——不同任务不能共用一个队列。
发现内容有问题?
告诉我们哪里需要改进。
