想實現多人協作的“線上Excel”?真沒那麼簡單

来源:https://www.cnblogs.com/powertoolsteam/archive/2019/12/11/onlineexcel.html
-Advertisement-
Play Games

本文由葡萄城技術團隊原創並首發 轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 Excel是我們辦公中常用的工具 ,它幾乎能為我們處理大部分數據,友好的交互界面、豐富的公式函數和易於上手的圖表為我們在數據統計方面提供了不小的幫助,但經過一段時期運行,就會出 ...


本文由葡萄城技術團隊原創並首發

轉載請註明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。

 

Excel是我們辦公中常用的工具 ,它幾乎能為我們處理大部分數據,友好的交互界面、豐富的公式函數和易於上手的圖表為我們在數據統計方面提供了不小的幫助,但經過一段時期運行,就會出現下麵的情況:

 

 

 

這樣多分枝的混亂狀況就會難以保證文檔的安全性及權威性。

於是聰明的小伙伴想到了一個解決方案,共用出一份Excel文檔,根據人員的職級不同,設置僅可只讀和編輯的許可權,同時根據為不同人制定不同規則,例如:張某每天十點編輯,王某每天十一點編輯的方式來解決衝突的問題。這種方式很聰明,從流程上解決了多副本的問題,但不能同時編輯的問題依然沒有被解決,如果一個部門的人足夠多,這樣分時的策略可能需要花一天時間才能完成一份Excel的編輯。

所以多人協作線上文檔的需求也變得越發變得強烈,因為在日常工作中,與團隊的其他人進行文檔協作是一種再常見不過的工作方式。由於工作分工、工作進展的不同,團隊內部的信息往往需要及時同步,然而伴隨著團隊經營規模的不斷擴大,線上協同、多人協作,以及軟體項目管理等問題將會接踵而至,成為制約企業高效發展的瓶頸。

而這些問題,通常表現為:

  1. 跨部門、地區溝通協作的不便
  2. 過度依賴文件、文件夾共用的形式,不能確保文檔的安全性
  3. 沒法紀錄和體現職工對文本文檔的意見和評價
  4. 文檔記錄發生變更時,無法及時通知到相關部門和員工
  5. 文檔無法線上協同編輯,缺失必要的流程管控
  6. 多人共同編輯一個文檔,無法留存修改記錄和歷史版本

 

針對上述問題,現在在市面上,已經有了很多這類多人協作的工具,例如:國外的Google Docs、Office365,及國內的騰訊文檔、石墨文檔、有道雲協作等。

因為這篇文章我們的目的是想向大家從企業IT管理者的角度出發深入研究協同辦公系統的形式、基礎和難點等實現原理,所以成品軟體我們在這不做過多贅述。那我們正式開始吧。

多人協作的形式:歷史與發展

多人協作的歷史十分悠久,起源於靜態的多人協作模式,即每個人先完成自己的工作,然後再進行彙總。

多人協作的初期:靜態協作

  • 遞增式協作
    • 郵件:你來我往
    • 論壇:跟帖回覆
  • 獨占式協作
    • 文檔傳遞
    • 微軟VSS
  • 合併式協作
    • SVN
    • Git
    • diff,patch,merge指令

 

常見的靜態多人協作方式

多人協作的發展期:從靜態到動態

  • 靜態協作的比喻
    • 拼接畫
    • 積木
  • 靜態協作的特點
    • 多版本
    • 塊操作
    • 有協作動作
  • 靜態協作的缺點
    • 版本碎片化
    • 缺乏時效性
    • 協作動作成本高

靜態多人協作的成本,會隨著加入人數和項目的複雜度呈幾何級數的增長。因此,對於企業來說,急需一種無協作動作、唯一版本、版本可控的無協作成本模式,即動態多人協作模式。

多人協作的蓬勃期:動態

  • 動態協作的比喻
    • 一起畫黑板
  • 動態協作的特點
    • 唯一版本
    • 原子操作
    • 無協作動作
  • 動態協作的優點
    • 版本可控
    • 實時
    • 無協作成本
  • 典型產品
    • Office Online
    • 石墨
    • OnlyOffice

多人協作的基礎:原理與架構

