万字拆解 JitWord:企业级实时协同文档底层架构 + 大模型 AI 融合完整实践

最近终于抽出时间,和大家深度地分享一下我们研发协同文档 JitWord 的最新技术方案。

github: github.com/jitOffice/j...

文章有点长,但是干货很多,晦涩难懂的部分我尽量用图文代替,建议大家先赞再看。

作为一名在前端和架构领域深耕十年、做过万星 Star 的开源项目(H5-Dooring)的创业者,我始终认为:协同编辑不是简单的 "多人同时打字",而是分布式系统理论在文档场景的极致工程化落地

从早期 Google Docs 引领的 OT 时代,到如今 Notion、Figma 普遍采用的 CRDT 方案,协同文档的技术路线已经历了两轮迭代。

而当 AI 能力深度注入编辑器之后,"人机协同" 又对传统协同架构提出了全新挑战。

下面就以我们团队自研的 JitWord 企业级智能协同文档为例,从产品和架构师的视角,和大家完整拆解:

一套工业级协同文档系统到底是如何设计的?

CRDT 算法在真实业务中如何落地?

AI 大模型又该如何与实时协作能力无缝融合?

协同文档的两条技术路线:OT 与 CRDT 深度对比

在聊具体实现之前,我先把底层技术逻辑和大家讲透。

目前业界实现实时协同编辑主要有两大技术路线:

1. 操作转换(Operational Transformation, 也就是我们常说的OT算法)

2. 无冲突复制数据类型(Conflict-free Replicated Data Type, CRDT算法)

我画了一张图,帮助大家更好地理解:

下面和大家详细介绍一下这两种协同算法。

OT 算法:传统协同的经典方案

OT 算法在上世纪 80 年代在 Google Docs 中就已经大规模使用了。它的核心思想是:当多个用户同时对文档产生操作时,中央服务器对操作进行转换,确保最终一致性

基本原理我借助AI画了一张图,方便大家理解

具体流程用大白话解释如下:

  • 用户 A 和用户 B 几乎同时对同一文档发出操作 opA 和 opB
  • 服务器接收到 opA 后先应用,再将 opB 进行 "转换",使其在 opA 已应用的文档状态上依然正确
  • 转换后的操作广播给所有客户端,保证最终状态一致

OT 算法的优势在于

  • 数据传输量小,只传输操作指令而非完整内容
  • 时间沉淀长,工程化案例丰富
  • 对文本类场景适配成熟

但是也有缺点,下面分享一下 OT 的致命缺陷

  • 强依赖中央服务器做冲突裁决,服务器压力大
  • 算法复杂度随操作类型指数级上升,每新增一种操作就要写对应的转换函数
  • 离线编辑支持差,断网后重连需要复杂的状态对齐
  • 扩展复杂组件(表格、图表、富媒体)成本极高

这也是为什么很多基于 OT 的协同产品,只能做纯文本协作,一旦引入复杂节点就容易出 bug。

对于当下多模态内容展现的时代,我们需要在文档里展现更复杂的元素和操作,所以需要采用更适配的方案来实现协同。

CRDT 算法:现代协同的主流选择

CRDT 是为分布式系统设计的数据结构,核心特性是不需要中央协调,多个副本可以独立更新,最终自动收敛到一致状态

它的核心思想如下

  • 每个操作都附带唯一标识和时间戳
  • 操作满足 "交换律"------ 无论以什么顺序应用,最终结果都相同
  • 冲突通过预设规则自动解决,无需服务器做转换计算

CRDT 的优势在于

  • 天然支持离线编辑,断网后本地操作,重连自动合并
  • 算法扩展性强,新增节点类型无需重写冲突逻辑
  • 服务器压力小,只做转发和持久化,不做复杂计算
  • 适合复杂富文本、块级文档、甚至设计工具场景

当然,它同样也会存在一些缺点,比如

  • 元数据开销相对更大,需要存储额外的 ID 和版本信息
  • 算法理解门槛高,工程落地对团队技术能力要求高
  • 垃圾回收(GC)策略设计复杂,长期运行的文档元数据会膨胀

那么,我们为什么会选择 CRDT 算法呢?

在 JitWord 立项之初,我们对两种方案做了完整的技术预研,最终选择 CRDT 路线,核心判断有下面三点, 大家也可以做个参考:

1. 产品形态决定

JitWord 是块级多模态编辑器,支持图表、代码块、多媒体等复杂组件,OT 的扩展成本不可接受。

2. 企业场景刚需

企业用户对内网环境、离线编辑、弱网协作有强需求,CRDT 天然适配。

3. AI 融合需求

