專利名稱:一種分布式系統(tǒng)中的數(shù)據(jù)同步方法和分布式系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請涉及計算機(jī)技術(shù)領(lǐng)域,特別是一種分布式系統(tǒng)中的數(shù)據(jù)同步方法和分布式系統(tǒng)。
背景技術(shù):
在計算機(jī)技術(shù)中,通?;谏a(chǎn)者-消費(fèi)者模型的設(shè)計架構(gòu)。在生產(chǎn)者-消費(fèi)者模型中,生產(chǎn)者用于生產(chǎn)數(shù)據(jù),這些數(shù)據(jù)再由消費(fèi)者來負(fù)責(zé)處理。請參閱圖1,其為現(xiàn)有技術(shù)中一種基于生產(chǎn)者-消費(fèi)者模型的架構(gòu)示意圖。如圖I所示,生產(chǎn)者將數(shù)據(jù)寫入緩沖區(qū)中, 消費(fèi)者再從緩存區(qū)中讀取數(shù)據(jù)進(jìn)行處理。這種基于生產(chǎn)者-消費(fèi)者模型的數(shù)據(jù)訪問方式,能夠支持解耦、并發(fā)和忙閑不均等情況。例如,鍵盤輸入程序是生產(chǎn)者,屏幕顯示程序是消費(fèi)者,字符是鍵盤輸入程序生產(chǎn)的數(shù)據(jù),鍵盤輸入程序?qū)⑸a(chǎn)的字符寫入緩沖區(qū),屏幕顯示程序再從緩沖區(qū)中讀取字符,對字符進(jìn)行顯示處理。但是,發(fā)明人在研究中發(fā)現(xiàn),現(xiàn)有的這種生產(chǎn)者-消費(fèi)者模型只能支持在同一個數(shù)據(jù)中心上的不同子系統(tǒng)中完成數(shù)據(jù)的訪問,例如,模型中的生產(chǎn)者位于數(shù)據(jù)中心A上的子系統(tǒng)I中,消費(fèi)者位于數(shù)據(jù)中心A上的子系統(tǒng)2中,子系統(tǒng)2中的消費(fèi)者對子系統(tǒng)I中的生產(chǎn)者所生產(chǎn)的數(shù)據(jù)進(jìn)行處理。通常,“數(shù)據(jù)中心”就是指以外包方式讓許多網(wǎng)上公司存放它們的設(shè)備,主要是網(wǎng)站服務(wù)器,或者存放數(shù)據(jù)的地方,是場地出租概念在因特網(wǎng)領(lǐng)域的延伸。如,數(shù)據(jù)中心為中國電信北京海淀機(jī)房?!白酉到y(tǒng)”就是實(shí)現(xiàn)一個或多個接口,這些接口定義子系統(tǒng)可以執(zhí)行的行為。也就是說,子系統(tǒng)提供可調(diào)用的接口,完成可執(zhí)行的行為。子系統(tǒng)部署在位于數(shù)據(jù)中心的網(wǎng)站服務(wù)器上,而在現(xiàn)有的生產(chǎn)者-消費(fèi)者模型中,不同的子系統(tǒng)可以部署在位于同一個數(shù)據(jù)中心的同一個網(wǎng)站服務(wù)器上,也可以部署在位于同一個數(shù)據(jù)中心的不同網(wǎng)站服務(wù)器上。而對于位于不同數(shù)據(jù)中心的生產(chǎn)者和消費(fèi)者,例如,生產(chǎn)者位于數(shù)據(jù)中心A的子系統(tǒng)I中,而消費(fèi)者位于數(shù)據(jù)中心B的子系統(tǒng)2中,現(xiàn)有的生產(chǎn)者-消費(fèi)者模型則無法實(shí)現(xiàn)數(shù)據(jù)的訪問,即,數(shù)據(jù)中心A的消費(fèi)者無法對遠(yuǎn)程的數(shù)據(jù)中心B的生產(chǎn)者所生產(chǎn)的數(shù)據(jù)進(jìn)行處理。
發(fā)明內(nèi)容
為了解決上述技術(shù)問題,本申請實(shí)施例提供了一種分布式系統(tǒng)中的數(shù)據(jù)同步方法和分布式系統(tǒng),以能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。本申請實(shí)施例公開了如下技術(shù)方案—種分布式系統(tǒng),包括至少兩個子系統(tǒng),每個子系統(tǒng)分別位于不同的數(shù)據(jù)中心上,其中,每個子系統(tǒng)包括消費(fèi)者模塊、生產(chǎn)者模塊、消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊,在位于任意一個數(shù)據(jù)中心的子系統(tǒng)中,生產(chǎn)者模塊,用于生產(chǎn)數(shù)據(jù),將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊;
消費(fèi)者模塊,用于從本地子系統(tǒng)的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理;生產(chǎn)者存儲模塊,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù),向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù);消費(fèi)者存儲模塊,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù)和位于本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中的子系統(tǒng)中的生產(chǎn)者存儲模塊同步的數(shù)據(jù)。一種分布式系統(tǒng)中的數(shù)據(jù)同步方法,包括本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊;
本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù),以便位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理。由上述實(shí)施例可以看出,與現(xiàn)有技術(shù)相比,本申請具有如下優(yōu)點(diǎn)分布式系統(tǒng)中分別位于不同數(shù)據(jù)中心的每個子系統(tǒng)同時包括生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊,位于一個數(shù)據(jù)中心的子系統(tǒng)中的生產(chǎn)者存儲模塊跨越數(shù)據(jù)中心向位于其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊進(jìn)行數(shù)據(jù)同步,依次實(shí)現(xiàn)各個子系統(tǒng)之間的交叉同步,最終保證整個分布式系統(tǒng)的數(shù)據(jù)同步,從而能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。并且,對于每個子系統(tǒng)而言,向外進(jìn)行數(shù)據(jù)同步過程和接受外面的數(shù)據(jù)同步過程可以并發(fā)執(zhí)行,提高了整個分布式系統(tǒng)的工作效率。
為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖I為現(xiàn)有技術(shù)中一種基于生產(chǎn)者-消費(fèi)者模型的架構(gòu)示意圖;圖2為本申請一種分布式系統(tǒng)的一個實(shí)施例的結(jié)構(gòu)圖;圖3為本申請中生產(chǎn)者存儲模塊的一個結(jié)構(gòu)示意圖;圖4為本申請中生產(chǎn)者模塊的一個結(jié)構(gòu)示意圖;圖5為本申請中消費(fèi)者生產(chǎn)模塊的一個結(jié)構(gòu)示意圖;圖6為本申請一種分布式系統(tǒng)中的數(shù)據(jù)同步方法的一個實(shí)施例的流程圖;圖7為本申請一種分布式系統(tǒng)中子系統(tǒng)A對子系統(tǒng)B進(jìn)行數(shù)據(jù)同步的方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖及實(shí)施例,對本申請實(shí)施例進(jìn)行詳細(xì)描述。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本申請,并不用于限定本申請。實(shí)施例一
請參閱圖2,其為本申請一種分布式系統(tǒng)的一個實(shí)施例的結(jié)構(gòu)圖。該系統(tǒng)包括至少兩個子系統(tǒng)20,每個子系統(tǒng)20分別位于不同的數(shù)據(jù)中心上,其中,每個子系統(tǒng)20包括消費(fèi)者模塊202、生產(chǎn)者模塊201、生產(chǎn)者存儲模塊203和消費(fèi)者存儲模塊204,在位于任意一個數(shù)據(jù)中心的子系統(tǒng)中,生產(chǎn)者模塊201,用于生產(chǎn)數(shù)據(jù),將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊204和生產(chǎn)者存儲模塊203 ;消費(fèi)者模塊202,用于從本地子系統(tǒng)的消費(fèi)者存儲模塊204中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理;生產(chǎn)者存儲模塊203,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊201寫入的數(shù)據(jù),向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊204同步所存儲的數(shù)據(jù);消費(fèi)者存儲模塊204,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊201寫入的數(shù)據(jù)和位于 除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的生產(chǎn)者存儲模塊203同步的數(shù)據(jù)。例如,以點(diǎn)擊付費(fèi)系統(tǒng)為例,由海外用戶通過位于美國或歐洲數(shù)據(jù)中心的子系統(tǒng)A執(zhí)行一次點(diǎn)擊行為,并產(chǎn)生一個數(shù)據(jù),數(shù)據(jù)存儲在子系統(tǒng)A中的生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊中,子系統(tǒng)A的生產(chǎn)者存儲模塊將數(shù)據(jù)同步給位于中國大陸數(shù)據(jù)中心的子系統(tǒng)B中的消費(fèi)者存儲模塊,并進(jìn)一步由子系統(tǒng)B的消費(fèi)者模塊在中國大陸進(jìn)行消費(fèi)。反過來,在中國大陸的數(shù)據(jù)中心也會產(chǎn)生數(shù)據(jù),該數(shù)據(jù)可以由海外用戶在美國或者歐洲的數(shù)據(jù)中心消費(fèi)。需要說明的是,為了簡單而清楚地表示分布式系統(tǒng)的結(jié)構(gòu),在圖2中的分布式系統(tǒng)僅包含了兩個子系統(tǒng)。而在本申請的技術(shù)方案中,分布式系統(tǒng)至少包括兩個子系統(tǒng),子系統(tǒng)的具體個數(shù)不在本實(shí)施例中進(jìn)行限定。另外,還需要說明的是,在本申請的技術(shù)方案中,“本地子系統(tǒng)”和“位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)”僅僅是一個相對概念。舉一個簡單的例子,假設(shè)整個分布式系統(tǒng)中共包含有3個子系統(tǒng)A、B和C,對于A而言,當(dāng)其為本地子系統(tǒng)時,B和C就是位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的;對于B而言,當(dāng)其為本地子系統(tǒng)時,A和C就是位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的,同樣,對于C而言,當(dāng)其為本地子系統(tǒng),A和B就是位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的。因此,可以明確的是,在本申請的分布式系統(tǒng)中,任意一個子系統(tǒng)都可以是本地子系統(tǒng),此時,分布式系統(tǒng)中除該本地子系統(tǒng)外的其它子系統(tǒng)都是該本地子系統(tǒng)的遠(yuǎn)程子系統(tǒng)。由于數(shù)據(jù)庫系統(tǒng)都會提供相應(yīng)的數(shù)據(jù)庫同步解決方法,因此,當(dāng)采用數(shù)據(jù)庫實(shí)現(xiàn)生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊時,可以方便地實(shí)現(xiàn)本地子系統(tǒng)的生產(chǎn)者存儲模塊與遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊之間的數(shù)據(jù)同步。優(yōu)選的,生產(chǎn)者存儲模塊203為一個主數(shù)據(jù)庫,消費(fèi)者存儲模塊204為一個從數(shù)據(jù)庫,所述主數(shù)據(jù)庫將存儲的數(shù)據(jù)復(fù)制到所述從數(shù)據(jù)庫中。進(jìn)一步優(yōu)選的,主數(shù)據(jù)庫和從數(shù)據(jù)庫包括SQL Server數(shù)據(jù)庫、Oracle Server數(shù)據(jù)庫、Mysql數(shù)據(jù)庫、Sybase ASE數(shù)據(jù)庫或者DB2數(shù)據(jù)庫等。
例如,以Mysql數(shù)據(jù)庫為例,在mysql數(shù)據(jù)庫A中配置數(shù)據(jù)庫B的主機(jī)信息及訪問口令,mysql會自動同步數(shù)據(jù)庫A的數(shù)據(jù)到數(shù)據(jù)庫B,即A庫的數(shù)據(jù)變更,包括修改新增等操作會同步到B庫。最后,重啟主數(shù)據(jù)庫A及從數(shù)據(jù)庫B,同步即生效,主數(shù)據(jù)庫A中的數(shù)據(jù)會同步到從數(shù)據(jù)庫B中。除了采用數(shù)據(jù)庫來實(shí)現(xiàn)生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊之外,也可以由獨(dú)立的邏輯功能模塊實(shí)現(xiàn)生產(chǎn)者存儲模塊,使本地子系統(tǒng)的生產(chǎn)者存儲模塊將數(shù)據(jù)同步到遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊。優(yōu)選的,請參閱圖3,其為本申請中生產(chǎn)者存儲模塊的一個結(jié)構(gòu)示意圖。如圖3所示,生產(chǎn)者存儲模塊203包括存儲子模塊2031、監(jiān)聽子模塊2032和同步子模塊2034,其中,存儲子模塊2031,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊201寫入的數(shù)據(jù);監(jiān)聽子模塊2032,用于監(jiān)測存儲子模塊2031是否有數(shù)據(jù)寫入,如果是,啟動同步·子模塊2033,否則,繼續(xù)檢測存儲子模塊2032 ;同步子模塊2033,用于將存儲子模塊2031存儲的數(shù)據(jù)寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊中。進(jìn)一步優(yōu)選的,存儲子模塊2031包括隊列緩沖區(qū)或者環(huán)形緩沖區(qū)。例如,存儲子模塊為一個環(huán)形隊列,在數(shù)據(jù)寫入接口中設(shè)置一個觀察者模式的數(shù)據(jù)監(jiān)聽器,這個數(shù)據(jù)監(jiān)聽器即為監(jiān)聽子模塊,當(dāng)將數(shù)據(jù)寫入環(huán)形隊列的同時,數(shù)據(jù)寫入接口向監(jiān)聽器發(fā)送notify消息,通過notify消息把數(shù)據(jù)操作的內(nèi)容發(fā)送給監(jiān)聽器,監(jiān)聽器是一個異步線程,收到消息后異步調(diào)用寫入接口,寫入接口即為同步子模塊,寫入接口將環(huán)形隊列中的數(shù)據(jù)寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊,完成數(shù)據(jù)同步。需要說明的是,存儲子模塊除了可以是隊列緩沖區(qū)或者環(huán)形緩沖區(qū)外,還可以是其它的具有存儲功能的介質(zhì)。在本申請的技術(shù)方案中,對存儲子模塊的存在形式并不進(jìn)行具體限定。另外,優(yōu)選的,生產(chǎn)者模塊201除了包括用于生產(chǎn)數(shù)據(jù)的生產(chǎn)子模塊,和用于將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊的數(shù)據(jù)寫入子模塊之外,請參閱圖4,其為本申請中生產(chǎn)者模塊的一個結(jié)構(gòu)示意圖,如圖4所示,生產(chǎn)者模塊201還包括記錄子模塊2013和時間寫入子模塊2014,其中,記錄子模塊2013,用于記錄數(shù)據(jù)的生產(chǎn)時間;時間寫入子模塊2014,用于將數(shù)據(jù)的生產(chǎn)時間一同寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊。與圖4所示的生產(chǎn)者消費(fèi)模塊相對應(yīng),請參閱圖5,為本申請中消費(fèi)者生產(chǎn)模塊的一個結(jié)構(gòu)示意圖,如圖5所示,消費(fèi)者存儲模塊204包括排序子模塊2041和處理子模塊2042,其中,排序子模塊2041,用于從本地子系統(tǒng)的消費(fèi)者存儲模塊中讀取數(shù)據(jù),按照數(shù)據(jù)的生產(chǎn)時間對讀取的數(shù)據(jù)進(jìn)行排序;處理子模塊2042,用于按照生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。由上述實(shí)施例可以看出,與現(xiàn)有技術(shù)相比,本申請具有如下優(yōu)點(diǎn)
分布式系統(tǒng)中分別位于不同數(shù)據(jù)中心的每個子系統(tǒng)同時包括生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊,位于一個數(shù)據(jù)中心的子系統(tǒng)中的生產(chǎn)者存儲模塊跨越數(shù)據(jù)中心向位于其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊進(jìn)行數(shù)據(jù)同步,依次實(shí)現(xiàn)各個子系統(tǒng)之間的交叉同步,最終保證整個分布式系統(tǒng)的數(shù)據(jù)同步,從而能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。并且,對于每個子系統(tǒng)而言,向外進(jìn)行數(shù)據(jù)同步過程和接受外面的數(shù)據(jù)同步過程可以并發(fā)執(zhí)行,提高了整個分布式系統(tǒng)的工作效率。實(shí)施例二與實(shí)施例一中的分布系統(tǒng)相對應(yīng),本申請實(shí)施例還提供了一種分布式系統(tǒng)中的數(shù)據(jù)同步方法。請參閱圖6,其為本申請一種分布式系統(tǒng)中的數(shù)據(jù)同步方法的一個實(shí)施例的流程圖。其中,同步方法包括以下步驟步驟601 :本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊; 需要說明的是,在本申請的技術(shù)方案中,并不限定生產(chǎn)者模塊將數(shù)據(jù)寫入生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊的寫入順序,可以將數(shù)據(jù)同時寫入到生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊,也可以先寫入任意一個存儲模塊,再寫入另一個存儲模塊。為了使消費(fèi)者模塊按照一定的順序處理數(shù)據(jù),本地子系統(tǒng)的生產(chǎn)者模塊在將數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊的同時,也記錄數(shù)據(jù)生產(chǎn)時間,將數(shù)據(jù)以及對應(yīng)的數(shù)據(jù)生產(chǎn)時間一同寫入。因此,優(yōu)選的,所述本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊包括本地子系統(tǒng)的生產(chǎn)者模塊在生產(chǎn)數(shù)據(jù)的同時,記錄數(shù)據(jù)的生產(chǎn)時間;本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)和數(shù)據(jù)的生產(chǎn)時間寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊。步驟602 :本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù),以便位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理。優(yōu)選的,所述本地子系統(tǒng)的生產(chǎn)者存儲模塊向遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù)包括本地子系統(tǒng)的生產(chǎn)者存儲模塊監(jiān)測是否有數(shù)據(jù)寫入;一旦監(jiān)測到有數(shù)據(jù)寫入,本地子系統(tǒng)的生產(chǎn)者存儲模塊將當(dāng)前寫入的數(shù)據(jù)寫入到遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊中。當(dāng)然,除了利用上述的監(jiān)測方式,在數(shù)據(jù)一旦寫入生產(chǎn)者存儲模塊后,即執(zhí)行數(shù)據(jù)同步外,生產(chǎn)者存儲模塊也可以定時將存儲的數(shù)據(jù)進(jìn)行同步。例如,設(shè)定一個同步周期,同時,生產(chǎn)者存儲模塊在存儲數(shù)據(jù)時記錄下數(shù)據(jù)的存儲時間,例如以時間戳的方式記錄下數(shù)據(jù)的存儲時間。在當(dāng)前同步周期到達(dá)時,生產(chǎn)者存儲模塊根據(jù)時間戳識別出在上一個同步周期與當(dāng)前不同周期之間存儲的數(shù)據(jù),將識別出的數(shù)據(jù)進(jìn)行同步。另外,如果生產(chǎn)者模塊在向本地子系統(tǒng)的生產(chǎn)者存儲模塊寫入數(shù)據(jù)的同時,也寫入了數(shù)據(jù)的生產(chǎn)時間,則本地子系統(tǒng)的生產(chǎn)者存儲模塊在進(jìn)行數(shù)據(jù)同步時,也同樣要同步數(shù)據(jù)的生產(chǎn)時間。因此,所述本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù)包括本地子系統(tǒng)的生產(chǎn)者存儲模塊監(jiān)測是否有數(shù)據(jù)寫入;一旦監(jiān)測到有數(shù)據(jù)寫入,本地子系統(tǒng)的生產(chǎn)者存儲模塊將當(dāng)前寫入的數(shù)據(jù)和數(shù)據(jù)的生產(chǎn)時間寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊中。同樣,當(dāng)生產(chǎn)者模塊向遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊同步數(shù)據(jù)和數(shù)據(jù)的生產(chǎn)時間時,除了利用上述的監(jiān)測方式外,生產(chǎn)者存儲模塊也可以定時將存儲的數(shù)據(jù)和數(shù)據(jù)產(chǎn)生時間進(jìn)行同步。例如,設(shè)定一個同步周期,同時,生產(chǎn)者存儲模塊在存儲數(shù)據(jù)時記錄下數(shù)據(jù)和對應(yīng)生產(chǎn)時間的存儲時間,例如以時間戳的方式記錄下數(shù)據(jù)的存儲時間。在當(dāng)前同步周期到達(dá)時,生產(chǎn)者存儲模塊根據(jù)時間戳識別出在上一個同步周期與當(dāng)前不同周期之間存儲的數(shù)據(jù)和對應(yīng)的生產(chǎn)時間,將識別出的數(shù)據(jù)和 對應(yīng)的生產(chǎn)時間進(jìn)行同步。進(jìn)一步優(yōu)選的,在本地子系統(tǒng)的生產(chǎn)者模塊將數(shù)據(jù)和對應(yīng)的生產(chǎn)日期都寫入生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊的情況下,當(dāng)生產(chǎn)者存儲模塊將存儲的數(shù)據(jù)對遠(yuǎn)程子系統(tǒng)的消費(fèi)者存儲模塊進(jìn)行同步后,遠(yuǎn)程子系統(tǒng)的消費(fèi)者模塊就會按照數(shù)據(jù)的生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。因此,所述遠(yuǎn)程子系統(tǒng)的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理包括位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),按照數(shù)據(jù)的生產(chǎn)時間對讀取的數(shù)據(jù)進(jìn)行排序;位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊按照生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。顯然,這樣可以實(shí)現(xiàn)數(shù)據(jù)處理的順序性。需要說明的是,無論是本地子系統(tǒng)還是位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng),消費(fèi)者模塊從消費(fèi)者存儲模塊讀取數(shù)據(jù)的流程與生產(chǎn)者模塊向生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊寫入的數(shù)據(jù)的流程沒有嚴(yán)格的先后順序關(guān)系,即,讀取數(shù)據(jù)的過程和寫入數(shù)據(jù)的過程是并發(fā)進(jìn)行的。當(dāng)采用監(jiān)測方式實(shí)現(xiàn)數(shù)據(jù)同步時,生產(chǎn)者模塊向生產(chǎn)者存儲模塊寫入數(shù)據(jù)的流程與生產(chǎn)者存儲模塊同步數(shù)據(jù)的流程具有確定的先后順序,當(dāng)采用定時方式實(shí)現(xiàn)數(shù)據(jù)同步時,數(shù)據(jù)寫入的過程和同步的過程也是并發(fā)進(jìn)行的。最后,需要說明的是,在本申請的技術(shù)方案中,“本地子系統(tǒng)”和“位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的”僅僅是一個相對概念。可以明確的是,在本申請的分布式系統(tǒng)中,任意一個子系統(tǒng)都可以是本地子系統(tǒng)。由上述實(shí)施例可以看出,與現(xiàn)有技術(shù)相比,本申請具有如下優(yōu)點(diǎn)分布式系統(tǒng)中分別位于不同數(shù)據(jù)中心的每個子系統(tǒng)同時包括生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊,位于一個數(shù)據(jù)中心的子系統(tǒng)中的生產(chǎn)者存儲模塊跨越數(shù)據(jù)中心向位于其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊進(jìn)行數(shù)據(jù)同步,依次實(shí)現(xiàn)各個子系統(tǒng)之間的交叉同步,最終保證整個分布式系統(tǒng)的數(shù)據(jù)同步,從而能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。并且,對于每個子系統(tǒng)而言,向外進(jìn)行數(shù)據(jù)同步過程和接受外面的數(shù)據(jù)同步過程可以并發(fā)執(zhí)行,提高了整個分布式系統(tǒng)的工作效率。實(shí)施例三下面針對圖2中僅包含兩個子系統(tǒng)A和B的分布式系統(tǒng),假設(shè)A為本地子系統(tǒng),B為位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng),詳細(xì)說明在分布式系統(tǒng)中A對B進(jìn)行數(shù)據(jù)同步的方法。B對A的同步與A對B的同步相同,在本實(shí)施例中就不再重復(fù)描述。最終A與B之間實(shí)現(xiàn)交叉同步,達(dá)到整個分布式系統(tǒng)的數(shù)據(jù)同步。請參閱圖7,其為本申請一種分布式系統(tǒng)中子系統(tǒng)A對子系統(tǒng)B進(jìn)行數(shù)據(jù)同步的方法的流程圖,包括以下步驟步驟701 :子系統(tǒng)A中的生產(chǎn)者生產(chǎn)數(shù)據(jù),并記錄數(shù)據(jù)的生產(chǎn)時間;步驟702 :子系統(tǒng)A中的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)和記錄的數(shù)據(jù)生產(chǎn)時間寫入到子系統(tǒng)A中的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊;步驟703 :子系統(tǒng)A中的生產(chǎn)者存儲模塊監(jiān)測是否有數(shù)據(jù)寫入;步驟704:當(dāng)監(jiān)測到當(dāng)前有數(shù)據(jù)寫入時,子系統(tǒng)A中的生產(chǎn)者存儲模塊將當(dāng)前寫入的數(shù)據(jù)和對應(yīng)的生產(chǎn)時間同步到子系統(tǒng)B中的消費(fèi)者存儲模塊;
步驟705 :子系統(tǒng)B中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),按照數(shù)據(jù)的生產(chǎn)時間對讀取的數(shù)據(jù)進(jìn)行排序;步驟706 :子系統(tǒng)B的消費(fèi)者模塊按照生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。由上述實(shí)施例可以看出,與現(xiàn)有技術(shù)相比,本申請具有如下優(yōu)點(diǎn)分布式系統(tǒng)中分別位于不同數(shù)據(jù)中心的每個子系統(tǒng)同時包括生產(chǎn)者存儲模塊和消費(fèi)者存儲模塊,位于一個數(shù)據(jù)中心的子系統(tǒng)中的生產(chǎn)者存儲模塊跨越數(shù)據(jù)中心向位于其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊進(jìn)行數(shù)據(jù)同步,依次實(shí)現(xiàn)各個子系統(tǒng)之間的交叉同步,最終保證整個分布式系統(tǒng)的數(shù)據(jù)同步,從而能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。并且,對于每個子系統(tǒng)而言,向外進(jìn)行數(shù)據(jù)同步過程和接受外面的數(shù)據(jù)同步過程可以并發(fā)執(zhí)行,提高了整個分布式系統(tǒng)的工作效率。以上對本申請所提供的一種分布式系統(tǒng)中的數(shù)據(jù)同步方法和分布式系統(tǒng)進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體實(shí)施例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,在不脫離本發(fā)明描述的原理前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種分布式系統(tǒng),其特征在于,包括至少兩個子系統(tǒng),每個子系統(tǒng)分別位于不同的數(shù)據(jù)中心上,其中,每個子系統(tǒng)包括消費(fèi)者模塊、生產(chǎn)者模塊、消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊,在位于任意一個數(shù)據(jù)中心的子系統(tǒng)中, 生產(chǎn)者模塊,用于生產(chǎn)數(shù)據(jù),將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊; 消費(fèi)者模塊,用于從本地子系統(tǒng)的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理; 生產(chǎn)者存儲模塊,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù),向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù); 消費(fèi)者存儲模塊,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù)和位于本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中的子系統(tǒng)中的生產(chǎn)者存儲模塊同步的數(shù)據(jù)。
2.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述生產(chǎn)者存儲模塊為一個主數(shù)據(jù)庫,所述消費(fèi)者存儲模塊為一個從數(shù)據(jù)庫,所述主數(shù)據(jù)庫將存儲的數(shù)據(jù)復(fù)制到所述從數(shù)據(jù)庫中。
3.根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述主數(shù)據(jù)庫和從數(shù)據(jù)庫包括SQLServer數(shù)據(jù)庫、OracIe Server數(shù)據(jù)庫、Mysql數(shù)據(jù)庫、Sybase ASE數(shù)據(jù)庫或者DB2數(shù)據(jù)庫。
4.根據(jù)權(quán)利要求I所述的系統(tǒng),其特征在于,所述生產(chǎn)者存儲模塊包括存儲子模塊,監(jiān)聽子模塊和同步子模塊,其中, 所述存儲子模塊,用于存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù); 所述監(jiān)聽子模塊,用于監(jiān)測存儲子模塊是否有數(shù)據(jù)寫入,如果是,啟動所述同步子模塊,否則,繼續(xù)監(jiān)測存儲子模塊; 所述同步子模塊,用于將所述存儲子模塊存儲的數(shù)據(jù)寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中的子系統(tǒng)中的消費(fèi)者存儲模塊中。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述存儲子模塊包括隊列緩沖區(qū)或者環(huán)形緩沖區(qū)。
6.根據(jù)權(quán)利要求1-5中的任意一項(xiàng)所述的系統(tǒng),其特征在于,生產(chǎn)者模塊還包括記錄子模塊和時間寫入子模塊,其中, 記錄子模塊,用于記錄數(shù)據(jù)的生產(chǎn)時間; 時間寫入子模塊,用于將數(shù)據(jù)的生產(chǎn)時間一同寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述消費(fèi)者存儲模塊包括 排序子模塊,用于從本地子系統(tǒng)的消費(fèi)者存儲模塊中讀取數(shù)據(jù),按照數(shù)據(jù)的生產(chǎn)時間對讀取的數(shù)據(jù)進(jìn)行排序; 處理子模塊,用于按照生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。
8.一種分布式系統(tǒng)中的數(shù)據(jù)同步方法,其特征在于,包括 本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊; 本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù),以便位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊包括 本地子系統(tǒng)的生產(chǎn)者模塊在生產(chǎn)數(shù)據(jù)的同時,記錄數(shù)據(jù)的生產(chǎn)時間; 本地子系統(tǒng)的生產(chǎn)者模塊將生產(chǎn)的數(shù)據(jù)和數(shù)據(jù)的生產(chǎn)時間寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊。
10.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于本地直通所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù)包括 本地子系統(tǒng)的生產(chǎn)者存儲模塊監(jiān)測是否有數(shù)據(jù)寫入; 一旦監(jiān)測到有數(shù)據(jù)寫入,本地子系統(tǒng)的生產(chǎn)者存儲模塊將當(dāng)前寫入的數(shù)據(jù)寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊中。
11.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述本地子系統(tǒng)的生產(chǎn)者存儲模塊向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù)包括 本地子系統(tǒng)的生產(chǎn)者存儲模塊監(jiān)測是否有數(shù)據(jù)寫入; 一旦監(jiān)測到有數(shù)據(jù)寫入,本地子系統(tǒng)的生產(chǎn)者存儲模塊將當(dāng)前寫入的數(shù)據(jù)和數(shù)據(jù)的生產(chǎn)時間寫入到位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊中。
12.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述遠(yuǎn)程子系統(tǒng)的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理包括 位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊從同步后的消費(fèi)者存儲模塊中讀取數(shù)據(jù),按照數(shù)據(jù)的生產(chǎn)時間對讀取的數(shù)據(jù)進(jìn)行排序; 位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者模塊按照生產(chǎn)時間的先后順序?qū)?shù)據(jù)進(jìn)行處理。
全文摘要
本申請實(shí)施例公開了一種分布式系統(tǒng)中的數(shù)據(jù)同步方法和分布式系統(tǒng)。分布式系統(tǒng)包括至少兩個子系統(tǒng),每個子系統(tǒng)分別位于不同的數(shù)據(jù)中心上,其中,每個子系統(tǒng)包括消費(fèi)者模塊、生產(chǎn)者模塊、消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊,在位于任意一個數(shù)據(jù)中心的子系統(tǒng)中,生產(chǎn)者模塊生產(chǎn)數(shù)據(jù),將生產(chǎn)的數(shù)據(jù)寫入到本地子系統(tǒng)的消費(fèi)者存儲模塊和生產(chǎn)者存儲模塊;消費(fèi)者模塊從本地子系統(tǒng)的消費(fèi)者存儲模塊中讀取數(shù)據(jù),對讀取的數(shù)據(jù)進(jìn)行處理;生產(chǎn)者存儲模塊存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù),向位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)中的消費(fèi)者存儲模塊同步所存儲的數(shù)據(jù);消費(fèi)者存儲模塊存儲本地子系統(tǒng)的生產(chǎn)者模塊寫入的數(shù)據(jù)和位于除本地子系統(tǒng)所在的數(shù)據(jù)中心之外的其它數(shù)據(jù)中心的子系統(tǒng)的生產(chǎn)者存儲模塊同步的數(shù)據(jù)。根據(jù)本申請實(shí)施例,能夠支持本地的消費(fèi)者對遠(yuǎn)程的生產(chǎn)者生產(chǎn)的數(shù)據(jù)進(jìn)行處理。
文檔編號G06F17/30GK102760126SQ201110105169
公開日2012年10月31日 申請日期2011年4月26日 優(yōu)先權(quán)日2011年4月26日
發(fā)明者李彥超, 李智慧, 李鼎, 潘磊, 雷繼斌 申請人:阿里巴巴集團(tuán)控股有限公司