任何信息,無論其是什麼展現形式,如果要做到多人實時編輯與展現,只需要實現以下三步而已:

  1. 操作化
  2. 可傳輸
  3. 可還原

舉例說明多人協作的實現方式

操作化

操作化,指任何信息都可以轉換為一組操作的集合。很容易理解,但它仍有不少值得思考的點:

  • 分割與組合
    • 如何保證:信息的所有變化都可以分解為操作的集合?反之,操作如何覆蓋出信息的所有變化?
    • 分割的顆粒度如何決定?
      • 粗一點?
      • 細一點?
      • 如何兼顧解釋性與擴展性?
  • 絕對操作與相對操作
    • 絕對操作
      • 針孔印表機的完美世界
      • 印表機時代的編輯噩夢
    • 相對操作
      • 4K電視不是夢
      • 為什麼數字電視穩定性不如模擬電視
    • 絕對操作與相對操作比喻:時間與空間的互換

可傳輸

可傳輸,就是指操作有辦法通過網路傳輸給其他終端。實現動態多人協作,需要考慮以下幾點:

  • 傳輸內容
    • 原始文本
      • 清晰
      • 冗餘
    • 壓縮技術
      • 邏輯壓縮
      • 協議壓縮
      • 手動壓縮
  • 網路協議
    • Socket
      • TCP
      • UDP
    • HTTP
    • WebSocket
  • QoS(Quality of Service,服務質量)
    • 快速失敗

    • 自動回滾

    • 自動重連

    • 自動恢復

可還原

可還原,就是指接收到來自網路的操作消息後,可以在本地完全一致地再次執行該操作。可還原包括了:

  1. 絕對操作的還原
    • 控制體積
    • 合理的提示
  2. 相對操作的還原
    • 嚴格的順序性
    • 從源頭保障順序性
    • 順序性的補救
  3. 本地操作的還原
    • 過濾收到的操作集合
    • 從源頭細化操作顆粒
    • 本地保存本地執行
  4. 無入侵的還原
    • 定義入侵
    • 排除入侵
    • 千人千面

多人協作的難點:亂序與衝突

亂序

亂序的表現形式如下圖,小明在客戶端執行了一系列操作,傳遞到伺服器時發生亂序,導致小花看到了截然不同的信息:

 

 

 

為瞭解決亂序問題,可以嘗試以下方法:

1. 用性能換取順序正確——基於協議

 

 

 

2. 用性能換取順序正確——基於回執

 

 

 

兩種方法的優缺點
  1. 基於協議
  • 優點
    • 可靠,歷經考驗
    • 簡單,無需開發
  • 缺點
    • 資源開銷高
    • 必須整套使用
  • 優點
    • 自主可控,按需開發
    • 資源開銷可控
  • 缺點
    • 需要自己投入開發
    • 應用層邏輯控制使得網路複雜度向外蔓延
    • 複雜度帶來維護成本
  1. 基於回執

 

基於亂序處理方法的總結

網路不是絕對可靠的,為了實現相對可靠,需要付出一定的代價,企業需要考慮的是:如何衡量所付出的代價與產出成正比。

衝突

比亂序更高級的一種表現形式,存在多向、多維度等問題。

 

 

 

如何避免錯誤的蔓延?

原則:任何一次不一致,都會導致後續的操作基於錯誤的信息進行,從而不斷擴大錯誤,造成無法收拾的結果。因此,不一致是不能被容忍的。

解決辦法:

  1. 嚴格一致性:獨占
  2. 最終一致性:檢查與修複
  3. 非技術手段:設計與提示
嚴格的一致性

獨占就是同一時間同一範圍只能由一人操作。

  1. 範圍
    1. 整個表格,類似VSS
    2. 工作表
    3. 單元格範圍
  2. 排他性
    1. 獨占衝突時,必有一方被彈開
    2. 直到占有者解開,不然無法占用
    3. 占用前無法操作
    4. 原理和鎖基本一致
  3. 優點
    1. 可以確保嚴格一致性,不會產生多版本的錯誤累積
    2. 比起修複恢復這類彌補手段,一開始就不出錯的成本最低
    3. 邏輯清楚簡單,開發維護成本低
  4. 缺點
    1. 靜態協作的味道
    2. 獨占動作嚴重影響體驗
    3. 大幅降低協作效率
  5. 需對錶格實現的 功能
    1. 鎖定工作表
    2. 鎖定單元格