AI 生成内容是流式写入,本质上也是一个 "协作者",CRDT 的无冲突特性能更好地支持人机混编。

JitWord 协同架构全景设计

JitWord 采用经典的四层架构设计,自上而下分为前端层、网络层、后端层、存储层,如下图所示:

每一层都围绕 "低延迟协作" 和 "高可用扩展" 两个核心目标做了针对性优化。

核心架构如下:

做这样的架构设计,有很大的优点,比如

  • 职责分离清晰网络层区分普通 HTTP 请求、协作 WebSocket、AI 流式 SSE 三条链路,互不阻塞
  • 计算前置CRDT 计算全部在客户端完成,后端只做转发和持久化,降低服务端瓶颈
  • 缓存分层内存 LRU 缓存热点解析结果,文件系统存储全量数据,兼顾性能与成本
  • 扩展友好组件系统与编辑器内核解耦,新增能力不影响核心协作逻辑

这些优点对于企业二次开发和维护来说非常方便,相当于为企业设计了一套可维护的架构工程体系。

核心模块深度剖析

1. 协作同步模块

这是整个协同系统的心脏,负责管理所有实时连接和操作广播。下面我画了一个流程图,解释了 jitWord 协同同步的流程:

核心代码我也简单列一下,供大家参考:

版本管理模块实现

协作不是最终目的,一个可追溯、可回滚的协同文档系统, 才是企业的刚需。

所以我们设计了一套可靠的版本管理机制,通过双轨保存,快照存储,多维对比,来实现文档的可溯源模型,如下图所示:

文件处理模块

企业文档常常会涉及多格式导入导出,这是很多协同产品的薄弱环节。比如下面几个场景:

  • 多格式解析支持 DOCX、TXT、Markdown 等主流格式的智能解析
  • 图片提取DOCX 导入自动提取内嵌图片并转存到资源目录
  • 格式转换外部格式统一转换为编辑器内部结构化 JSON 结构
  • LRU 缓存相同文件重复解析直接命中缓存,大幅提升二次打开速度

当然文档解析是我们 JitWord 另一个核心模块,我之前文章中有详细的介绍,这里就不一一和大家分享了,大家可以参考我往期的文章。

核心协同技术的工程化落地

CRDT 冲突解决策略

很多文章讲 CRDT 只讲理论,不讲工程细节。实际上,CRDT 不是 "银弹",不同冲突场景需要设计不同的解决策略。

JitWord 针对下面四类典型冲突做了精细化处理, 如果大家也在做协同类产品,不妨参考一下:

这里不得不说一点我个人的看法:CRDT 的 "最终一致性" 不等于 "用户满意"。算法正确是底线,让用户觉得 "合理" 才是产品级实现方案。

比如,同位置插入,纯算法可能按 ID 排序,但用户感知上应该是 "谁先打字谁在前",这就需要时间戳校准。

协同编辑完整的数据流架构

上面是我们设计的协同架构数据流方案,整个协作链路的延迟控制在30-100ms(常规文档测试下,超大文档比如500-1000页延迟可能会变高) ,用户基本感知不到对方输入的延迟。能做到这个水平,我们核心靠三个优化:

  1. 本地优先操作先本地渲染再发网络,用户输入零等待
  2. 操作合并短时间内连续输入合并为一个操作包发送,减少网络 IO
  3. 二进制传输操作数据采用二进制编码,包体积比 JSON 减少 60% 以上

版本对比算法

版本管理的核心是 "差异可视化",JitWord 采用 Myers 差分算法做多维度对比,具体对比的维度包括:

这也是企业场景的痛点 ------ 很多协同产品只能对比纯文本,一旦涉及表格修改、图表数据更新,版本对比就完全失效。

协同 + AI:JitWord 的差异化创新

如果说 CRDT 解决了 "人与人协作" 的问题,那么 AI 能力的加入,就让 JitWord 进入了 "人机协同" 的新维度。这也是我们认为下一代文档编辑器的核心方向。

下面我会基于几个核心维度,来和大家分享一下。

AI 处理数据流设计

关键设计如下

  • AI 生成的每一段文字,都通过 CRDT 引擎作为一次 "协作操作" 插入文档
  • 其他协作者可以实时看到 AI 的写入过程,就像另一个人在打字
  • AI 操作带有特殊标识,版本历史中可以区分人工修改和 AI 生成
  • 支持 AI 边写、用户边改,两者不会冲突,自动合并

AI 集成架构

JitWord 的 AI 模块采用 Provider 适配器架构,不绑定任何一家大模型服务商, 代码参考如下:

