多人協作在線文檔的概念,最早由GoogleDocs帶入中國。但實際上,在日常工作中,與團隊的其他人進行協作是一種在常見不過的工作方式。
由於工作分工、工作進展的不同,團隊內部的信息往往需要及時同步,然而伴隨著團隊經營規模的不斷擴大,在線協同、多人協作,以及軟體項目管理等問題將會接踵而至,成為制約企業高效發展的瓶頸。
這些問題,通常表現為:
1.跨部門、地區協作不便
2.過度依賴文件夾共享的形式,不能確保文檔的安全性
3.沒法紀錄和體現職工對文本文檔的意見和評價
4.文檔記錄發生變更時,無法及時通知到相關部門和員工
5.文檔無法在線協同編輯,缺失必要的流程管控
6.多人共同編輯一個文檔,無法留存修改記錄和歷史版本
針對上述問題,目前最佳的解決方案是:使用一款可多人在線協同辦公的軟體或工具。市面上,這類軟體有很多,比如國外的Google Docs、Office365,以及國內的騰訊文檔、石墨文檔、有道雲協作等。
本文將不再過多贅述這類成品軟體,而是深入協同辦公系統的實現原理,從企業IT管理者的角度出發,深入研究多人協作的形式、基礎和難點,分析一款開發工具應具備怎樣的特點,才是實現多人協作「在線excel」系統的關鍵。
以下內容,節選自葡萄城公開課《如何實現可多人協作的「在線excel」系統?》,歡迎大家提前預約,屆時觀看:https://live.vhall.com/483759540
多人協作的形式:歷史與發展
多人協作的歷史十分悠久,起源於靜態的多人協作模式,即每個人先完成自己的工作,然後再進行匯總。
靜態的多人協作模式
•遞增式協作
•郵件:你來我往
•論壇:跟帖回復
•獨佔式協作
•文檔傳遞
•微軟VSS
•合併式協作
•SVN
•Git
•diff,patch,merge指令
常見的靜態多人協作方式
從靜態到動態
•靜態協作的比喻
•拼接畫
•積木
•靜態協作的特點
•多版本
•塊操作
•有協作動作
•靜態協作的缺點
•版本碎片化
•缺乏時效性
•協作動作成本高
靜態多人協作的成本,會隨著加入人數和項目的複雜度呈幾何級數的增長。因此,對於企業來說,急需一種無協作動作、唯一版本、版本可控的無協作成本模式,即動態多人協作模式。
動態的多人協作
•動態協作的比喻
•一起畫黑板
•動態協作的特點
•唯一版本
•原子操作
•無協作動作
•動態協作的優點
•版本可控
•實時
•無協作成本
•典型產品
•Office Online
•石墨
•OnlyOffice
多人協作的基礎:原理與架構
任何信息,無論其是什麼展現形式,如果要做到多人實時編輯與展現,只需要實現以下三步而已:
1.操作化
2.可傳輸
3.可還原
舉例說明多人協作的實現方式
操作化
操作化,指任何信息都可以轉換為一組操作的集合。很容易理解,但它仍有不少值得思考的點:
1.分割與組合
·如何保證:信息的所有變化都可以分解為操作的集合?反之,操作如何覆蓋出信息的所有變化?
·分割的顆粒度如何決定?
•粗一點?
•細一點?
•如何兼顧解釋性與擴展性?
2.絕對操作與相對操作
·絕對操作
•針孔印表機的完美世界
•印表機時代的編輯噩夢
·相對操作
•4K電視不是夢
•為什麼數位電視穩定性不如模擬電視
·絕對操作與相對操作比喻:時間與空間的互換
3.使用一款開發工具:SpreadJS,實現操作化的優勢:
·好用的指令集,保證覆蓋信息的全部變化與操作的集合
·經過實踐驗證的顆粒度,完美兼顧解釋性與擴展性平衡
可傳輸
可傳輸,就是指操作有辦法通過網絡傳輸給其他終端。實現動態多人協作,需要考慮以下幾點:
1.傳輸內容
·原始文本
•清晰
•冗餘
·壓縮技術
•邏輯壓縮
•協議壓縮
•手動壓縮
2.網絡協議
·Socket
•TCP
•UDP
·HTTP
·WebSocket
3.QoS(Quality of Service,服務質量)
·快速失敗
·自動回滾
·自動重連
·自動恢復
可還原
可還原,就是指接收到來自網絡的操作消息後,可以在本地完全一致地再次執行該操作。可還原包括了:
1.絕對操作的還原
·控制體積
·合理的提示
2.相對操作的還原
·嚴格的順序性
·從源頭保障順序性
·順序性的補救
3.本地操作的還原
·過濾收到的操作集合
·從源頭細化操作顆粒
·本地保存本地執行
4.無入侵的還原
·定義入侵
·排除入侵
·千人千面
多人協作的難點:亂序與衝突
亂序
亂序的表現形式如下圖,小明在客戶端執行了一系列操作,傳遞到伺服器時發生亂序,導致小花看到了截然不同的信息:
為了解決亂序問題,可以嘗試以下方法:
1.用性能換取順序正確——基於協議
2.用性能換取順序正確——基於回執
兩種方法的優缺點
1.基於協議
•優點
·可靠,歷經考驗
·簡單,無需開發
•缺點
·資源開銷高
·必須整套使用
2.基於回執
•優點
·自主可控,按需開發
·資源開銷可控
•缺點
·需要自己投入開發
·應用層邏輯控制使得網絡複雜度向外蔓延
·複雜度帶來維護成本
基於亂序處理方法的總結
網絡不是絕對可靠的,為了實現相對可靠,需要付出一定的代價,企業需要考慮的是:如何衡量所付出的代價與產出成正比。
衝突
比亂序更高級的一種表現形式,存在多向、多維度等問題。
如何避免錯誤的蔓延?
原則:任何一次不一致,都會導致後續的操作基於錯誤的信息進行,從而不斷擴大錯誤,造成無法收拾的結果。因此,不一致是不能被容忍的。
解決辦法:
1.嚴格一致性:獨佔
2.最終一致性:檢查與修復
3.非技術手段:設計與提示
嚴格的一致性
獨佔就是同一時間同一範圍只能由一人操作。
1.範圍(以SpreadJS為例)
1.整個表格,類似VSS
2.工作表
3.單元格範圍
2.排他性
1.獨佔衝突時,必有一方被彈開
2.直到佔有者解開,不然無法佔用
3.佔用前無法操作
4.原理和鎖基本一致
3.優點
1.可以確保嚴格一致性,不會產生多版本的錯誤累積
2.比起修復恢復這類彌補手段,一開始就不出錯的成本最低
3.邏輯清楚簡單,開發維護成本低
4.缺點
1.靜態協作的味道
2.獨佔動作嚴重影響體驗
3.大幅降低協作效率
5.SpreadJS提供的支持
1.鎖定工作表
2.鎖定單元格
最終一致性
基於唯一正確順序,察覺客戶端的錯誤,撤銷錯誤操作後重新執行正確的操作。
1.唯一正確
1.伺服器到達順序
2.協作邊界分流
3.P2P+選舉算法
2.察覺錯誤
1.伺服器回執id
2.伺服器回執操作,MS
3.撤銷錯誤
1.撤銷到錯誤發生前的一步操作的結果
2.利用SpreadJS的撤銷功能
3.利用操作版本快照
4.重新執行
1.操作隊列需保存
2.區分好無感知執行與顯式執行
非技術手段
技術手段追求錯誤0發生,而非技術手段則可以降低錯誤發生的可能性。
1.選中框
1.非常重要但不顯眼
2.人性化的獨佔
3.操作的預期
4.協作感
5.SpreadJS提供高度可自定義的邊框
2.協作設計
1.設計協作區域與合併手段
2.設置權限
3.SpreadJS提供幾乎Excel的所有公式
4.SpreadJS提供了工作表和單元格鎖定功能
3.單向協作
1.區分單向與雙向協作的場景
2.對單向協作儘量放開
3.對雙向協作嚴謹設計
針對多人協作難點的總結
首先,可以明確一點:SpreadJS完全可以用作多人協作系統開發的組件。原因在於:
•SpreadJS的產品質量是毋庸置疑的
•SpreadJS在設計之初,便考慮到了多人協作的可能,而除此之外,絕大多數的前端產品都不是為了多人協作而設計的
•多人協作需要中心系統的支持,SpreadJS基於純前端的體系架構可以很容易的嵌入系統開發,而無需過多考慮與原生系統的兼容性,這是常規組件是無法做到的
•要實現多人協作,需要投入一定的開發成本,SpreadJS作為一款開發工具,可以有效幫助開發人員減輕代碼量
多人協作表格的本質:
•Server – Clients中心系統,類似數值敏感的小型網遊
•任何這類系統都是在體驗和正確性中尋求平衡
多人協作表格的特點:
•表格的數值敏感性高於網遊,數據操作和存儲的挑戰更大
•表格的計算複雜度更高,尤其涉及複雜公式嵌套與全量統計篩選
•Web存在天花板,所以複雜的頁遊並不多見,端遊較多
對SpreadJS這類開發工具/組件的展望與期待
1.SpreadJS已經可以很好地支持多人協作的最終一致性。如果能支持多人多撤銷隊列,或者撤銷重做自定義,那麼就可以給用戶提供更加易用且多樣化的體驗效果,從此絲般順滑不是夢。
2.SpreadJS的絕大部分功能是支持命令的,這使得操作化變得更簡單。如果SpreadJS能開放命令自定義,便可以讓自主控制顆粒度成為可能,用戶可以針對具體的業務邏輯做出更加精細化的操作轉換,大幅提高協作效率。
3.SpreadJS不僅在數據錄入、數據填報等方面表現出強大的功能,其各類統計分析與圖形化手段也是一個不少,一旦明年的透視表功能上線,使用SpreadJS開發在線協同系統的數據商業價值將更易體現,用戶將體驗到「表格」無限的魅力與威力。
4.表格在多人協作中的數據量增長速度比單人使用時快得多,希望SpreadJS可以支持更大的數據量,尤其是在大數據量情況下仍舊保持操作的性能與體驗。
以上就是本期公開課《如何實現可多人協作的「在線excel」系統?》的部分摘要,如果您對在線協作系統的開發感興趣,歡迎點擊預約,屆時收看:https://live.vhall.com/483759540
轉載請註明出處。