Matrix 的下一代时间线:拼接顺序、时间线片段与状态 DAG
来源:media.ccc.de — 2026-10
📋 概述
Matrix 协议的时间线为了联邦做了不少妥协:Synapse 上 sync 与 history 的顺序不一致、跳不到加入之前的置顶消息、加入一个服务器曾经离开的房间时不知道会发生什么。Jade 与 Ginger 在 Matrix Conference 2026 讲了他们认为的解法:用 Stitched Ordering 把历史拆成事件与空档两类,用时间线片段表示分段历史,再用状态 DAG 解决认证。他们的结论很直白——方案是有的,但落地要好一阵子。
🔑 核心要点
- 房间在物理上不是一条线,而是产生偏序关系的图,客户端却必须给出某种线性表示
- 大多数服务端偷懒:客户端看到的顺序就是服务器收到的顺序,迟到的事件被塞到历史末尾
- 这个问题还会通过 /backfill 端点传染给其他服务器,因为大家用的是同一套排序逻辑
- 解法一是 Stitched ordering(Andy Balaam 等人的工作):历史条目只有事件和空档两种,收到 prev 事件缺失的新事件时插入 gap,而不是假装连续
- 解法二是 timeline fragments:把历史切成冷片段与头片段,允许中间存在断点
- Continuwuity 当前的取巧做法是把房间拆成历史列表加游离事件堆,历史列表不能有洞,于是一直无法给置顶消息提供上下文
- 解法三是 state DAG:只有 DAG 才能正确认证游离事件,也才能让片段与状态长期一致
💡 金句
The good news is we have a solution! The bad news is it's gonna take a while.
👍 0
👎 0
← 返回 Lobsters 首页