这种设计的好处:

  • 灵活切换企业可以接入自己的私有模型,也可以用公有云模型
  • 成本可控不同场景调度不同模型,写作调用大模型,润色调用小模型
  • 故障降级某家服务商故障时自动切到备用线路,保证业务可用
  • 私有化部署支持本地部署大模型,数据完全不出内网

扩展能力与工程实践

组件扩展系统

协同文档的生命力在于扩展。JitWord 设计了完整的组件扩展机制,开发者可以像写普通 Vue 组件一样开发编辑器插件。

代码我列举一个扩展组件的代码案例

性能优化策略

前端方面我列举几个我们核心的优化方案,大家可以参考一下:

  • 组件懒加载图表、思维导图等重型组件首次使用时才加载
  • 虚拟渲染长文档只渲染可视区域,DOM 节点数量减少 90%
  • 防抖节流用户输入防抖,避免频繁触发重渲染
  • 增量更新CRDT 操作只更新受影响的节点,不整树重绘

后端核心优化如下:

  • 连接池管理WebSocket 连接复用,减少握手开销
  • LRU 内存缓存热点文档解析结果缓存,重复打开毫秒级响应
  • 异步持久化协作操作先广播再落盘,不阻塞实时链路
  • 多实例部署支持横向扩容,通过 Redis 同步房间状态

企业级安全设计

安全是企业选型的一票否决项。JitWord 从三个层面构建安全体系,下面给大家详细介绍一下:

认证安全

  • JWT 无状态认证,支持分布式部署
  • Token 自动刷新机制,兼顾安全与体验
  • 基于角色的细粒度权限控制

数据安全

  • HTTPS/WSS 全链路加密传输
  • 敏感数据加密存储
  • 完整操作审计日志,所有修改可追溯

接口安全

  • 严格的输入参数校验
  • XSS 过滤与 CSRF 防护
  • 文件上传类型与大小双重限制

下面我列举了几个应用场景,供大家参考:

部署架构设计

目前我们采用的是单体部署方案,具体的部署架构如下:

这也是 JitWord 单机私有化部署的标准架构,单台服务器即可承载完整的协同文档服务。

当企业用户规模超过百人、对系统可用性、并发能力有严格要求时,可平滑升级为集群部署架构,实现横向扩容、故障自愈与容灾备份,下面分享一下集群部署架构设计:

最后:创业者的技术思考

做协同文档这两年,我最深的体会是:难的从来不是算法本身,而是算法与产品、工程、场景的结合

CRDT 论文谁都能读,但要做到复杂组件不冲突、大文档不卡顿、弱网不掉线,需要无数工程细节的打磨,我们光设计协同架构,就花了接近3个月时间。

同时要做到 AI 写入不打断协作、流式输出不破坏一致性、生成内容可追溯,需要对协同架构有深刻的理解。

JitWord 从第一天起就定位为 "企业级协同 AI 文档",我们不追求功能数量的堆砌,而是聚焦三个核心价值:

  • 协同的极致体验低延迟、无冲突、全组件支持
  • AI 的深度融合不是外挂式 AI,而是原生嵌入协作流
  • 企业的可控性支持私有化、支持定制扩展、数据安全可靠

未来,协同文档的形态还会继续演进。从 "人与人协作" 到 "人机协同",再到 "多 Agent 自动协作",编辑器的角色会从 "书写工具" 变成 "智能工作空间"。我们也会沿着这个方向持续迭代,让每一家企业都能拥有自己的智能协同文档平台。

github开源版: github.com/jitOffice/j...

相关推荐
一份执念1 小时前
uni-app 小程序分包限制处理与主包体积优化实战
前端·微信小程序
MariaH2 小时前
初识MySQL
前端
陳陈陳2 小时前
从Token到Embedding:一篇文章搞懂大模型的「文字数学变形记」
前端·javascript·ai编程
十有八七2 小时前
AI时代的置身X内
前端·人工智能
橘子星2 小时前
LLM 无状态架构实践:从原理到代码落地
前端·javascript·人工智能
LiuMingXin2 小时前
意图与代码之间:AI编程范式全景解读
前端·后端·面试
用户83134859306982 小时前
Cesium实现雾气效果:按钮一键控制打开/关闭雾气效果,滑块拖动实时控制雾气浓度
vue.js·cesium
壹方秘境3 小时前
ApiCatcher支持抓包HTTP传输大文件的实现原理分享
前端·后端·客户端
码流怪侠3 小时前
【GitHub】Ponytail:给 AI 编码代理植入“懒人资深开发者“灵魂的开源插件深度拆解
程序员·github·ai编程