最終一致性

基於唯一正確順序,察覺客戶端的錯誤,撤銷錯誤操作後重新執行正確的操作。

  1. 唯一正確
    1. 伺服器到達順序
    2. 協作邊界分流
    3. P2P+選舉演算法
  2. 察覺錯誤
    1. 伺服器回執id
    2. 伺服器回執操作,MS
  3. 撤銷錯誤
    1. 撤銷到錯誤發生前的一步操作的結果
    2. 保存副本實現撤銷功能
    3. 利用操作版本快照
  4. 重新執行
    1. 操作隊列需保存
    2. 區分好無感知執行與顯式執行

 

針對多人協作難點的總結

如何實現Excel相關功能是需要開發人員需要花時間去研究的,另外為了滿足需求,適配多設備和平臺的相容性也非常重要。

另外,多人協作表格的本質還具有如下本質和特點:

  •  Server – Clients 中心系統,類似數值敏感的小型網游
  • 任何這類系統都是在體驗和正確性中尋求平衡
  • 表格的數值敏感性高於網游,數據操作和存儲的挑戰更大
  • 表格的計算複雜度更高,尤其涉及複雜公式嵌套與全量統計篩選
  • Web存在天花板,所以複雜的頁游並不多見,端游較多

 

最後,假如您想瞭解更多如何實現多人協作平臺相關的內容,歡迎參加2019年12月18日(周三) 14點由上海佳軟CTO帶來的一場線上直播:https://live.vhall.com/483759540,相信屆時我們都會受益良多的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • nvm Node.js version manager ,推薦使用它來安裝 node.js 。 "Mac 版項目地址" "Windows 版項目地址" windows 版安裝 進入 "下載頁" 找到安裝包: 跟著引導安裝即可。 輸入 查看是否安裝成功,成功的話如下圖所示。如果提示找不到命令, "請看 ...
  • 為同一個元素綁定多個不同事件指向同一個事件處理函數 1. 用了switch(e.type){} 來修改 2. break <input type="button" value="小蘇" id="btn" /> <script src="common.js"></script> <script> // ...
  • div拖拽效果 JQuery ...
  • 如何渲染幾萬條數據並不卡住界面? 如何在不卡住頁面的情況下渲染數據,也就是說不能一次性將幾萬條 都渲染出來,而應該一次渲染部分 DOM,那麼就可以通過 requestAnimationFrame 來 每 16 ms 刷新一次。 <!DOCTYPE html> <html lang="en"> <he ...
  • 事件冒泡: 多個元素嵌套, 有層次關係 ,這些元素都註冊了相同的事件, 如果裡面的元素的事件觸發了, 外面的元素的該事件自動的觸發了 事件有三個階段: 1.事件捕獲階段 :從外向內 2.事件目標階段 :最開始選擇的那個 3.事件冒泡階段 : 從裡向外 為元素綁定事件 addEventListener ...
  • zoning 中華人民共和國行政區劃:省級、地級、縣級、鄉級和村級 GitHub: Gitee: Demo: 來源 國家統計局 統計用區劃和城鄉劃分代碼 統計數據截止2018 10 31 於 2019 01 31發佈 使用 打開頁面 打開瀏覽器控制台(推薦Chrome、Firefox,請不要用IE系 ...
  • 引言 在我們的前端日常工作中,無時無刻不在進行著變數的聲明和賦值,你是否也曾碰到過變數聲明報錯或變數被污染的問題,如果你跟筆者一樣碰到過,那麼我們應該暫時停下來好好思考問題發生的原因以及如何採取相應的補救措施。當然排查問題最好的方式就是深入其底層細節,瞭解在JavaScript中的記憶體分配方式。只有 ...
  • 一、背景 之前測試的項目前後端的"路由"(負責把前端發過來的請求轉發到相應的後端服務上)要用Nignx來取代原來的tomcat的http server功能,做這個替換的原因是Nignx輕量級,抗併發,處理靜態文件好。 Nignx常用做靜態內容服務和代理伺服器,直接外來請求轉發給後面的應用伺服器(to ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...