釘釘文檔協同編輯背后的核心技術原理
有人說,互聯網給人類社會帶來最深層次的變革是改變了人與人協作的方式,將信息傳播的成本大幅降低。身在互聯網行業之中,研究信息傳播的方式方法,是我們的日常功課。
信息傳播的方式,按照時序效果,可分為同步和異步兩類。
信息的同步傳播
信息被生產的同時被消費。
話出我之口,入你之耳,過了此時此刻,想還原此情此景,麻煩得很,大多時候也不需要。同步場景下,信息的生產往往不需要深思熟慮,而是通過你來我往的討論,澄清,逐步勾勒出話題的全貌。表達的時效性較之方式的豐富性更為重要。典型的場景如即時通訊,語音通話,視頻會議等。簡單明了,沒有太多的格式。
信息的異步傳播
信息的生產和消費異步發生。
典型的場景如論壇,博客,文檔庫,郵件。我在寫這篇文檔的時候,你們看不到。你們看的時候,我早已寫完。異步場景下,信息的生產者會謹慎的推敲措辭,以確保自己的意思被準確的傳達。表達方式的豐富性很重要,除了文本以外,段落結構,列表,示意圖,表格都有利于信息的準確表達。
文檔的信息表達方式
傳統文檔的信息表達方式是典型的異步傳播。上述的幾類異步場景都可見文檔的影子。
然而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 ,與大家分享更多技術原理與實踐。