本文由葡萄城技術團隊原創並首發 轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 Excel是我們辦公中常用的工具 ,它幾乎能為我們處理大部分數據,友好的交互界面、豐富的公式函數和易於上手的圖表為我們在數據統計方面提供了不小的幫助,但經過一段時期運行,就會出 ...
本文由葡萄城技術團隊原創並首發
轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。
Excel是我們辦公中常用的工具 ,它幾乎能為我們處理大部分數據,友好的交互界面、豐富的公式函數和易於上手的圖表為我們在數據統計方面提供了不小的幫助,但經過一段時期運行,就會出現下麵的情況:
這樣多分枝的混亂狀況就會難以保證文檔的安全性及權威性。
於是聰明的小伙伴想到了一個解決方案,共用出一份Excel文檔,根據人員的職級不同,設置僅可只讀和編輯的許可權,同時根據為不同人制定不同規則,例如:張某每天十點編輯,王某每天十一點編輯的方式來解決衝突的問題。這種方式很聰明,從流程上解決了多副本的問題,但不能同時編輯的問題依然沒有被解決,如果一個部門的人足夠多,這樣分時的策略可能需要花一天時間才能完成一份Excel的編輯。
所以多人協作線上文檔的需求也變得越發變得強烈,因為在日常工作中,與團隊的其他人進行文檔協作是一種再常見不過的工作方式。由於工作分工、工作進展的不同,團隊內部的信息往往需要及時同步,然而伴隨著團隊經營規模的不斷擴大,線上協同、多人協作,以及軟體項目管理等問題將會接踵而至,成為制約企業高效發展的瓶頸。
而這些問題,通常表現為:
- 跨部門、地區溝通協作的不便
- 過度依賴文件、文件夾共用的形式,不能確保文檔的安全性
- 沒法紀錄和體現職工對文本文檔的意見和評價
- 文檔記錄發生變更時,無法及時通知到相關部門和員工
- 文檔無法線上協同編輯,缺失必要的流程管控
- 多人共同編輯一個文檔,無法留存修改記錄和歷史版本
針對上述問題,現在在市面上,已經有了很多這類多人協作的工具,例如:國外的Google Docs、Office365,及國內的騰訊文檔、石墨文檔、有道雲協作等。
因為這篇文章我們的目的是想向大家從企業IT管理者的角度出發深入研究協同辦公系統的形式、基礎和難點等實現原理,所以成品軟體我們在這不做過多贅述。那我們正式開始吧。
多人協作的形式:歷史與發展
多人協作的歷史十分悠久,起源於靜態的多人協作模式,即每個人先完成自己的工作,然後再進行彙總。
多人協作的初期:靜態協作
- 遞增式協作
- 郵件:你來我往
- 論壇:跟帖回覆
- 獨占式協作
- 文檔傳遞
- 微軟VSS
- 合併式協作
- SVN
- Git
- diff,patch,merge指令
常見的靜態多人協作方式
多人協作的發展期:從靜態到動態
- 靜態協作的比喻
- 拼接畫
- 積木
- 靜態協作的特點
- 多版本
- 塊操作
- 有協作動作
- 靜態協作的缺點
- 版本碎片化
- 缺乏時效性
- 協作動作成本高
靜態多人協作的成本,會隨著加入人數和項目的複雜度呈幾何級數的增長。因此,對於企業來說,急需一種無協作動作、唯一版本、版本可控的無協作成本模式,即動態多人協作模式。
多人協作的蓬勃期:動態
- 動態協作的比喻
- 一起畫黑板
- 動態協作的特點
- 唯一版本
- 原子操作
- 無協作動作
- 動態協作的優點
- 版本可控
- 實時
- 無協作成本
- 典型產品
- Office Online
- 石墨
- OnlyOffice
多人協作的基礎:原理與架構
任何信息,無論其是什麼展現形式,如果要做到多人實時編輯與展現,只需要實現以下三步而已:
- 操作化
- 可傳輸
- 可還原
舉例說明多人協作的實現方式
操作化
操作化,指任何信息都可以轉換為一組操作的集合。很容易理解,但它仍有不少值得思考的點:
- 分割與組合
- 如何保證:信息的所有變化都可以分解為操作的集合?反之,操作如何覆蓋出信息的所有變化?
- 分割的顆粒度如何決定?
- 粗一點?
- 細一點?
- 如何兼顧解釋性與擴展性?
- 絕對操作與相對操作
- 絕對操作
- 針孔印表機的完美世界
- 印表機時代的編輯噩夢
- 相對操作
- 4K電視不是夢
- 為什麼數字電視穩定性不如模擬電視
- 絕對操作
- 絕對操作與相對操作比喻:時間與空間的互換
可傳輸
可傳輸,就是指操作有辦法通過網路傳輸給其他終端。實現動態多人協作,需要考慮以下幾點:
- 傳輸內容
- 原始文本
- 清晰
- 冗餘
- 壓縮技術
- 邏輯壓縮
- 協議壓縮
- 手動壓縮
- 原始文本
- 網路協議
- Socket
- TCP
- UDP
- HTTP
- WebSocket
- Socket
- QoS(Quality of Service,服務質量)
-
快速失敗
-
自動回滾
-
自動重連
- 自動恢復
-
可還原
可還原,就是指接收到來自網路的操作消息後,可以在本地完全一致地再次執行該操作。可還原包括了:
- 絕對操作的還原
- 控制體積
- 合理的提示
- 相對操作的還原
- 嚴格的順序性
- 從源頭保障順序性
- 順序性的補救
- 本地操作的還原
- 過濾收到的操作集合
- 從源頭細化操作顆粒
- 本地保存本地執行
- 無入侵的還原
- 定義入侵
- 排除入侵
- 千人千面
多人協作的難點:亂序與衝突
亂序
亂序的表現形式如下圖,小明在客戶端執行了一系列操作,傳遞到伺服器時發生亂序,導致小花看到了截然不同的信息:
為瞭解決亂序問題,可以嘗試以下方法:
1. 用性能換取順序正確——基於協議
2. 用性能換取順序正確——基於回執
兩種方法的優缺點
- 基於協議
- 優點
- 可靠,歷經考驗
- 簡單,無需開發
- 缺點
- 資源開銷高
- 必須整套使用
- 優點
- 自主可控,按需開發
- 資源開銷可控
- 缺點
- 需要自己投入開發
- 應用層邏輯控制使得網路複雜度向外蔓延
- 複雜度帶來維護成本
- 基於回執
基於亂序處理方法的總結
網路不是絕對可靠的,為了實現相對可靠,需要付出一定的代價,企業需要考慮的是:如何衡量所付出的代價與產出成正比。
衝突
比亂序更高級的一種表現形式,存在多向、多維度等問題。
如何避免錯誤的蔓延?
原則:任何一次不一致,都會導致後續的操作基於錯誤的信息進行,從而不斷擴大錯誤,造成無法收拾的結果。因此,不一致是不能被容忍的。
解決辦法:
- 嚴格一致性:獨占
- 最終一致性:檢查與修複
- 非技術手段:設計與提示
嚴格的一致性
獨占就是同一時間同一範圍只能由一人操作。
- 範圍
- 整個表格,類似VSS
- 工作表
- 單元格範圍
- 排他性
- 獨占衝突時,必有一方被彈開
- 直到占有者解開,不然無法占用
- 占用前無法操作
- 原理和鎖基本一致
- 優點
- 可以確保嚴格一致性,不會產生多版本的錯誤累積
- 比起修複恢復這類彌補手段,一開始就不出錯的成本最低
- 邏輯清楚簡單,開發維護成本低
- 缺點
- 靜態協作的味道
- 獨占動作嚴重影響體驗
- 大幅降低協作效率
- 需對錶格實現的 功能
- 鎖定工作表
- 鎖定單元格
最終一致性
基於唯一正確順序,察覺客戶端的錯誤,撤銷錯誤操作後重新執行正確的操作。
- 唯一正確
- 伺服器到達順序
- 協作邊界分流
- P2P+選舉演算法
- 察覺錯誤
- 伺服器回執id
- 伺服器回執操作,MS
- 撤銷錯誤
- 撤銷到錯誤發生前的一步操作的結果
- 保存副本實現撤銷功能
- 利用操作版本快照
- 重新執行
- 操作隊列需保存
- 區分好無感知執行與顯式執行
針對多人協作難點的總結
如何實現Excel相關功能是需要開發人員需要花時間去研究的,另外為了滿足需求,適配多設備和平臺的相容性也非常重要。
另外,多人協作表格的本質還具有如下本質和特點:
- Server – Clients 中心系統,類似數值敏感的小型網游
- 任何這類系統都是在體驗和正確性中尋求平衡
- 表格的數值敏感性高於網游,數據操作和存儲的挑戰更大
- 表格的計算複雜度更高,尤其涉及複雜公式嵌套與全量統計篩選
- Web存在天花板,所以複雜的頁游並不多見,端游較多
最後,假如您想瞭解更多如何實現多人協作平臺相關的內容,歡迎參加2019年12月18日(周三) 14點由上海佳軟CTO帶來的一場線上直播:https://live.vhall.com/483759540,相信屆時我們都會受益良多的。