同步策略
-
客戶端定期輪詢:即客戶端在線時開啟一個線程定期訪問服務器看是否有數據更新,有的話,獲取數據,并進行更新,否則,不更新。
優點:簡單,易于實現,同時服務器壓力比較小;
缺點:不實時,很難確定一個最佳輪詢時間,電量、流量消耗大; -
服務端推送:當服務器有數據發生變化時,就將變化信息 push 給當前在線客戶端,通知其進行更新;
優點:客戶端壓力小,數據能夠實時更新;
缺點:服務器壓力大;
同步沖突判別
有版本控制機制的應用的同步沖突判別方式:
服務端維持用戶每一次的更新狀態信息,當用戶在一個平臺上進行數據同步時,會計算當前數據與上一次數據間的 diff 值,并為每一個 diff 值維持一個版本號,若當前無數據更改,則無需上傳服務器,若有數據更改,則將當前版本的 diff 信息上傳服務器,同一賬戶的多客戶端可以通過消息隊列的方式排隊進行更新;在進行數據同步時,先從服務端獲取最新的 diff 信息,若最新的 diff 版本號小于當前正在修改的文件的本地 diff 版本號,則表明發生了沖突,可以采用一種沖突解決方案進行解決;若最新的 diff 版本號大于當前正在修改的版本號,則根據 diff 信息更新本地數據;否則無需更新,因為數據并未發生變化。
沖突解決方案
- 交由用戶決定最終數據形態:當不同平臺對同一數據內容進行修改面臨沖突時,可以將沖突位置標明,然后提交給用戶自己進行抉擇,如 Evernote、SVN 等就是采用的這類解決方式;
- 根據時間戳,用后一個時間點的數據覆蓋前一個時間點的數據:先將沖突信息記錄保存在服務器,然后用最新的數據覆蓋舊數據,當用戶需要歷史信息時,可以根據服務器保留的沖突狀態信息來計算得到;這種解決方式需要注意時間戳的同步問題,因為不同機器的時間不一定一致,這樣就會導致不能準確地判斷誰是最新數據,可以采用的一種解決方式是:每一個上傳到服務器的數據都使用服務器的時鐘來進行時鐘同步。
- 根據應用特點,決定選擇沖突中的某一個最有效的數據;
- 合并沖突數據