在线协作软件的三个核心引擎 总览

纵观市面上的所有协作软件,无论是Google Docs 还是 Notion,还是 Mira 或者Evernote,优秀的协作软件必然由三个核心引擎构建:渲染引擎,协同引擎以及数据引擎

在线协作软件的三个核心引擎_数据引擎

如何理解三个核心引擎,我们从用户视角来看:

渲染引擎:
  • 对于在线文档,渲染引擎就是文字编辑器。

  • 对于在线表格,渲染引擎就是电子表格编辑器。

  • 对于在线幻灯片,渲染引擎画布编辑器。

  • 对于在线脑图,渲染引擎就是mind编辑器。

  • 对于在线BI,渲染引擎就是布局设计器以及图表设计器。

  • ....

协同引擎

协同引擎理解起来稍微复杂一点,协同引擎存在的目的,本质就是保持各个终端在展示同一个内容模型时,能够在单个操作消费到模型之后,模型保持一致,所以协同引擎需要处理操作涉及的各个阶段的情况:

阶段1 - 客户端发送操作,

  1. 操作等待同步给Server(其他协作者) pendingCommmands

  2. 操作同步给Server(其他协作者) sendingCommands

  3. 操作已同步给Server(其他协作者) sentCommmands

阶段2 - 客户端模型消费操作

  1. 操作作用于Model之后,客户端的Model应当与服务端的Model保持一致

如何保持一致,各个厂商之间各显本领,有JavaScript组合Nodejs,有Rust组合WebAssembly,有Java GWT组合JavaScript。

阶段1和阶段2在协同引擎是非常重要的,如何保持协作的即时性以及数据的一致性和健壮性,非常考验这部分的设计

数据引擎

不同的协作软件的数据引擎是不同,例如:

  • Word - openxml的设计

  • Etherpad - 采用字符串 Z:1>6b|5+6b$Welcome to Etherpad!

  • Google Docs Word - 采用一个commands集合的设计

  • Google Docs Spread - 设计比较想Excel,但是使用的protobuf

  • Notion - 很明显是结构化的属性数据,并且使用CRDT的冲突解决数据结构

好的数据引擎通常有这些特点:

  • 数据传输的稳定性

  • 数据的可维护性

  • 数据的存储性能

  • 数据引擎不等于视图模型

  • 天然支持数据冲突解决方案,扩展性看CRDT,性能看OT

  • 对于其他软件导入导出的扩展度(例如在线文档导出Word)

如果你是一个在线软件创作者或者商业产品创业者,你需要去自研这渲染引擎,协同引擎,数据引擎吗?我的答案是不需要,你完全在Starup阶段,找到对应领域的合适技术选型,选择做出你协作软件的MVP,当自研能够成为你的壁垒或者优势,再选择自研。