基于同步ack的多終端數(shù)據(jù)同步方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及到計(jì)算機(jī)工程技術(shù)應(yīng)用領(lǐng)域,更具體地,是針對(duì)一種基于同步ACK校正的數(shù)據(jù)同步方法。
【背景技術(shù)】
[0002]隨著云計(jì)算的不斷發(fā)展,分布式系統(tǒng)的思想也慢慢開(kāi)始深入到各個(gè)系統(tǒng)中,分布式系統(tǒng)包括分布式操作系統(tǒng),分布式程序設(shè)計(jì)語(yǔ)言及編譯解釋系統(tǒng)、分布式文件系統(tǒng)和分布式數(shù)據(jù)庫(kù)系統(tǒng)等。分布式系統(tǒng)最大的特點(diǎn)就是進(jìn)程之間的高并發(fā)處理以及保證數(shù)據(jù)的可靠性和可用性。高并發(fā)需要進(jìn)行數(shù)據(jù)之間的實(shí)時(shí)同步,可靠性需要多服務(wù)器數(shù)據(jù)備份,這樣當(dāng)某個(gè)服務(wù)器數(shù)據(jù)出現(xiàn)問(wèn)題后能進(jìn)行恢復(fù),這就帶來(lái)了服務(wù)器之間數(shù)據(jù)存儲(chǔ)同步的問(wèn)題,這也是分布式系統(tǒng)中得巨大挑戰(zhàn)。
[0003]現(xiàn)有的分布式服務(wù)器之間的存儲(chǔ)分布式已經(jīng)比較成熟了,主要包括分布式文件系統(tǒng),分布式鍵值系統(tǒng),分布式表格系統(tǒng)及分布式數(shù)據(jù)庫(kù),這些分布式存儲(chǔ)系統(tǒng)通過(guò)一定的分布式協(xié)議進(jìn)行服務(wù)端之間的數(shù)據(jù)同步,其策略基本上是通過(guò)一致性哈希算法,在指定服務(wù)器之間進(jìn)行數(shù)據(jù)備份及同步。
[0004]但是在一些特殊情況下,終端數(shù)據(jù)庫(kù)需要與服務(wù)器之間進(jìn)行數(shù)據(jù)同步,這樣確保終端在斷網(wǎng)情況下能夠依賴本地?cái)?shù)據(jù)繼續(xù)運(yùn)行。且需要盡量與服務(wù)端的數(shù)據(jù)一致,這就需要系統(tǒng)在重新聯(lián)網(wǎng)后同步獲取服務(wù)端產(chǎn)生的所有新數(shù)據(jù)。
[0005]雖然服務(wù)器之間的數(shù)據(jù)同步方案相對(duì)比較成熟了,基本上是通過(guò)節(jié)點(diǎn)同步合并、I/o容錯(cuò)及分布式協(xié)議恢復(fù),但是對(duì)于終端數(shù)據(jù)同步方案卻還不是很成熟。因?yàn)槎嘟K端之間無(wú)法像服務(wù)器一樣直接進(jìn)行通信同步,而需要統(tǒng)一通過(guò)服務(wù)器進(jìn)行同步,這樣就給服務(wù)器帶來(lái)了巨大壓力。如果通過(guò)數(shù)據(jù)庫(kù)同步的話,其基本原理是通過(guò)傳輸目的數(shù)據(jù)庫(kù)的歷史操作日志進(jìn)行原數(shù)據(jù)庫(kù)與目的數(shù)據(jù)庫(kù)之間的信息同步的。這需要保證兩個(gè)數(shù)據(jù)庫(kù)表格屬性的完全一致性。
[0006]怎樣實(shí)現(xiàn)多個(gè)終端與服務(wù)端之間的數(shù)據(jù)同步方案,在保證數(shù)據(jù)同步完全可靠的情況下提高數(shù)據(jù)同步的效率,保證終端之間數(shù)據(jù)的實(shí)時(shí)更新,是當(dāng)前尚未解決的技術(shù)問(wèn)題。
【發(fā)明內(nèi)容】
[0007]本發(fā)明解決的技術(shù)問(wèn)題在于:實(shí)現(xiàn)多終端情況下的服務(wù)端數(shù)據(jù)同步,保證終端在聯(lián)網(wǎng)狀態(tài)下能獲取最新數(shù)據(jù),并在斷網(wǎng)重連后同步最新的數(shù)據(jù)。
[0008]本發(fā)明進(jìn)一步解決的問(wèn)題在于:在保證數(shù)據(jù)可靠的基礎(chǔ)上,大幅度提高數(shù)據(jù)同步的效率。
[0009]本發(fā)明的技術(shù)方案提供一種基于同步ACK的多終端數(shù)據(jù)同步方法,在服務(wù)端和各終端分別維持各自最新的傳輸控制字符序號(hào),將服務(wù)端的傳輸控制字符序號(hào)記為ACK,將服務(wù)端的傳輸控制字符序號(hào)記為EACK,所述傳輸控制字符序號(hào)根據(jù)數(shù)據(jù)的序列號(hào)取值;設(shè)有N個(gè)終端,分別記為終端1、終端2.....終端N,同步實(shí)現(xiàn)方式如下, 首先,啟動(dòng)服務(wù)端,進(jìn)行初始化,包括讀入傳輸控制字符序號(hào)ACK的最新值;分別啟動(dòng)終端1、終端2.....終端N,各終端分別初始化,包括讀入各自傳輸控制字符序號(hào)EACK1'
EACK2,...、EACK1^最新值;
當(dāng)某終端I有新增的數(shù)據(jù)時(shí),將數(shù)據(jù)發(fā)往服務(wù)端,服務(wù)端將該數(shù)據(jù)做持久化存儲(chǔ),并更新服務(wù)端ACK值,ACK=ACK+1 ;服務(wù)端將接收到的數(shù)據(jù),添加最新的ACK值后廣播下發(fā)給各個(gè)終端1、終端2、...、終端N ;
任一終端J收到服務(wù)端下發(fā)的數(shù)據(jù)后,解析獲取下發(fā)數(shù)據(jù)的ACK值,將收到的ACK值與本地EACK1值進(jìn)行比較,判斷是否ACK等于本地EACK τ值加I,
是則,終端J將該數(shù)據(jù)更新至本地,并更新EACK1值,EACK J=EACKj +1,
否則,終端J丟棄該數(shù)據(jù),將包括本地EACK1值的同步請(qǐng)求上傳給服務(wù)端;服務(wù)端在接收到終端J的同步請(qǐng)求后,對(duì)同步請(qǐng)求進(jìn)行解析,獲取需要同步的EACh值,并從持久化存儲(chǔ)的數(shù)據(jù)中獲取傳輸控制字符序號(hào)取值為EACKfl至ACK的所有數(shù)據(jù),然后發(fā)送給終端J,終端J接收到數(shù)據(jù)后更新本地?cái)?shù)據(jù),并更新EACKj值,EACK J=EACK1 +1。
[0010]而且,服務(wù)端在同一時(shí)刻最多只接收一個(gè)終端上傳數(shù)據(jù)的請(qǐng)求,在服務(wù)端設(shè)置一個(gè)先入先出的隊(duì)列,各請(qǐng)求按時(shí)間順序被加入隊(duì)列的末端,服務(wù)端從該隊(duì)列的首端依次取出請(qǐng)求進(jìn)行處理。
[0011]本發(fā)明是通過(guò)維護(hù)終端與服務(wù)端的一致性ACK值來(lái)實(shí)現(xiàn)多終端與服務(wù)器之間的數(shù)據(jù)完全同步,且保證數(shù)據(jù)傳輸?shù)目煽扛咝?。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
(1)本發(fā)明只需要維護(hù)ACK值,實(shí)現(xiàn)簡(jiǎn)單,計(jì)算效率高;
(2)本發(fā)明每次數(shù)據(jù)同步只需要發(fā)送有效數(shù)據(jù),極大提高同步的效率,節(jié)省了通信帶寬,并挺高了系統(tǒng)的魯棒性;
(3 )通過(guò)維護(hù)ACK值可以實(shí)現(xiàn)數(shù)據(jù)的完全同步。
【附圖說(shuō)明】
[0012]圖1是本發(fā)明實(shí)施例的系統(tǒng)應(yīng)用示意圖。
[0013]圖2是本發(fā)明實(shí)施例的基本流程圖。
【具體實(shí)施方式】
[0014]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施案例,并參照附圖,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
[0015]本發(fā)明采用的技術(shù)方案是:在服務(wù)端和客戶端(即終端)各維持各自最新的ACK值(終端的可稱作EACK,以和服務(wù)端ACK做區(qū)分),傳輸控制字符序號(hào)ACK取值可采用數(shù)據(jù)的序列號(hào)(即數(shù)據(jù)次序),稱為傳輸控制字符序號(hào)。即將服務(wù)端的傳輸控制字符序號(hào)記為ACKJf服務(wù)端的傳輸控制字符序號(hào)記為EACK。
[0016]參見(jiàn)圖2,本發(fā)明實(shí)施例的流程包括以下步驟:
首先,啟動(dòng)各個(gè)終端和服務(wù)端,分別讀入當(dāng)前的ACK值進(jìn)行初始化,終端的初始化結(jié)果作為本地的EACK值存儲(chǔ);
當(dāng)任一終端上傳數(shù)據(jù)到服務(wù)端后,服務(wù)端更新ACK值,可采用簡(jiǎn)單的自增加,即ACK=ACK+!。服務(wù)端將該條上傳的數(shù)據(jù)與更新的ACK值做持久化存儲(chǔ),并將此條數(shù)據(jù)與更新的ACK值一起進(jìn)行廣播;
各終端接收到廣播的數(shù)據(jù)后,分別執(zhí)行的處理為:解析獲取ACK值,與本地EACK值進(jìn)行比較,如果接收到的ACK等于更新后EACK的值(即EACK+1),則按此條數(shù)據(jù)進(jìn)行更新本地?cái)?shù)據(jù),并更新EACK值(即EACK+1),否則丟棄數(shù)據(jù)并將本地EACK值發(fā)給服務(wù)端請(qǐng)求數(shù)據(jù)同步,服務(wù)端將EACK至接收到的ACK之間的所有數(shù)據(jù)信息作為同步數(shù)據(jù)傳輸給終端,終端更新本地?cái)?shù)據(jù),并更新EACK值(即接收到的ACK)。完成終端與服務(wù)器的數(shù)據(jù)同步。
[0017]具體實(shí)施時(shí),在終端更新本地?cái)?shù)據(jù)后,終端可判斷是否繼續(xù)實(shí)施數(shù)據(jù)同步,是則服務(wù)端繼續(xù)與終端保持?jǐn)?shù)據(jù)同步策略,接收終端的數(shù)據(jù)上傳并廣播,否則服務(wù)端結(jié)束與該終端的數(shù)據(jù)同步。
[0018]具體實(shí)施時(shí),設(shè)同步系統(tǒng)中有N個(gè)終端,終端1、終端2、...、終端N,相應(yīng)可設(shè)計(jì)流程為:
(O啟動(dòng)服務(wù)端,進(jìn)行初始化,包括讀入傳輸控制字符序號(hào)ACK的最新值;
(2)分別啟動(dòng)終端1、終端2.....終端N,各終端分別初始化,包括讀入各自傳輸控制字符序號(hào) EACKp EACK2、...、EACK1^最新值;
(3)當(dāng)某終端I(I的取值范圍為1,2,...,N)有新增