針對google的同步策略,我們以日歷為例子,做了一個同步流程的完整調(diào)查。調(diào)查手段包括閱讀文檔、實際使用和抓包分析。google日歷的文檔地址如下,接口參數(shù)可到這里查詢:https://developers.google.com/google-apps/calendar/overview?hl=zh-TW調(diào)查結(jié)果與我們的區(qū)別及改進建議:
1、完整的同步流程。? ? ? google:首先是獲取賬戶信息、acl訪問控制信息,接下來是上行按順序發(fā)起修改、發(fā)起刪除、發(fā)起添加,最后是下行,先獲取設(shè)置,然后獲取變更數(shù)據(jù)。? ? ? 我們:我們的目前沒有賬戶信息和acl訪問控制,上行順序是刪除、修改和添加。下行我們是獲取變更數(shù)據(jù),少一個獲取設(shè)置。除了額外的部分,數(shù)據(jù)交換流程和 google基本類似,刪除和修改的順序相反。? ? ? 建議:目前順序基本一致,暫不建議修改。
2、實時同步流程。? ? ? google:只有上行,沒有下行。雙向同步僅限于手動和系統(tǒng)發(fā)起的同步。? ? 我們:有上行也有下行。? ? 建議:實時同步去掉下行。因為絕大多數(shù)時候服務(wù)端并沒有新的數(shù)據(jù)可以更新,下行都是無效請求。
3、更新的推送方式。? ? google:依賴與推送來告知客戶端及時更新數(shù)據(jù),基本是秒到。? 我們:也依賴推送,但實時性有待提高。? 建議:先依賴推送,逐步提高實時性。之前每次同步都雙向能一定概率降低時效問題,但是無效請求太多對服務(wù)器和客戶端的性能有太大的壓力,也不能解決實時性 問題。如果客戶端對實時性要求很高的,可以考慮增加刷新按鈕作為補充。
4、上傳數(shù)據(jù)的方式。? google:日歷是逐條上傳。? 我們:目前是批量上傳。? 建議:這里我們優(yōu)于google目前的方式,已經(jīng)比較優(yōu)化。
5、下載數(shù)據(jù)的方式。? google:日歷是通過分頁獲取方式。 我們:在獲取之前先通過一個propfind接口來拉取改變,然后再拉取相應(yīng)的數(shù)據(jù)。 建議:去掉拉取改變的接口,直接采取分頁拉取的方式。通過對比,下一步我們希望參考這個策略來做調(diào)整,已經(jīng)比google優(yōu)化或者差別不大的就不調(diào)整了,其他的也已經(jīng)在著手。