實現(xiàn)多機房數(shù)據(jù)一致性的方法、裝置及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種實現(xiàn)多機房數(shù)據(jù)一致性的方法、裝置及系統(tǒng)。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)服務(wù)的日益普及,經(jīng)常需要將一些常用的數(shù)據(jù)(如業(yè)務(wù)數(shù)據(jù)等)同時存儲在多個機房的服務(wù)器上。例如,為了向全國各地的用戶提供相同的服務(wù),分別在北京、廣州和西藏設(shè)置了三個機房,用戶通過任一機房節(jié)點都能訪問到所需的服務(wù),一般情況下用戶訪問最近的機房節(jié)點即可。這時,北京、廣州和西藏三個地區(qū)的機房中存儲的數(shù)據(jù)均相同。又如,有時為了防止因一個機房中的服務(wù)器掛掉而導(dǎo)致服務(wù)中斷的情況發(fā)生,也會同時部署多個存儲有相同數(shù)據(jù)的機房,以便在一個機房掛掉后能夠通過另外的機房為用戶提供可靠服務(wù)。
[0003]在上述情況中,多個機房中的數(shù)據(jù)需要保持一致,一旦各機房中的數(shù)據(jù)出現(xiàn)了不一致的情況就會影響用戶的正常使用。由于業(yè)務(wù)數(shù)據(jù)經(jīng)常發(fā)生變更,一旦某機房中的數(shù)據(jù)變更后,其他機房沒有及時進行同步更新就會導(dǎo)致數(shù)據(jù)不一致的情況發(fā)生,因此,目前還沒有一種有效的機制能夠確保多個機房中的數(shù)據(jù)完全一致。
【發(fā)明內(nèi)容】
[0004]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的實現(xiàn)多機房數(shù)據(jù)一致性的方法、裝置及系統(tǒng)。
[0005]根據(jù)本發(fā)明的一個方面,提供了一種實現(xiàn)多機房數(shù)據(jù)一致性的方法,其包括:接收到數(shù)據(jù)寫入請求后,從多個機房中確定一個機房作為數(shù)據(jù)寫入機房;將待寫入的數(shù)據(jù)內(nèi)容寫入數(shù)據(jù)寫入機房,并且,將待寫入的數(shù)據(jù)內(nèi)容寫入預(yù)設(shè)的公共消息隊列;其中,公共消息隊列中的數(shù)據(jù)內(nèi)容用于供其它各機房進行相應(yīng)的數(shù)據(jù)更新。
[0006]依據(jù)本發(fā)明的另一方面,提供了一種實現(xiàn)多機房數(shù)據(jù)一致性的裝置,其包括:寫入請求接收模塊,適于在接收到數(shù)據(jù)寫入請求后,從多個機房中確定一個機房作為數(shù)據(jù)寫入機房;第一數(shù)據(jù)寫入模塊,適于將待寫入的數(shù)據(jù)內(nèi)容寫入數(shù)據(jù)寫入機房;以及,第二數(shù)據(jù)寫入模塊,適于將待寫入的數(shù)據(jù)內(nèi)容寫入預(yù)設(shè)的公共消息隊列,其中,公共消息隊列中的數(shù)據(jù)內(nèi)容用于供其它各機房進行相應(yīng)的數(shù)據(jù)更新。
[0007]依據(jù)本發(fā)明的另一方面,提供了一種實現(xiàn)多機房數(shù)據(jù)一致性的系統(tǒng),其包括:多個機房,以及與多個機房分別相連的客戶端,其中,客戶端包括上述的實現(xiàn)多機房數(shù)據(jù)一致性的裝置。
[0008]在本發(fā)明的實現(xiàn)多機房數(shù)據(jù)一致性的方法、裝置及系統(tǒng)中,當(dāng)接收到數(shù)據(jù)寫入請求時,不僅將數(shù)據(jù)寫入多個機房中的一個機房,而且還進一步將數(shù)據(jù)寫入預(yù)設(shè)的公共消息隊列中,以使其他各機房能夠根據(jù)該公共消息隊列進行相應(yīng)的數(shù)據(jù)更新。由于每次發(fā)生數(shù)據(jù)更新時都會相應(yīng)的更新公共消息隊列,因而各個機房都能夠根據(jù)該公共消息隊列進行同步更新,確保了各個機房中的數(shù)據(jù)一致性。
[0009]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【附圖說明】
[0010]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0011]圖1示出了根據(jù)本發(fā)明一個實施例的實現(xiàn)多機房數(shù)據(jù)一致性的方法的流程圖;
[0012]圖2示出了根據(jù)本發(fā)明一個具體實施例的實現(xiàn)多機房數(shù)據(jù)一致性的方法的流程圖;
[0013]圖3示出了圖2所示的實施例的一個應(yīng)用場景的示意圖;
[0014]圖4示出了圖2所示的實施例中數(shù)據(jù)讀取請求的處理過程示意圖;
[0015]圖5示出了根據(jù)本發(fā)明一個實施例的實現(xiàn)多機房數(shù)據(jù)一致性的裝置的結(jié)構(gòu)圖;以及,
[0016]圖6示出了根據(jù)本發(fā)明一個實施例的實現(xiàn)多機房數(shù)據(jù)一致性的系統(tǒng)的結(jié)構(gòu)圖。
【具體實施方式】
[0017]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
[0018]本發(fā)明實施例提供了一種實現(xiàn)多機房數(shù)據(jù)一致性的方法、裝置及系統(tǒng),至少能夠解決現(xiàn)有技術(shù)中多個機房之間的數(shù)據(jù)在頻繁更新的情況下難以實現(xiàn)一致性的問題。
[0019]圖1示出了根據(jù)本發(fā)明一個實施例的實現(xiàn)多機房數(shù)據(jù)一致性的方法的流程圖,如圖1所示,該方法包括如下步驟:
[0020]步驟SllO:接收到數(shù)據(jù)寫入請求后,從多個機房中確定一個機房作為數(shù)據(jù)寫入機房。
[0021]可選地,當(dāng)從多個機房中確定一個機房作為數(shù)據(jù)寫入機房時,可以根據(jù)以下規(guī)則中的一個或多個來確定數(shù)據(jù)寫入機房:根據(jù)待寫入數(shù)據(jù)的業(yè)務(wù)類型確定數(shù)據(jù)寫入機房;按照預(yù)設(shè)順序?qū)⒏鳈C房輪流確定為數(shù)據(jù)寫入機房;以及,向各機房發(fā)送訪問包,將在預(yù)設(shè)時間內(nèi)返回了響應(yīng)包的機房確定為可用機房,將在預(yù)設(shè)時間內(nèi)未返回響應(yīng)包的機房確定為不可用機房,并進一步從可用機房中確定數(shù)據(jù)寫入機房。
[0022]步驟S120:將待寫入的數(shù)據(jù)內(nèi)容寫入步驟SllO中確定的數(shù)據(jù)寫入機房。
[0023]步驟S130:將待寫入的數(shù)據(jù)內(nèi)容寫入預(yù)設(shè)的公共消息隊列,其中,該公共消息隊列中的數(shù)據(jù)內(nèi)容用于供其它各機房進行相應(yīng)的數(shù)據(jù)更新。
[0024]可選地,每當(dāng)公共消息隊列發(fā)生更新時,其它各機房通過數(shù)據(jù)同步進程獲取公共消息隊列中的數(shù)據(jù)內(nèi)容,并根據(jù)獲取到的數(shù)據(jù)內(nèi)容進行相應(yīng)的數(shù)據(jù)更新;本文中,公共消息隊列稱為QBus隊列,數(shù)據(jù)同步進程稱為QBusHandle進程。
[0025]可選地,為了防止某一機房同步更新失敗,或數(shù)據(jù)被篡改的情況發(fā)生,該方法還可以進一步包括以下步驟:定期對各機房中的數(shù)據(jù)內(nèi)容進行比對,當(dāng)發(fā)現(xiàn)數(shù)據(jù)不一致時,確定數(shù)據(jù)正確的機房,并根據(jù)數(shù)據(jù)正確的機房中的數(shù)據(jù)內(nèi)容對其他各機房進行數(shù)據(jù)更新;其中,確定數(shù)據(jù)正確的機房時的實現(xiàn)方式包括:獲取各機房中的數(shù)據(jù)內(nèi)容的時間戳,將時間戳最大的數(shù)據(jù)內(nèi)容所在的機房確定為數(shù)據(jù)正確的機房;和/或,獲取各機房的增量數(shù)據(jù),計算增量數(shù)據(jù)對應(yīng)的md5值,將md5值正確的增量數(shù)據(jù)所對應(yīng)的機房確定為數(shù)據(jù)正確的機房。
[0026]在本發(fā)明的實現(xiàn)多機房數(shù)據(jù)一致性的方法中,當(dāng)接收到數(shù)據(jù)寫入請求時,不僅將數(shù)據(jù)寫入多個機房中的一個機房,而且還進一步將數(shù)據(jù)寫入預(yù)設(shè)的公共消息隊列中,以使其他各機房能夠根據(jù)該公共消息隊列進行相應(yīng)的數(shù)據(jù)更新。由于每次發(fā)生數(shù)據(jù)更新時都會相應(yīng)的更新公共消息隊列,因而各個機房都能夠根據(jù)該公共消息隊列進行同步更新,確保了各個機房中的數(shù)據(jù)一致性。
[0027]圖2示出了根據(jù)本發(fā)明一個具體實施例的實現(xiàn)多機房數(shù)據(jù)一致性的方法的流程圖。在圖2所示的實施例中,各步驟的執(zhí)行主體為與多個機房分別相連的客戶端,該客戶端能夠接收并處理來自不同的業(yè)務(wù)調(diào)用方的數(shù)據(jù)訪問需求,該數(shù)據(jù)訪問需求包括數(shù)據(jù)寫入需求以及數(shù)據(jù)讀取需求。具體實現(xiàn)時,可以通過該客戶端所提供的客戶端SDK (Client SDK)來執(zhí)行相應(yīng)的操作。圖3示出了本實施例的一個應(yīng)用場景的示意圖,如圖3所示,客戶端31能夠接收來自第一網(wǎng)絡(luò)設(shè)備(web設(shè)備)32和/或第二網(wǎng)絡(luò)設(shè)備33的數(shù)據(jù)訪問請求,且客戶端31與第一機房34、第二機房35和第三機房36分別相連。另外,本領(lǐng)域技術(shù)人員能夠理解的是,在本實施例的應(yīng)用場景中還可以包含更多臺網(wǎng)絡(luò)設(shè)備或更多個機房。
[0028]如圖2所示,該方法包括如下步驟:
[0029]步驟S210:客戶端31接收數(shù)據(jù)寫入請求。
[0030]在圖3所示的應(yīng)用場景中,該數(shù)據(jù)寫入請求來自第一網(wǎng)絡(luò)設(shè)備(web設(shè)備)32和/或第二網(wǎng)絡(luò)設(shè)備33。在本實施例其他的應(yīng)用場景中,該數(shù)據(jù)寫入請求也可以來自其他的業(yè)務(wù)調(diào)用方,例如,可以由用戶終端或中間平臺等設(shè)備來發(fā)送該數(shù)據(jù)寫入請求;另外,該數(shù)據(jù)寫入請求還可能來源于機房管理者,例如,由多機房的管理員通過管理服務(wù)器來發(fā)送該數(shù)據(jù)寫入請求。具體地,該數(shù)據(jù)寫入請求包括新增數(shù)據(jù)請求、修改數(shù)據(jù)請求以及刪除數(shù)據(jù)請求等。
[0031]步驟S220:客戶端31根據(jù)接收到的數(shù)據(jù)寫入請求,從多個機房中確定一個機房作為數(shù)據(jù)寫入機房。
[0032]假設(shè)客戶端31接收到了一條來自第一網(wǎng)絡(luò)設(shè)備32的數(shù)據(jù)寫入請求,要根據(jù)該數(shù)據(jù)寫入請求修改三個機房中的數(shù)據(jù)內(nèi)容。這時,客戶端31將首先從第一機房34、第二機房35和第三機房36中選擇一個機房作為數(shù)據(jù)寫入機房。具體實現(xiàn)時,可以根據(jù)以下規(guī)則中的一個或多個來確定數(shù)據(jù)寫入機房:
[0033](I)根據(jù)待寫入數(shù)據(jù)的業(yè)務(wù)類型確定數(shù)據(jù)寫入機房。例如,在部署多個機房時,每個機房分別側(cè)重于存儲不同類型的業(yè)務(wù)數(shù)據(jù),因此,根據(jù)本次接收到的待寫入數(shù)據(jù)的業(yè)務(wù)類型就可以確定將哪個機房作為本次的數(shù)據(jù)寫入機房。
[0034](2)按照預(yù)設(shè)順序?qū)⒏鳈C房輪流確定為數(shù)據(jù)寫入機房。例如,按照第一機房34-第二機房35-第三機房36的順序來確定數(shù)據(jù)寫入機房,假設(shè)上一次接收到數(shù)據(jù)寫入請求后所確定的數(shù)據(jù)寫入機房為第二機房35,則本次接收到數(shù)據(jù)寫入請求后所確定的數(shù)據(jù)寫入機房則為第三機房36。
[0035](3)向各機房發(fā)送訪問包,將在預(yù)設(shè)時間內(nèi)返回了響應(yīng)包的機房確定為可用機房,將在預(yù)設(shè)時間內(nèi)未返回響應(yīng)包的機房確定為不可用機房,并進一步從可用機房中確定數(shù)據(jù)寫入機房。<