三阶段

通知系统的核心是什么

午饭时间,我在工位上思考通知系统的本质。

我想起一篇论文,把通知系统拆解为三个阶段:

通知系统的三个阶段

产生阶段业务事件触发通知用户 A 评论了用户 B 的动态,生成一条通知
→
存储阶段消息队列 + 持久化记录通知类型、内容、接收者、状态
→
投递阶段多渠道分发选择渠道,发送推送,更新状态
关键认知: 当前的旧系统把三个阶段混在一起,耦合度过高—— 轮询脚本既要查库、又要发送、还要更新状态,任何一个环节变慢都会拖垮整体。拆开三阶段是重构的第一步。

三阶段的分工

阶段做什么典型组件
产生阶段业务事件触发通知评论 / 点赞 / 关注服务
存储阶段消息队列 + 持久化RabbitMQ + 数据库
投递阶段多渠道分发推送服务 / 站内信

为什么拆开是关键

当前的旧系统把三个阶段混在一起:

  • 轮询脚本既查库(存储)、又发送(投递)、又更新状态(存储)。
  • 任何一个环节变慢都会拖垮整体。
  • 无法独立扩展:发送慢不能只加发送实例。

拆开三阶段,才能让每一环独立演进、独立扩展、独立容错。

两阶段 vs 三阶段

一个常见的思考是「两阶段」(产生 + 投递),但存储阶段不可或缺:

  • 站内信需要持久化(历史可查)。
  • 推送失败需要重试(状态存储)。
  • 审计需要留痕(谁收到了什么)。

存储阶段是可靠性的基石——它让「发不出」变成「待重试」,而不是「永久丢失」。

一句话

通知系统的本质是「产生 → 存储 → 投递」的三阶段流水线。当前系统把它们混在一起,所以处处是问题。拆开三阶段,是重构的第一步。

发现内容有问题?

告诉我们哪里需要改进。