有人说,互联网给人类社会带来最深层次的变革是改变了人与人协作的方式,将信息传播的成本大幅降低。身在互联网行业之中,研究信息传播的方式方法,是我们的日常功课。
信息传播的方式,按照时序效果,可分为同步和异步两类。
信息的同步传播
信息被生产的同时被消费。
话出我之口,入你之耳,过了此时此刻,想还原此情此景,麻烦得很,大多时候也不需要。同步场景下,信息的生产往往不需要深思熟虑,而是通过你来我往的讨论,澄清,逐步勾勒出话题的全貌。表达的时效性较之方式的丰富性更为重要。典型的场景如即时通讯,语音通话,视频会议等。简单明了,没有太多的格式。
信息的异步传播
信息的生产和消费异步发生。
典型的场景如论坛,博客,文档库,邮件。我在写这篇文档的时候,你们看不到。你们看的时候,我早已写完。异步场景下,信息的生产者会谨慎的推敲措辞,以确保自己的意思被准确的传达。表达方式的丰富性很重要,除了文本以外,段落结构,列表,示意图,表格都有利于信息的准确表达。
文档的信息表达方式
传统文档的信息表达方式是典型的异步传播。上述的几类异步场景都可见文档的影子。
然而2016年3月,Google上线的Google Docs颠覆了这个结论,这个改变世界的功能就是“多人实时编辑”,或者称作“协同编辑”。引入了协同编辑的在线文档,就像一块儿在线的白板,使得身处世界两端的人可以在上面共同迭代一个内容,通过你来我往的信息反馈,实现信息的同步传播。而编辑的结果又将沉淀下来,成为信息异步传播的载体。
兼具信息同步与异步传播的能力,协同文档的诞生,无疑给基于互联网的沟通协作带来了一场革命。
这场革命爆发于2006年,而它的起源,早在17年前。
1989年,代表着“文档”的Microsoft Office第一次在Macintosh系统上与世人见面,而代表着“协同”的操作变换算法也第一次见诸论文。
Microsoft Office 中所周知,而操作变换算法又是什么呢?
数据一致性问题与操作变换算法
对协同编辑最简单的理解类似于群聊天,每个人在自己的电脑上修改文档,把操作群发给其他打开这篇文档的用户。当收到来自其他用户的操作时,重放这个操作。比如下面这个例子:
但美好的设想,难免遭遇现实的挑战。因为网络存在延迟,来自不同用户的操作有可能在各端有不同的执行顺序。相同的操作,不同的执行顺序,会产生不同的结果。比如:
数据一致性是协同编辑的最低要求。当然,我们可以强制操作按照到达服务器的时间来排序,但这种排序会破坏用户编辑当时的上下文,产生不符合用户预期的编辑效果。
操作变换算法就在这里被引入了。
操作变换算法不是一个算法,而是对一类算法的统称。它们针对不同的文档数据模型,解决一个相同的问题:
基于同一个状态的两个操作,如何调整一个操作的参数,使得它可以在另一个操作之后执行,表达同样的用户意图。
上面的例子加上了操作变换,就可以解决数据一致性的问题,如下图所示:
当然,协同文档和操作变换算法的水还是很深的。本文只是对基本原理做个简单的介绍。想要了解更多,可以参考以下文献:
Operational Transformation Frequently Asked Questions and Answers
南洋理工大学教授Chengzheng Sun的Survey,覆盖了OT领域绝大多数研究成果
Google Wave Operational Transformation
G-Suite协同引擎的协议白皮书
Achieving convergence,causality-preservation, and intention-preservation in real-time cooperative editing systems
GOT算法及一维数据操作变换算法论文
Context-based Operational Transformation in Distributed Collaborative Editing Systems
COT算法论文
结语
2006年3月,Google Docs上线,多人实时协同编辑的功能惊艳世界,让稳坐办公套件头把交椅的 Microsoft Office 也感到虎躯一震。Office奋起直追,但同等功能的 Office 365 上线已是五年之后。协同编辑究竟是怎样的一座坚城,让兵强马壮的微软止步了五年之久?做一款协同编辑器需要哪些核心技术?协同编辑技术对于普通的前端应用开发会有怎样的启发? 在 D2 ,与大家分享更多技术原理与实践。