Hotdry.
systems-engineering

用 Rust 重建 Notion:Outcrop 高性能实时数据库与 UI 渲染

基于 Outcrop 项目,剖析 Rust 在 Notion clone 中的实时协作、块级渲染和性能参数,实现微秒级编辑更新与离线优先策略。

在知识管理工具领域,Notion 以其灵活的块编辑和实时协作风靡一时,但性能瓶颈如编辑延迟和搜索慢已成为痛点。用 Rust 重写 Notion 核心,能带来零拷贝数据处理、纳秒级授权和微秒级文档更新,Outcrop 项目正是典范。该项目作者 Imed Adel 离职 Stripe 后,用 Rust 构建更快知识库,支持团队实时协作,基准测试显示编辑操作仅需微秒。

核心观点在于 Rust 的系统级性能与安全特性,完美契合实时数据库同步和 UI 渲染需求。传统 Notion 依赖 JS 编辑器如 ProseMirror,易受 GC 和网络抖动影响;Rust 通过自定义步骤应用和内存安全宏,实现了端到端低延迟。证据显示,Outcrop 移植 ProseMirror 到 Rust 后,简单替换操作基准仅 微秒级,远超 JS 实现。“I built an actually faster Notion in Rust”,作者在博客中强调此移植让文档编辑从毫秒降至微秒,支持实时多用户无感知冲突。

实时数据库同步是高性能 Notion 的关键,Outcrop 采用自定义 Zanzibar-inspired 授权系统和实时 WebSocket。授权检查纳秒级:CSV 定义关系(如 space/owner 可 read|update),宏调用如 must!(user_id, Page (page_id), Update) 瞬间验证。结合 Tantivy 搜索引擎,搜索仅考虑用户可见资源,同步延迟 <10ms。落地参数包括:1)批量更新阈值 16ms 内推送,避免队列积压;2)CRDT-like 步骤序列化 <1KB / 操作;3)连接心跳 30s,掉线重连 <500ms。监控要点:tracing 库记录 span 耗时,Grafana 面板追踪 p95 编辑延迟。

块级渲染聚焦无限画布和离线优先,Rust 后端处理结构化块(文本、代码、未来画布),前端 Solid.js 渲染。零拷贝借用确保 UI 无 GC 暂停,虚拟化渲染阈值设 1000 块 / 视口,超出 lazy-load。Outcrop 未来扩展 diagrams/canvases,利用 Rust 高效解析 ProseMirror 树提取链接 /mentions,支持 LLM 建议后微秒验证。离线策略:本地 Postgres 快照 + delta 同步,冲突用时间戳 + 向量时钟解决,回滚窗口 5min。

工程化清单:

  • 数据库:Postgres 持久 + 内存 Zanzibar,索引块 ID + version hash。
  • 同步:Tokio async,batch ops 每 50ms flush,Yjs-inspired awareness。
  • UI Perf:egui/Druid 备选 Rust UI,帧率 >60fps,内存 <200MB/10k 文档。
  • 监控:Prometheus 指标(update_latency, auth_time),警报 >50ms。
  • 回滚:版本树 + Git-like merge,测试覆盖 OT/CRDT 冲突 99%。

风险控制:宏滥用增编译时,预设基准回归测试;离线冲突用手动 merge UI。AppFlowy 类似用 Rust + Yjs 验证路径,其协作引擎 async apply_update <10ms。

此架构适用于 100+ 用户团队,扩展至无限画布只需虚拟网格 + quadtree 索引。Rust Notion clone 证明:性能源于底层优化,而非堆栈。

资料来源

查看归档