本文由葡萄城技術團隊原創并首發
轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者,
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,相信屆時我們都會受益良多的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/32408.html
標籤:架構設計
上一篇:Springboot vue.js html 跨域 前后分離 shiro權限 集成代碼生成器
下一篇:Nginx環境搭建與使用
