一、多終端同步的含義
1指用戶在多個(gè)終端切換時(shí)可獲得一致性體驗(yàn),不丟失上下文,
2 如果用戶多個(gè)終端同時(shí)在線要能做到實(shí)時(shí)同步。
案例:apple的Handoff;qq消息多終端自動(dòng)同步;有道云的同步等
二、系統(tǒng)目標(biāo)
1實(shí)時(shí)性,服務(wù)端數(shù)據(jù)變更,在<1s 時(shí)間內(nèi)推送至各個(gè)端。
2實(shí)現(xiàn)消息的多終端增量同步,然后通過(guò)同步機(jī)制確保不丟消息。同步機(jī)制必須避免流量浪費(fèi),所以需要做增量。
3客戶端數(shù)據(jù)能自修復(fù)達(dá)到最終一致性。(離線-->在線)
三、實(shí)現(xiàn)原理
類似于:Git版本管理系統(tǒng)
可以說(shuō),相當(dāng)于實(shí)現(xiàn)一個(gè)服務(wù)器和客戶端實(shí)時(shí)同步的輕型數(shù)據(jù)庫(kù)。
四、設(shè)計(jì)
1、數(shù)據(jù)模型

2、數(shù)據(jù)模型說(shuō)明
? ? 服務(wù)端:
? ? ? ?數(shù)據(jù)集合,為原有的數(shù)據(jù)集合;
? ? ? ?數(shù)據(jù)變更序列,記錄每次數(shù)據(jù)發(fā)生變更,其中包含操作類型和數(shù)據(jù);
? ? ? ?數(shù)據(jù)最新變更,記錄某數(shù)據(jù)的最后一次變更。
? ? 客戶端:
? ? ? ?數(shù)據(jù)集合,在原數(shù)據(jù)基礎(chǔ)上,增加lastOptId(本地?cái)?shù)據(jù),最后變更一次變更對(duì)應(yīng)的操作序列)
3、業(yè)務(wù)場(chǎng)景說(shuō)明
場(chǎng)景1:client端第一次獲取數(shù)據(jù),調(diào)用接口,返回?cái)?shù)據(jù)(數(shù)據(jù)內(nèi)容+最后一次操作序列)。
場(chǎng)景2:client 斷網(wǎng) 重連后,調(diào)用接口獲取數(shù)據(jù)時(shí),傳入本地的lastOptId,服務(wù)端比較 請(qǐng)求中的lastOptId和服務(wù)端的lastOptId,如果兩者相同,則返回 “數(shù)據(jù)未發(fā)生變化”的響應(yīng)。如果lastOptId不同,則返回最新數(shù)據(jù)。
場(chǎng)景3:數(shù)據(jù)發(fā)生改變,服務(wù)端記錄操作序列、修改數(shù)據(jù)的最新變更,將相應(yīng)的變更push到各個(gè)client端。client端比較lastOptId,如果與推送的optId連續(xù),則根據(jù)操作序列 進(jìn)行數(shù)據(jù)重放。如果optId不連續(xù) 或 重做失敗,則調(diào)用http接口,重新獲取數(shù)據(jù)(同場(chǎng)景1)。重做完成后,可再次調(diào)用請(qǐng)求接口(同場(chǎng)景2),以確保未丟失變更。
4、技術(shù)點(diǎn)
APP ? 長(zhǎng)連接保持:
? ? ?1、借助第三方推送服務(wù),推送數(shù)據(jù);特點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,但實(shí)時(shí)性 及 到達(dá)率 依賴第三方服務(wù)。
? ? ?2、自研基于Netty的TCP長(zhǎng)連接保持框架。研發(fā)周期較長(zhǎng),可靠性 需經(jīng)實(shí)踐考驗(yàn)。
web端:
? ? ? 1、使用WebSocket,低版本瀏覽器使用socketjs。
五、相關(guān)文檔:
如何設(shè)計(jì)類似微信的多終端數(shù)據(jù)同步協(xié)議 | Grouk實(shí)踐分享:
http://lock522.b0.upaiyun.com/wym.pdf
微信通訊協(xié)議的學(xué)習(xí):
http://www.xodn.com/forum.php?mod=viewthread&tid=7055
四種多終端事務(wù)同步需求和目前的方法: