天天看點

釘釘文檔協同編輯背後的核心技術原理

有人說,網際網路給人類社會帶來最深層次的變革是改變了人與人協作的方式,将資訊傳播的成本大幅降低。身在網際網路行業之中,研究資訊傳播的方式方法,是我們的日常功課。

資訊傳播的方式,按照時序效果,可分為同步和異步兩類。

資訊的同步傳播

資訊被生産的同時被消費。

釘釘文檔協同編輯背後的核心技術原理

話出我之口,入你之耳,過了此時此刻,想還原此情此景,麻煩得很,大多時候也不需要。同步場景下,資訊的生産往往不需要深思熟慮,而是通過你來我往的讨論,澄清,逐漸勾勒出話題的全貌。表達的時效性較之方式的豐富性更為重要。典型的場景如即時通訊,語音通話,視訊會議等。簡單明了,沒有太多的格式。

資訊的異步傳播

資訊的生産和消費異步發生。

典型的場景如論壇,部落格,文檔庫,郵件。我在寫這篇文檔的時候,你們看不到。你們看的時候,我早已寫完。異步場景下,資訊的生産者會謹慎的推敲措辭,以確定自己的意思被準确的傳達。表達方式的豐富性很重要,除了文本以外,段落結構,清單,示意圖,表格都有利于資訊的準确表達。

釘釘文檔協同編輯背後的核心技術原理

文檔的資訊表達方式

傳統文檔的資訊表達方式是典型的異步傳播。上述的幾類異步場景都可見文檔的影子。

然而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 ,與大家分享更多技術原理與實踐。

釘釘文檔協同編輯背後的核心技術原理

繼續閱讀