定序模块

本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。

定序模块

定序模块处理逻辑

防丢机制解析

每个事件消息包含:

  • Sequence ID (sid):事件的唯一全局递增 ID。
  • Previous ID (pid):前一个事件的 sid,形成 链式结构
  • 消息内容 (msg):实际业务数据。

示例

┌─────┐   ┌─────┐   ┌─────┐   ┌─────┐
│sid=1│   │sid=2│   │sid=3│   │sid=4│
│pid=0│──▶│pid=1│──▶│pid=2│──▶│pid=3│
│msg=A│   │msg=B│   │msg=C│   │msg=D│
└─────┘   └─────┘   └─────┘   └─────┘

消息去重机制

┌─────┐┌─────┐┌─────┐┌ ─ ─ ┐┌ ─ ─ ┐┌─────┐
│sid=1││sid=2││sid=3│ sid=2  sid=3 │sid=4│
│pid=0││pid=1││pid=2││pid=1││pid=2││pid=3│
│msg=A││msg=B││msg=C│ msg=B  msg=C │msg=D│
└─────┘└─────┘└─────┘└ ─ ─ ┘└ ─ ─ ┘└─────┘
  • sid=2sid=3 发生重复,接收方会 检测 sid 是否已经处理过,并 丢弃重复消息

消息丢失检测

┌─────┐┌─────┐┌ ─ ─ ┐┌─────┐
│sid=1││sid=2│       │sid=4│
│pid=0││pid=1││     ││pid=3│
│msg=A││msg=B│       │msg=D│
└─────┘└─────┘└ ─ ─ ┘└─────┘
  • sid=3 丢失,接收方检测到 sid=4pid=3,但自己未收到 sid=3,立即触发 补偿机制

补偿机制

  • 查询数据库(或持久化存储) 获取丢失的消息:
    • sid=3 早已落库,则读取并补发。
    • sid=3 仍未落库,则等待后续补发。
  • 主动请求重发
    • 通过 API 通知定序系统,要求补发 sid=3 的数据。

总结

如何保证消息的顺序性、幂等性和完整性?

  1. 去重:每个事件携带全局唯一 sid,下游系统去重处理。
  2. 检测丢失pid 记录前一事件的 ID,形成链式结构,能发现丢失事件。
  3. 补偿机制:若 sid 断层,查询数据库或请求补发,确保数据完整性。
LeetCode Weekly Contest 439
Garbage Collect