写入路径(唯一事务边界在 PG 内):
业务操作
├─ 写 PostgreSQL(唯一权威源,事务内)
└─ 写 outbox 事件表(同一事务,原子落盘)
│
▼
后台 worker 异步消费 outbox(best-effort + 重试 + 死信)
├─→ Milvus(向量索引:插入/删除)
├─→ Neo4j(图谱:MERGE/重建)
└─→ MinIO(对象:幂等,按 key 隔离)
检索路径:
Milvus / Neo4j 命中候选 → 回 PostgreSQL 校验存在性与权限,再取详情
标题: [架构][RFC] 建议改为「PostgreSQL 为主库 + 衍生存储」的 System of Record 架构,根治跨库一致性问题
正文:
背景:当前设计的根因
当前代码把 PostgreSQL、Milvus、Neo4j、MinIO 当成平级的事务参与者,写入时试图对它们"同时原子提交":
根因不是"缺分布式事务",而是"设计上就不该有跨库事务"。PG / Milvus / Neo4j 是异构存储,2PC 等分布式事务不现实;靠补偿/对账只能缓解,无法根治。
目标架构:System of Record + Derived Stores
核心原则:
业界参考
改造步骤(分阶段,可独立合入)
Phase 1 —— 最小改动,先堵住两个 P1:
Phase 2 —— 引入 Outbox:
Phase 3 —— 对账与自愈:
收益
代价
关联 issue
#867、#876、#878、#879 均为本问题实例。若方向认可,建议在本 RFC 下讨论后按 Phase 分步实施。