重新執(zhí)行接收到的數(shù)據(jù)數(shù)據(jù)更新日志,以保證數(shù)據(jù)接收端與數(shù)據(jù)發(fā)送端數(shù)據(jù)一致。也就是,服務(wù)器總站與各個服務(wù)器子站之間只將狀態(tài)更新的數(shù)據(jù)項(xiàng)發(fā)送至對方,即服務(wù)器總站與各個服務(wù)器子站之間只交互狀態(tài)更新的數(shù)據(jù),具體地,數(shù)據(jù)發(fā)送端將所有數(shù)據(jù)更新日志按配置的數(shù)據(jù)格式發(fā)送給數(shù)據(jù)接收端,數(shù)據(jù)接收端重新執(zhí)行接收到的數(shù)據(jù)數(shù)據(jù)更新日志,保證數(shù)據(jù)接收端與數(shù)據(jù)發(fā)送端數(shù)據(jù)一致。本實(shí)施方式中的分布式數(shù)據(jù)同步方法,適用于數(shù)據(jù)量大并且經(jīng)常變動的數(shù)據(jù)表。
[0023]本實(shí)施方式的分布式數(shù)據(jù)同步方法,具體流程如圖2所示,包含以下步驟:
[0024]步驟201,數(shù)據(jù)接收端讀取預(yù)先設(shè)置的配置信息,并根據(jù)配置信息獲取待同步的數(shù)據(jù)項(xiàng)。其中,配置信息是通過配置工具預(yù)先設(shè)置的,且配置信息包含待同步的數(shù)據(jù)項(xiàng)信息以及待同步的數(shù)據(jù)項(xiàng)對應(yīng)的數(shù)據(jù)格式信息。
[0025]步驟202,數(shù)據(jù)接收端根據(jù)待同步的數(shù)據(jù)項(xiàng)生成數(shù)據(jù)請求包,并通過數(shù)據(jù)發(fā)送端的數(shù)據(jù)服務(wù)發(fā)送至數(shù)據(jù)發(fā)送端。其中,數(shù)據(jù)請求包中包含待同步的數(shù)據(jù)項(xiàng)信息。
[0026]步驟203,數(shù)據(jù)發(fā)送端接收數(shù)據(jù)請求包。
[0027]步驟204,數(shù)據(jù)發(fā)送端解析數(shù)據(jù)請求包,得到待同步的數(shù)據(jù)項(xiàng)。
[0028]步驟205,數(shù)據(jù)發(fā)送端在檢測到數(shù)據(jù)狀態(tài)更新時(shí),讀取配置信息,獲取該數(shù)據(jù)項(xiàng)的數(shù)據(jù)格式,并生成數(shù)據(jù)更新日志。具體地說,本步驟中,是實(shí)時(shí)檢測待同步的數(shù)據(jù)項(xiàng),一旦檢測到待同步的數(shù)據(jù)項(xiàng)中有數(shù)據(jù)項(xiàng)被修改,即該數(shù)據(jù)項(xiàng)被更新,便讀取配置信息,獲取該數(shù)據(jù)項(xiàng)的數(shù)據(jù)格式,并將狀態(tài)更新的數(shù)據(jù)項(xiàng)按照預(yù)設(shè)的數(shù)據(jù)格式生成數(shù)據(jù)更新日志,并將生成的數(shù)據(jù)更新日志保存到傳輸隊(duì)列中,同時(shí),記錄數(shù)據(jù)更新日志的時(shí)間戳。
[0029]步驟206,數(shù)據(jù)發(fā)送端讀取當(dāng)前待發(fā)送的數(shù)據(jù)更新日志。具體地說,數(shù)據(jù)發(fā)送端按照預(yù)設(shè)的順序每次僅發(fā)送一個待同步的數(shù)據(jù)項(xiàng),即每次僅發(fā)送一個數(shù)據(jù)項(xiàng)的數(shù)據(jù)更新日志。當(dāng)一個數(shù)據(jù)項(xiàng)的更新日志位于傳輸隊(duì)列的最頂端時(shí),該數(shù)據(jù)更新日志為待發(fā)送的當(dāng)前數(shù)據(jù)更新日志。在本步驟中,數(shù)據(jù)發(fā)送端讀取的是位于傳輸隊(duì)列的最頂端的數(shù)據(jù)更新日志。
[0030]在本實(shí)施方式中,數(shù)據(jù)發(fā)送端將所有數(shù)據(jù)更新日志按照預(yù)先配置的數(shù)據(jù)格式以及在傳輸隊(duì)列中的排列順序逐一發(fā)送至數(shù)據(jù)接收端。
[0031 ]步驟207,數(shù)據(jù)發(fā)送端將待發(fā)送的數(shù)據(jù)更新日志進(jìn)行加密后發(fā)送至數(shù)據(jù)接收端。在本步驟中,數(shù)據(jù)發(fā)送端可以采用對稱加密算法對待發(fā)送的數(shù)據(jù)更新日志進(jìn)行加密。經(jīng)過加密的數(shù)據(jù),在通過公網(wǎng)傳輸時(shí),安全性高。
[0032]步驟208,數(shù)據(jù)接收端實(shí)時(shí)地接收來自數(shù)據(jù)發(fā)送端的數(shù)據(jù),并記錄接收的數(shù)據(jù)包信息。其中,數(shù)據(jù)包信息包含接收端的數(shù)據(jù)請求ID、數(shù)據(jù)包數(shù)量、已接收的數(shù)據(jù)包序號。
[0033]如果在數(shù)據(jù)接收端接收來自數(shù)據(jù)發(fā)送端的數(shù)據(jù)時(shí)發(fā)生數(shù)據(jù)傳輸中斷的情況,則數(shù)據(jù)接收端保存已接收的數(shù)據(jù),并在恢復(fù)數(shù)據(jù)傳輸后根據(jù)記錄的數(shù)據(jù)包信息繼續(xù)接收未接收的數(shù)據(jù)。在接收數(shù)據(jù)時(shí),實(shí)時(shí)保存接收的數(shù)據(jù),并記錄接收的數(shù)據(jù)包信息,以避免發(fā)生數(shù)據(jù)傳輸中斷,并在恢復(fù)數(shù)據(jù)傳輸后根據(jù)記錄的數(shù)據(jù)包信息繼續(xù)接收未接收的數(shù)據(jù),即實(shí)現(xiàn)了斷點(diǎn)續(xù)傳功能,這樣,可以避免數(shù)據(jù)漏傳數(shù)據(jù)以及數(shù)據(jù)重復(fù)傳輸。
[0034]步驟209,數(shù)據(jù)接收端對接收的數(shù)據(jù)包進(jìn)行解密,得到數(shù)據(jù)更新日志。在本步驟中,數(shù)據(jù)接收端可以采用對稱加密算法的逆算法對接收的數(shù)據(jù)包進(jìn)行解密。
[0035]步驟210,數(shù)據(jù)接收端讀取解密后的數(shù)據(jù)更新日志。
[0036]步驟211,數(shù)據(jù)接收端通過執(zhí)行數(shù)據(jù)更新日志,使數(shù)據(jù)接收端與數(shù)據(jù)發(fā)送端數(shù)據(jù)一致,并將執(zhí)行結(jié)果發(fā)送至數(shù)據(jù)發(fā)送端。
[0037]步驟212,判斷數(shù)據(jù)發(fā)送端的數(shù)據(jù)更新日志是否發(fā)送完畢。若是,則結(jié)束本流程,否貝IJ,執(zhí)行步驟213,直至數(shù)據(jù)發(fā)送端的所有數(shù)據(jù)更新日志發(fā)送完畢。
[0038]步驟213,數(shù)據(jù)發(fā)送端讀取待發(fā)送的下一個數(shù)據(jù)更新日志。具體而言,數(shù)據(jù)發(fā)送端讀取當(dāng)前位于傳輸隊(duì)列中的頂端的數(shù)據(jù)更新日志。
[0039]與現(xiàn)有技術(shù)相比,由于服務(wù)器總站可以實(shí)時(shí)地向服務(wù)器子站發(fā)送數(shù)據(jù),服務(wù)器子站也可以實(shí)時(shí)地向服務(wù)器總站發(fā)送數(shù)據(jù),這樣,無論服務(wù)器總站還是服務(wù)器子站數(shù)據(jù)更新都很及時(shí),而且,由于服務(wù)器總站與各個服務(wù)器子站之間只將狀態(tài)更新的數(shù)據(jù)項(xiàng)發(fā)送至對方,即服務(wù)器總站與各個服務(wù)器子站之間只交互狀態(tài)更新的數(shù)據(jù),所以,即使服務(wù)器總站與各個服務(wù)器子站之間出現(xiàn)通信中斷,服務(wù)器總站與各個服務(wù)器子站將各自分?jǐn)傄徊糠謮毫?,?shí)現(xiàn)了壓力均衡,降低了對服務(wù)器的要求,減少了對服務(wù)器的成本投入;同時(shí),由于服務(wù)器總站與各個服務(wù)器子站之間只交互狀態(tài)更新的數(shù)據(jù),數(shù)據(jù)傳輸量小,可以節(jié)約通信流量、減輕通信負(fù)擔(dān)。
[0040]本發(fā)明的第二實(shí)施方式涉及一種分布式數(shù)據(jù)同步系統(tǒng)及方法。第二實(shí)施方式與第一實(shí)施方式大致相同,主要區(qū)別之處在于:在第一實(shí)施方式中,對待發(fā)送的數(shù)據(jù)更新日志進(jìn)行了加密,可以確保數(shù)據(jù)傳輸?shù)陌踩?。而在本發(fā)明第二實(shí)施方式中,還對待發(fā)送的數(shù)據(jù)更新日志進(jìn)行壓縮后進(jìn)行傳輸,這樣,可以降低傳輸?shù)呢?fù)擔(dān),降低服務(wù)器子站對通信的速度和穩(wěn)定性要求。
[0041 ]本實(shí)施方式中的分布式數(shù)據(jù)同步系統(tǒng)及方法,如圖3所示,包含步驟301?315,其中,步驟301?306、309、312?315分別與第一實(shí)施方式中的步驟201?206、208、210?213相似,在此不再贅述。下面僅介紹不同之處:
[0042]步驟307,數(shù)據(jù)發(fā)送端將待發(fā)送的數(shù)據(jù)更新日志進(jìn)行加密。在本步驟中,數(shù)據(jù)發(fā)送端可以采用AES(高級加密標(biāo)準(zhǔn))加密算法對待發(fā)送的更新日志進(jìn)行加密。
[0043]步驟308,將加密后的數(shù)據(jù)更新日志壓縮成數(shù)據(jù)包,并發(fā)送至數(shù)據(jù)接收端。對發(fā)送的數(shù)據(jù)進(jìn)行壓縮后再進(jìn)行傳輸,可以降低傳輸?shù)呢?fù)擔(dān),降低服務(wù)器子站對通信的速度和穩(wěn)定性要求。
[0044]在本步驟中,具體可以采用ZIP壓縮算法對數(shù)據(jù)更新日志進(jìn)行壓縮。
[0045]步驟310,數(shù)據(jù)接收端對接收的數(shù)據(jù)包進(jìn)行解壓縮。在本步驟中,數(shù)據(jù)接收端采用壓縮算法的逆算法對接收的數(shù)據(jù)包進(jìn)行解壓縮。
[0046]步驟311,數(shù)據(jù)接收端對解壓縮的數(shù)據(jù)包進(jìn)行解密,得到數(shù)據(jù)更新日志。
[0047]總之,在本實(shí)施方式中,在數(shù)據(jù)發(fā)送端將待發(fā)送的數(shù)據(jù)更新日志發(fā)送至數(shù)據(jù)接收端之前,依次進(jìn)行加密、壓縮,在傳輸時(shí)采用分包單傳,并采用斷點(diǎn)續(xù)傳技術(shù),這樣,既確保數(shù)據(jù)在公網(wǎng)的傳輸安全性,節(jié)省了搭建VPN所需設(shè)備的成本投入,還降低了服務(wù)器子站對接入公網(wǎng)的速度和穩(wěn)定性要求,減少了對接入公網(wǎng)的成本投入。
[0048]上面各種方法的步驟劃分,只是為了描述清楚,實(shí)現(xiàn)時(shí)可以合并為一個步驟或者對某些步驟進(jìn)行拆分,分解為多個步驟,只要包含相同的邏輯關(guān)系,都在本專利的保護(hù)范圍內(nèi);對算法中或者流程中添加無關(guān)緊要的修改或者引入無關(guān)緊要的設(shè)計(jì),但不改變其算法和流程的核心設(shè)計(jì)都在該專利的保護(hù)范圍內(nèi)。
[0049]本發(fā)明第三實(shí)施方式涉及一種分布式數(shù)據(jù)同步系統(tǒng),如圖1所示,該分布式數(shù)據(jù)同步系統(tǒng)包含服務(wù)器總站與若干服務(wù)器子站;所有服務(wù)器子站分別與服務(wù)器總站通信連接;服務(wù)器總站為數(shù)據(jù)發(fā)送端,服務(wù)器子站為數(shù)據(jù)接收端;或者,服務(wù)器總站為數(shù)據(jù)接收端,服務(wù)器子站為數(shù)據(jù)發(fā)送端。
[0050]數(shù)據(jù)發(fā)送端,用于實(shí)時(shí)檢測待同步的數(shù)據(jù)的狀態(tài),并僅將數(shù)據(jù)更新日志按照預(yù)設(shè)的數(shù)據(jù)格式發(fā)送至數(shù)據(jù)接收端;其中,待同步的數(shù)據(jù)包含若干數(shù)據(jù)項(xiàng);數(shù)據(jù)更新日志中包含數(shù)據(jù)發(fā)送端中狀態(tài)更新的數(shù)據(jù)項(xiàng)。
[0051 ]數(shù)據(jù)接收端,用于實(shí)時(shí)地接收來自數(shù)據(jù)發(fā)送端的數(shù)據(jù),并將數(shù)據(jù)更新日志中的數(shù)據(jù)項(xiàng)賦值給數(shù)據(jù)接收端中相應(yīng)的數(shù)據(jù)項(xiàng),使數(shù)據(jù)接收端與數(shù)據(jù)發(fā)送端數(shù)據(jù)一致;其中,數(shù)據(jù)接收端的數(shù)據(jù)項(xiàng)與數(shù)據(jù)發(fā)送端的數(shù)據(jù)項(xiàng)一一對應(yīng)。
[0052]具體地說,數(shù)據(jù)發(fā)送端包含日志生成模塊、記錄模塊、第一發(fā)送模塊