專利名稱:用于成簇系統(tǒng)的德耳塔對(duì)象復(fù)制系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及成簇計(jì)算機(jī)系統(tǒng)技術(shù)。其找到了對(duì)具有數(shù)據(jù)復(fù)制系統(tǒng)的成簇系統(tǒng)和方法的特別應(yīng)用。
背景技術(shù):
一簇是一組應(yīng)用服務(wù)器實(shí)例,運(yùn)行于獨(dú)立的服務(wù)器上,并被配置成共同運(yùn)行以產(chǎn)生比單個(gè)實(shí)例可以提供的可擴(kuò)展性和可用性更高的可擴(kuò)展性和可用性。雖然單個(gè)應(yīng)用服務(wù)器實(shí)例僅可以影響單個(gè)主機(jī)的運(yùn)行資源,但是一簇可以橫跨多個(gè)主機(jī),從而將應(yīng)用程序執(zhí)行分布到多個(gè)CPU上。雖然單個(gè)應(yīng)用服務(wù)器實(shí)例易受其主機(jī)和操作系統(tǒng)的故障的影響,但是一簇可以繼續(xù)工作而不管操作系統(tǒng)或主機(jī)的故障,從而向客戶隱藏了任何這樣的故障。
在成簇的企業(yè)應(yīng)用程序中,服務(wù)器被配置成用于存儲(chǔ)器內(nèi)復(fù)制的多播狀態(tài)(會(huì)話)。這確保了在一個(gè)服務(wù)器失敗時(shí),客戶立即轉(zhuǎn)向已經(jīng)備份了所有其他狀態(tài)的服務(wù)器。因此,繼續(xù)進(jìn)行交易,而沒有中斷。
在現(xiàn)有系統(tǒng)中,通過將全部狀態(tài)和對(duì)象從一個(gè)服務(wù)器復(fù)制到另一個(gè),來執(zhí)行存儲(chǔ)器內(nèi)復(fù)制。在Enterprise Java Beans(EJB)調(diào)用結(jié)束(end-of-call)復(fù)制配置,每次對(duì)象被改變,其全部?jī)?nèi)容通過多播被廣播給網(wǎng)絡(luò),并被另一個(gè)服務(wù)器復(fù)制。雖然這不會(huì)造成關(guān)于小對(duì)象復(fù)制的問題,但是對(duì)于對(duì)象大的情況下的應(yīng)用,它可能造成網(wǎng)絡(luò)擁塞。由于多播協(xié)議傾向于丟掉消息而使得網(wǎng)絡(luò)通信量可能進(jìn)一步提高。當(dāng)消息被丟掉時(shí),它們需要被重發(fā),從而進(jìn)一步提高了存取等待時(shí)間。因此,隨著所發(fā)送的數(shù)據(jù)量增加,丟掉消息的概率增加,這造成數(shù)據(jù)的額外重傳。
本發(fā)明提供一種新且有用的對(duì)象復(fù)制方法和系統(tǒng),其解決了上述問題。
發(fā)明內(nèi)容
在一個(gè)實(shí)施例中,在第一計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)器內(nèi)對(duì)象和第二計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)器內(nèi)對(duì)象的復(fù)制狀態(tài)的成簇?cái)?shù)據(jù)處理系統(tǒng)中,提供了用于復(fù)制存儲(chǔ)器內(nèi)對(duì)象的當(dāng)前狀態(tài)的系統(tǒng)。該系統(tǒng)包括在第一計(jì)算機(jī)系統(tǒng)中保持的存儲(chǔ)器內(nèi)對(duì)象的前次復(fù)制的狀態(tài)。差別邏輯確定了當(dāng)前狀態(tài)和前次復(fù)制的狀態(tài)之間的差值。通信邏輯可以將該差值發(fā)送到第二計(jì)算機(jī)系統(tǒng),以使用該差值修改復(fù)制狀態(tài)(replica state)。
根據(jù)另一實(shí)施例,提供了一種用于在成簇?cái)?shù)據(jù)處理系統(tǒng)中的節(jié)點(diǎn)之間交換對(duì)象數(shù)據(jù)的方法。該方法包括在成簇?cái)?shù)據(jù)處理系統(tǒng)中的第一節(jié)點(diǎn)中的存儲(chǔ)器中保持對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)。在修改了對(duì)象數(shù)據(jù)的一部分之后,確定被修改的部分。然后,將被修改的部分發(fā)送到一個(gè)或多個(gè)成簇?cái)?shù)據(jù)處理系統(tǒng)中的其他節(jié)點(diǎn),以便復(fù)制該對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)。
在合并到本說明書中并構(gòu)成本說明書的一部分的附圖中,圖示了系統(tǒng)和方法的實(shí)施例,其以及詳細(xì)描述在下文中給出,用于描述系統(tǒng)和方法的示例實(shí)施例。應(yīng)當(dāng)理解圖中的單元(框或框組)的所示邊界表示邊界的一個(gè)示例。本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解可將一個(gè)單元設(shè)計(jì)為多個(gè)單元,或者可將多個(gè)單元設(shè)計(jì)為一個(gè)單元??蓪⒆鳛榱硪粏卧膬?nèi)部部件示出的單元實(shí)現(xiàn)為外部部件,且反之亦然。
圖1是根據(jù)本發(fā)明的具有復(fù)制系統(tǒng)的成簇系統(tǒng)的一個(gè)實(shí)施例的示例系統(tǒng);圖2是在簇節(jié)點(diǎn)內(nèi)的復(fù)制系統(tǒng)的另一個(gè)實(shí)施例的圖;圖3是將數(shù)據(jù)復(fù)制到故障修復(fù)(failover)節(jié)點(diǎn)的示例方法學(xué);以及圖4是在故障修復(fù)節(jié)點(diǎn)內(nèi)復(fù)制數(shù)據(jù)的示例方法學(xué)。
具體實(shí)施例方式
下面包括貫穿本公開文本使用的所選術(shù)語的定義。所有術(shù)語的單一和多種形式都屬于每個(gè)含義如在此使用的“計(jì)算機(jī)可讀介質(zhì)”指的是任何介質(zhì),其參與直接或間接提供指令和/或數(shù)據(jù)給處理器以便執(zhí)行。這樣的介質(zhì)可以采用多種形式,包括,但不限于,非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。非易失性介質(zhì)可包括,例如,光盤或磁盤。易失性介質(zhì)可包括動(dòng)態(tài)存儲(chǔ)器。傳輸介質(zhì)可包括同軸電纜、銅線和光纜。傳輸介質(zhì)還可以采用聲波或光波的形式,諸如在無線電波和紅外數(shù)據(jù)通信期間產(chǎn)生的那些波的形式。計(jì)算機(jī)可讀介質(zhì)的常見形式包括,例如,軟盤、軟碟、硬盤、磁帶、或任何其他磁介質(zhì)、CD-ROM、任何其他光介質(zhì)、打孔卡、紙帶、具有孔圖案的任何其他物理介質(zhì)、RAM、PROM、EPROM、FLASH-EPROM、任何其他存儲(chǔ)芯片或卡式磁帶、載波/脈沖、或任何其他計(jì)算機(jī)可讀的介質(zhì)形式。
如在此使用的“邏輯”包括,但不限于,硬件、固件、軟件和/或每個(gè)的組合,以執(zhí)行(多個(gè))功能或(多個(gè))動(dòng)作,和/或引起來自另一部件的功能或動(dòng)作。例如,基于所期望的應(yīng)用或需要,邏輯可以包括軟件控制的微處理器、諸如專門用途集成電路(ASIC)的離散邏輯、或其他編程邏輯器件。邏輯也可完全體現(xiàn)為軟件。
如在此使用的“信號(hào)”包括,但不限于,一種或多種電信號(hào)、模擬或數(shù)字信號(hào)、一個(gè)或多個(gè)計(jì)算機(jī)指令、消息、比特或比特流、或可以被接收、發(fā)送、和/或檢測(cè)的其他手段。
如在此使用的“軟件”包括,但不限于,一種或多種計(jì)算機(jī)可讀和/或可執(zhí)行指令,其使計(jì)算機(jī)或其他電子設(shè)備以期望的方式執(zhí)行功能、動(dòng)作,和/或行為??梢砸愿鞣N形式,諸如例程、算法、模塊或包括來自動(dòng)態(tài)鏈接庫的單獨(dú)應(yīng)用程序或代碼的程序來體現(xiàn)指令。也可以以各種形式,諸如獨(dú)立程序、函數(shù)調(diào)用、servlet、applet、存儲(chǔ)在存儲(chǔ)器中的指令、部分操作系統(tǒng)或其他類型的可執(zhí)行指令來實(shí)現(xiàn)軟件。本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)理解軟件的形式依賴于,例如,期望應(yīng)用軟件的需求、其運(yùn)行的環(huán)境、和/或設(shè)計(jì)人/程序員的期望等。
如在此使用的“用戶”包括,但不限于,一個(gè)或多個(gè)人、軟件、計(jì)算機(jī)或其他設(shè)備、或其組合。
圖1所示的是成簇處理系統(tǒng)100的一個(gè)實(shí)施例。每個(gè)節(jié)點(diǎn)105包括復(fù)制系統(tǒng),其通過發(fā)送復(fù)制指令而不是整個(gè)對(duì)象,將存儲(chǔ)器內(nèi)對(duì)象復(fù)制到其他節(jié)點(diǎn)。一般而言,一簇是一組獨(dú)立服務(wù)器或節(jié)點(diǎn)105,其合稱為單個(gè)系統(tǒng)。簇部件可以包括一個(gè)或多個(gè)諸如服務(wù)器1-n的處理器節(jié)點(diǎn),提供點(diǎn)對(duì)點(diǎn)通信的簇互聯(lián)(專用網(wǎng)),和在一個(gè)或多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備上保持共享的數(shù)據(jù)文件的存儲(chǔ)子系統(tǒng)(未示出)。服務(wù)器可以共享盤存取和管理共享的數(shù)據(jù)文件的資源。每個(gè)節(jié)點(diǎn)105可以是具有其自己的專用系統(tǒng)存儲(chǔ)器以及其自己的操作系統(tǒng)和應(yīng)用軟件的獨(dú)立計(jì)算機(jī)系統(tǒng)。應(yīng)當(dāng)理解可以在簇中使用不同數(shù)量的節(jié)點(diǎn)105,可以以不同的配置將其成簇,并且每個(gè)節(jié)點(diǎn)可以具有與其他節(jié)點(diǎn)不同的配置。簇可以提供改善的故障恢復(fù)力和超過單個(gè)對(duì)稱多處理器系統(tǒng)的模塊化增量系統(tǒng)(modular incremental system)增長(zhǎng)。在子系統(tǒng)故障的情況下,成簇確保了高可用性。諸如附加節(jié)點(diǎn)、互聯(lián)和共享盤的冗余硬件提供了更高的可用性。這樣的冗余硬件體系結(jié)構(gòu)避免了單點(diǎn)故障,并且提供了故障恢復(fù)力。
在一個(gè)實(shí)施例中,一個(gè)或多個(gè)客戶/用戶可通過負(fù)載均衡器(未示出)來訪問簇100,該負(fù)載均衡器被編程來將客戶請(qǐng)求發(fā)送到簇100中的節(jié)點(diǎn)105中的任何應(yīng)用服務(wù)器。負(fù)載均衡器可以是單獨(dú)的服務(wù)器或者在一個(gè)或多個(gè)節(jié)點(diǎn)105中的軟件子系統(tǒng)??蛻艨梢酝ㄟ^互聯(lián)網(wǎng)、內(nèi)部網(wǎng)或其他通信網(wǎng)絡(luò)來訪問簇。
還參照?qǐng)D1,示出了具有數(shù)據(jù)復(fù)制系統(tǒng)的節(jié)點(diǎn)105的簡(jiǎn)化的示例配置。在該示例中,節(jié)點(diǎn)105可以被配置成在諸如Java 2Enterprise Edition(J2EE)平臺(tái)、Microsoft.NET平臺(tái)或其他期望平臺(tái)上執(zhí)行商用企業(yè)應(yīng)用程序。因此,成簇的系統(tǒng)100包括所選平臺(tái)的成簇企業(yè)應(yīng)用程序。下面的描述將基于J2EE平臺(tái)。當(dāng)然,可以使用其他類型的軟件產(chǎn)品和應(yīng)用程序,而不是商用企業(yè)應(yīng)用程序。該系統(tǒng)還可以包括成簇?cái)?shù)據(jù)庫系統(tǒng)。還可以在諸如UNIX、Windows、Linux或其他可用系統(tǒng)的各種操作系統(tǒng)上實(shí)現(xiàn)該系統(tǒng)。
每個(gè)節(jié)點(diǎn)105可以是應(yīng)用服務(wù)器,其通過軟件來配置和編程以提供J2EE環(huán)境,其被典型地稱為J2EE的容器。一個(gè)示例是用于Java(OC4J)軟件的Oracle容器??梢跃哂幸粋€(gè)或多個(gè)容器實(shí)例的容器用Java來編程,并在標(biāo)準(zhǔn)JavaDevelopment Kit(JDK)虛擬機(jī)上執(zhí)行。該JDK虛擬機(jī)提供了J2EE環(huán)境,其可包括多種特征,諸如Java Server Page(JSP)譯碼器、Servlet引擎、Enterprise JavaBeans(EJB)容器,和其他J2EE服務(wù),諸如JNDL、Java Database Connectivity(JDBC)、Java Message Service(JMS)等。
節(jié)點(diǎn)105包括復(fù)制邏輯105,用于控制對(duì)象的復(fù)制,該對(duì)象可以在應(yīng)用程序容器內(nèi)。將數(shù)據(jù)復(fù)制到簇中的另一個(gè)節(jié)點(diǎn)創(chuàng)建了故障修復(fù)實(shí)例,從而如果由于任何原因而中斷了處理,則還可以繼續(xù)處理??梢詮?fù)制將被稱為對(duì)象的服務(wù)器實(shí)例105的任何部分,包括服務(wù)器實(shí)例105的全部狀態(tài)、任何容器實(shí)例、一個(gè)或多個(gè)容器過程及其組合。對(duì)象內(nèi)的數(shù)據(jù)將被通稱為對(duì)象數(shù)據(jù)或?qū)嵗龜?shù)據(jù)。
還參照?qǐng)D1,由服務(wù)器1中的應(yīng)用程序容器在存儲(chǔ)器內(nèi)保持對(duì)象110。例如,對(duì)象110保持用于活動(dòng)過程的數(shù)據(jù),諸如金融交易數(shù)據(jù)、購(gòu)物車數(shù)據(jù)和歷史、用戶偏好等。由于用戶改變了數(shù)據(jù),所以修改對(duì)象110,從而改變其自己的狀態(tài)。為了在簇系統(tǒng)100中提供故障修復(fù)能力,將對(duì)象110的當(dāng)前狀態(tài)復(fù)制到簇中的其他服務(wù)器,以用作備份??梢栽谄谕臅r(shí)間或以期望的頻率復(fù)制對(duì)象數(shù)據(jù),但是典型地,在每次其狀態(tài)被改變時(shí)復(fù)制對(duì)象數(shù)據(jù)。為了復(fù)制狀態(tài),復(fù)制邏輯115從對(duì)象110收集數(shù)據(jù),并確定當(dāng)前狀態(tài)和前次復(fù)制的狀態(tài)之間的差別。該差別將被稱為差值或差數(shù)據(jù)。
這假設(shè)先前已經(jīng)復(fù)制和存儲(chǔ)了對(duì)象狀態(tài)。然后將該差別發(fā)送到簇中的其他服務(wù)器,其每一個(gè)將使用該差別來更新其復(fù)制狀態(tài)的版本。每個(gè)服務(wù)器還包括復(fù)制邏輯115以執(zhí)行該復(fù)制。由于不發(fā)送整個(gè)對(duì)象狀態(tài),所以發(fā)送該差別可以減少網(wǎng)絡(luò)通信量。在大的對(duì)象狀態(tài)僅改變其數(shù)據(jù)的一小部分的情況下,這是最引人注意的。
為了允許其他服務(wù)器正確地產(chǎn)生復(fù)制狀態(tài),復(fù)制邏輯115a還可以產(chǎn)生一個(gè)或多個(gè)復(fù)制指令125。這些指令與差別數(shù)據(jù)相關(guān)聯(lián)并和其一起被發(fā)送。例如,這些指令指示接收節(jié)點(diǎn)105的復(fù)制邏輯115-n怎樣修改或更新其復(fù)制狀態(tài)120b-n,從而其變?yōu)楫?dāng)前對(duì)象狀態(tài)120a的相同復(fù)制。以此方式,不必在復(fù)制期間發(fā)送整個(gè)對(duì)象狀態(tài)120a。復(fù)制指令可以包括每個(gè)修改部分的位置、修改數(shù)據(jù)的內(nèi)容、從復(fù)制狀態(tài)120b-n中添加/刪除數(shù)據(jù)的指令、和/或其他修改復(fù)制狀態(tài)120b-n的指令。通過僅發(fā)送當(dāng)前對(duì)象狀態(tài)120a的修改數(shù)據(jù),網(wǎng)絡(luò)通信量以及系統(tǒng)等待時(shí)間被降低。
如圖2所示的是用來復(fù)制成簇處理系統(tǒng)中的存儲(chǔ)器內(nèi)對(duì)象205的復(fù)制系統(tǒng)200的另一實(shí)施例。成簇系統(tǒng)中的每個(gè)服務(wù)器具有復(fù)制系統(tǒng)200或類似的實(shí)施例,從而每個(gè)服務(wù)器可以將其自己的存儲(chǔ)器內(nèi)對(duì)象復(fù)制到其他服務(wù)器,并接收來自其他服務(wù)器的復(fù)制數(shù)據(jù)。應(yīng)當(dāng)理解發(fā)送數(shù)據(jù)的格式是預(yù)定的,從而每個(gè)復(fù)制邏輯正確地處理數(shù)據(jù)。下面描述這樣的格式的示例。
在J2EE環(huán)境中,諸如Enterprise Java Beans(EJB)對(duì)象的對(duì)象被保持為邏輯或抽象數(shù)據(jù),包括指針、地址和/或其他識(shí)別屬于該對(duì)象的數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)分量??梢詫?shù)據(jù)物理地存儲(chǔ)在分離的多個(gè)位置。典型地,當(dāng)前的通信協(xié)議不允許以該類型的邏輯形式發(fā)送數(shù)據(jù)。相反地,對(duì)象數(shù)據(jù)205被轉(zhuǎn)換成可發(fā)送的形式,諸如一個(gè)或多個(gè)字節(jié)數(shù)組。例如,每次存儲(chǔ)器內(nèi)對(duì)象205將被復(fù)制時(shí),串行化邏輯使數(shù)據(jù)串行化,并存儲(chǔ)該串行化的形式作為當(dāng)前對(duì)象狀態(tài)215。該串行化邏輯可以是復(fù)制邏輯210的部分,或者作為單個(gè)邏輯從復(fù)制邏輯210調(diào)用它。
與當(dāng)前對(duì)象狀態(tài)215保持在一起的還有對(duì)象205的前次復(fù)制的狀態(tài)220。換言之,狀態(tài)220表示被復(fù)制到其他服務(wù)器的前次狀態(tài)。當(dāng)然,在第一次復(fù)制對(duì)象205時(shí),前次復(fù)制的狀態(tài)220不存在或?yàn)榭铡H缟纤?,通過發(fā)送對(duì)對(duì)象205做了改變的數(shù)據(jù)(其可以被稱為德耳塔(delta)對(duì)象),復(fù)制系統(tǒng)降低了要復(fù)制到簇中的其他節(jié)點(diǎn)的數(shù)據(jù)量。在該實(shí)施例中,通過從對(duì)象的當(dāng)前狀態(tài)215及其前次狀態(tài)220確定差別,來識(shí)別對(duì)對(duì)象205所作的改變。
為了確定delta對(duì)象或當(dāng)前對(duì)象狀態(tài)215的修改部分,差別邏輯225分析當(dāng)前狀態(tài)215和前次復(fù)制的狀態(tài)220之間的數(shù)據(jù)。確定狀態(tài)之間的差別可以以多種方式來執(zhí)行。例如在一個(gè)實(shí)施例中,差別邏輯225可以逐比特地比較每個(gè)狀態(tài)中的數(shù)據(jù),以確定已經(jīng)改變了什么數(shù)據(jù)。在另一個(gè)實(shí)施例中,可以將差別算法應(yīng)用于前次和當(dāng)前對(duì)象狀態(tài),以確定更直接的差別。這樣的算法可以包括最長(zhǎng)公共子序列算法(longest common subsequences algorithm)、修改控制系統(tǒng)(revision control system)、或者其他用于確定數(shù)據(jù)之間的差別的算法。前次狀態(tài)220和當(dāng)前狀態(tài)215之間的差別被識(shí)別并被復(fù)制為一組差別數(shù)據(jù)235,其被發(fā)送到簇中的其他節(jié)點(diǎn)以便復(fù)制。這降低了網(wǎng)絡(luò)負(fù)載。例如,如果對(duì)象狀態(tài)數(shù)組中的一個(gè)比特被修改,不必發(fā)送整個(gè)數(shù)組以便復(fù)制。相反,在簇中的節(jié)點(diǎn)包含數(shù)組的前次復(fù)制狀態(tài)時(shí),節(jié)點(diǎn)可以通過接收修改的比特來更新復(fù)制狀態(tài)。
還參照?qǐng)D2,編碼/解碼邏輯230產(chǎn)生要與差別數(shù)據(jù)235一起發(fā)送的指令,其用于指示接收節(jié)點(diǎn)關(guān)于怎樣使用新的差別數(shù)據(jù)235來修改其復(fù)制狀態(tài)。為了解釋的目的,術(shù)語復(fù)制數(shù)據(jù)將被用于表示其他節(jié)點(diǎn)上為了復(fù)制而被發(fā)送的數(shù)據(jù)。該數(shù)據(jù)包括差別數(shù)據(jù)235,并且可以包括附加信息,諸如報(bào)頭信息、用于更新復(fù)制狀態(tài)的復(fù)制指令、和/或其它可能為所使用的通信協(xié)議所需的數(shù)據(jù)。因此,當(dāng)節(jié)點(diǎn)接收復(fù)制數(shù)據(jù)時(shí),其內(nèi)部編碼/解碼邏輯解碼該數(shù)據(jù),以確定差別數(shù)據(jù)是什么數(shù)據(jù)和哪些復(fù)制指令與該差別數(shù)據(jù)相關(guān)聯(lián)。根據(jù)復(fù)制指令,使用差別數(shù)據(jù)來更新在該節(jié)點(diǎn)內(nèi)的預(yù)先存在的復(fù)制狀態(tài),從而復(fù)制對(duì)象205的當(dāng)前狀態(tài)。然后,可以將對(duì)象205從對(duì)象狀態(tài)的串行化形式重新創(chuàng)建為其邏輯形式,以便可以將其使用為故障修復(fù)對(duì)象。
作為一個(gè)示例,假設(shè)如下設(shè)置對(duì)象s1String s1[]=new String[2];s1
=”abcde”??梢允褂美鏙ava的ObjectOutputStream來將對(duì)象串行化為字節(jié)數(shù)組表示,如數(shù)組1所示-84-1905ur01991Ljava46lang46String 59-83-46V-25-2329123G200xp0002t05abcdep在接近字節(jié)數(shù)組的末端,“t05”是Java代碼,意指下面是有“05”個(gè)字母的文本“t”字符串,這5個(gè)字母是“abcde”。在下面的改變s2[1]=”123”時(shí),新的字節(jié)數(shù)組表示可以如數(shù)組2所示-84-1905ur01991Ljava46lang46String59-83-46V-25-2329123G200xp0002t05abcdet03123在字節(jié)數(shù)組的末端示出“t03”,其指示下面3個(gè)字母是文本。為了復(fù)制而通過網(wǎng)絡(luò)發(fā)送的更新的對(duì)象將會(huì)是六十一(61)個(gè)字節(jié)數(shù)據(jù)。但是運(yùn)行如上所述的差別邏輯225算法將確定數(shù)組1和數(shù)組2之間的差別并產(chǎn)生復(fù)制指令。例如,復(fù)制指令可以是“Change byte 55(p)to 55-60(t03123)”。這使用偽代碼格式來指示具有值“p”的字節(jié)位置55要被改變?yōu)槲挥谧止?jié)位置55-60的“t03123”。當(dāng)然,可以使用其他格式的指令代碼,諸如人類可讀代碼、機(jī)器可讀代碼、或這二者的組合。當(dāng)指令被節(jié)點(diǎn)接收到時(shí),該節(jié)點(diǎn)將基于該指令修改該對(duì)象的預(yù)先存在的狀態(tài)(其為數(shù)組1)以獲得數(shù)組2(對(duì)象的新狀態(tài))。以任意格式編碼的復(fù)制指令將少于十(10)個(gè)字節(jié),這與發(fā)送整個(gè)數(shù)組2相比帶來了網(wǎng)絡(luò)上的顯著節(jié)約。
為了控制簇中的節(jié)點(diǎn)之間的通信,每個(gè)節(jié)點(diǎn)包括通信邏輯240,用于在其間發(fā)送和接收數(shù)據(jù)??梢允褂枚喾N通信協(xié)議,例如,將數(shù)據(jù)廣播到網(wǎng)絡(luò)中的所有節(jié)點(diǎn)的多播協(xié)議。也可以通過識(shí)別數(shù)據(jù)要發(fā)送到的地址或其他網(wǎng)絡(luò)標(biāo)識(shí)符將數(shù)據(jù)發(fā)送到指定節(jié)點(diǎn)。
如圖3所示的是與成簇系統(tǒng)中的對(duì)象的復(fù)制相關(guān)聯(lián)的方法300的一個(gè)實(shí)施例。所示單元表示“處理塊”,并且表示計(jì)算機(jī)軟件指令或指令組,其使計(jì)算機(jī)執(zhí)行動(dòng)作和/或做出決定??蛇x地,處理塊可以表示由功能相同的電路,諸如數(shù)字信號(hào)處理器電路、專門用途集成電路(ASIC)、或其他邏輯器件執(zhí)行的功能和/或動(dòng)作。該圖以及其他所示的圖沒有描述任何特定編程語言的句法。相反,該示了本領(lǐng)域技術(shù)人員用來構(gòu)成電路、產(chǎn)生計(jì)算機(jī)軟件或使用硬件和軟件的組合來執(zhí)行所示的處理的功能信息。應(yīng)當(dāng)理解電子和軟件應(yīng)用可以包括動(dòng)態(tài)和靈活的處理,從而所示的塊可以以不同于所示的順序的其他順序來執(zhí)行和/或塊可以被組合、或者被分割成多個(gè)部件。它們還可以使用各種編程方法,諸如機(jī)器語言、過程的、面向?qū)ο蟮暮?或人工智能技術(shù)來實(shí)現(xiàn)。前述應(yīng)用于在此描述的所有方法。
圖3示出了在服務(wù)器上執(zhí)行的一個(gè)方法300,所述服務(wù)器正在復(fù)制包含在其中的對(duì)象。在該示例中,基于如下配置來描述該處理,即,每次修改對(duì)象時(shí),復(fù)制該對(duì)象的當(dāng)前狀態(tài)。當(dāng)觸發(fā)事件發(fā)生時(shí),處理開始(塊305)。當(dāng)然,可以使用其他觸發(fā)事件,諸如時(shí)間間隔、特定事件的發(fā)生、或其他所期望的時(shí)間。如果對(duì)象數(shù)據(jù)在不能被直接發(fā)送的抽象的或邏輯的配置中,則對(duì)象數(shù)據(jù)被串行化成可經(jīng)網(wǎng)絡(luò)傳送的形式(塊310)。這可以包括將對(duì)象數(shù)據(jù)串行化成一個(gè)或多個(gè)字節(jié)數(shù)組。
然后確定當(dāng)前對(duì)象狀態(tài)和前次復(fù)制的狀態(tài)之間的差別(塊315)。這假設(shè)在該節(jié)點(diǎn)上已經(jīng)創(chuàng)建和保持了前次復(fù)制的狀態(tài)。在第一次復(fù)制該對(duì)象的情況下,前次復(fù)制的狀態(tài)不存在或?yàn)榭?,在該情況下,整個(gè)串行化的對(duì)象狀態(tài)將被發(fā)送到其他節(jié)點(diǎn)以便復(fù)制。如前所述,可以以包括逐比特比較或其他類型的差別算法的多種方式確定該差別。然后,通過編碼該差別以及與該差別相對(duì)應(yīng)的任何復(fù)制指令來產(chǎn)生復(fù)制數(shù)據(jù)(塊320)。該復(fù)制指令可以包括指示差別數(shù)據(jù)所要被放置的復(fù)制狀態(tài)中的位置的代碼。然后,將編碼的復(fù)制數(shù)據(jù)發(fā)送到簇中的其他服務(wù)器(塊325)。在成功復(fù)制時(shí),當(dāng)前服務(wù)器中前次復(fù)制的狀態(tài)被使當(dāng)前對(duì)象狀態(tài)變?yōu)榍按螐?fù)制的狀態(tài)的當(dāng)前對(duì)象狀態(tài)所代替(塊330)。然后,每次對(duì)象要被復(fù)制時(shí),重復(fù)該處理。
圖4所示的是方法400的一個(gè)實(shí)施例,其可以在接收復(fù)制數(shù)據(jù)以創(chuàng)建由不同服務(wù)器保持的對(duì)象的復(fù)制狀態(tài)的節(jié)點(diǎn)上執(zhí)行。當(dāng)從另一個(gè)節(jié)點(diǎn)接收到復(fù)制數(shù)據(jù)時(shí),該復(fù)制處理開始(塊405)。諸如通過分析來解碼數(shù)據(jù),以提取復(fù)制指令和要更新復(fù)制狀態(tài)的差別數(shù)據(jù)(塊410)。然后,通過基于該指令使用差別數(shù)據(jù)來改變其內(nèi)容,來修改復(fù)制狀態(tài)(塊415)。這可以包括修改復(fù)制狀態(tài)下的現(xiàn)有值、添加新值、或刪除值。如果精確接收和復(fù)制了數(shù)據(jù),則該節(jié)點(diǎn)可以將確認(rèn)發(fā)送到源節(jié)點(diǎn)(塊420)。然后,每次接收到復(fù)制數(shù)據(jù)時(shí),重復(fù)該處理。
通過使用在此給出的示例和編程語言和工具,諸如Java、Pascal、C++、C、CGI、Perl、SQL、API、SDK、匯編、固件、微碼、和/或其他語言和工具,可以很容易地為本領(lǐng)域技術(shù)人員提供用于實(shí)現(xiàn)本系統(tǒng)和方法的各個(gè)部件的合適軟件。體現(xiàn)為軟件的部件包括計(jì)算機(jī)可讀/可執(zhí)行指令,其使計(jì)算機(jī)以指定方式行動(dòng)。無論是整個(gè)系統(tǒng)還是系統(tǒng)的部件,任何軟件可體現(xiàn)為一件產(chǎn)品,和/或存儲(chǔ)在如在前定義的計(jì)算機(jī)可讀介質(zhì)中。應(yīng)當(dāng)理解在此所述的部件可以實(shí)現(xiàn)為分離的部件,或可以組合在一起。例如,圖2所示的復(fù)制邏輯210、差別邏輯225、和編碼/解碼邏輯230可以體現(xiàn)為一個(gè)部件。
雖然通過本發(fā)明實(shí)施例的描述說明了本發(fā)明,并且已經(jīng)相當(dāng)詳細(xì)地描述了實(shí)施例,但是本申請(qǐng)人的意圖不是將所附權(quán)利要求的范圍限于或者以任何方式限制為這樣的細(xì)節(jié)。其他優(yōu)點(diǎn)和修改對(duì)本領(lǐng)域技術(shù)人員是清楚的。因此,在其較廣的方面,本發(fā)明不限于所示和所描述的特定細(xì)節(jié)、代表性的裝置和示例性的例子。因此,在不背離申請(qǐng)人的一般發(fā)明概念的精神和范圍的情況下,可以改變這樣的細(xì)節(jié)。
權(quán)利要求
1.一種用于在成簇?cái)?shù)據(jù)處理系統(tǒng)中復(fù)制存儲(chǔ)器內(nèi)對(duì)象的當(dāng)前狀態(tài)的系統(tǒng),在所述成簇?cái)?shù)據(jù)處理系統(tǒng)中,第一計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)器內(nèi)對(duì)象,而第二計(jì)算機(jī)系統(tǒng)包括存儲(chǔ)器內(nèi)對(duì)象的復(fù)制狀態(tài),所述系統(tǒng)包括存儲(chǔ)器內(nèi)對(duì)象的前次復(fù)制的狀態(tài),其被保持在第一計(jì)算機(jī)系統(tǒng)中;差別邏輯,用于確定當(dāng)前狀態(tài)和前次復(fù)制的狀態(tài)之間的差值;和通信邏輯,用于將該差值發(fā)送到第二計(jì)算機(jī)系統(tǒng),以使用該差值修改復(fù)制狀態(tài)。
2.如權(quán)利要求1所述的系統(tǒng),還包括編碼邏輯,用于產(chǎn)生與該差值相關(guān)聯(lián)的、指示第二計(jì)算機(jī)系統(tǒng)怎樣修改復(fù)制狀態(tài)的復(fù)制指令。
3.如權(quán)利要求1所述的系統(tǒng),還包括復(fù)制邏輯,其具有串行化器,用于使存儲(chǔ)器內(nèi)對(duì)象的當(dāng)前狀態(tài)串行化。
4.如權(quán)利要求1所述的系統(tǒng),其中前次復(fù)制的狀態(tài)被存儲(chǔ)在一個(gè)或多個(gè)字節(jié)數(shù)組中。
5.如權(quán)利要求1所述的系統(tǒng),其中該系統(tǒng)被體現(xiàn)為存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上的計(jì)算機(jī)可執(zhí)行指令。
6.如權(quán)利要求1所述的系統(tǒng),其中該存儲(chǔ)器內(nèi)對(duì)象是企業(yè)應(yīng)用程序中的對(duì)象。
7.一件在成簇計(jì)算機(jī)系統(tǒng)中使用的、體現(xiàn)在計(jì)算機(jī)可讀介質(zhì)中的產(chǎn)品,用于在一次或多次修改已經(jīng)使對(duì)象數(shù)據(jù)從前次狀態(tài)改變了的情況下復(fù)制對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài),該件產(chǎn)品包括第一計(jì)算機(jī)可執(zhí)行指令,用于使計(jì)算機(jī)確定對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)和前次狀態(tài)之間的差別;第二計(jì)算機(jī)可執(zhí)行指令,用于使計(jì)算機(jī)產(chǎn)生一個(gè)或多個(gè)復(fù)制指令,用于指示另一計(jì)算機(jī)基于該差別從前次狀態(tài)復(fù)制對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)。
7.如權(quán)利要求6所述的該件產(chǎn)品,還包括第三計(jì)算機(jī)可執(zhí)行指令,用于使計(jì)算機(jī)將對(duì)象數(shù)據(jù)串行化為當(dāng)前狀態(tài)。
8.如權(quán)利要求6所述的該件產(chǎn)品,還包括第四計(jì)算機(jī)可執(zhí)行指令,用于使計(jì)算機(jī)保持串行化形式的前次狀態(tài)。
9.如權(quán)利要求6所述的該件產(chǎn)品,其中該第一計(jì)算機(jī)可執(zhí)行指令包括應(yīng)用差別算法以確定當(dāng)前狀態(tài)和前次狀態(tài)之間的差別的指令。
10.如權(quán)利要求9所述的該件產(chǎn)品,其中該差別算法是基于最長(zhǎng)公共子序列算法。
11.如權(quán)利要求6所述的該件產(chǎn)品,還包括第五計(jì)算機(jī)可執(zhí)行指令,用于使計(jì)算機(jī)將復(fù)制指令和差別發(fā)送到一個(gè)或多個(gè)成簇在一起的計(jì)算機(jī),從而對(duì)象數(shù)據(jù)可以在該一個(gè)或多個(gè)計(jì)算機(jī)中被復(fù)制,而不用接收對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)。
12.一種用于在成簇?cái)?shù)據(jù)處理系統(tǒng)中的節(jié)點(diǎn)之間交換對(duì)象數(shù)據(jù)的方法,該方法包括步驟在成簇?cái)?shù)據(jù)處理系統(tǒng)中的第一節(jié)點(diǎn)中的存儲(chǔ)器中保持對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài);在修改了對(duì)象數(shù)據(jù)的一部分之后,確定被修改的部分;和將被修改的部分發(fā)送到一個(gè)或多個(gè)成簇?cái)?shù)據(jù)處理系統(tǒng)中的其他節(jié)點(diǎn),以便復(fù)制該對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)。
13.如權(quán)利要求12所述的方法,還包括產(chǎn)生要與該被修改的部分一起發(fā)送的指令代碼,其中該指令代碼指示一個(gè)或多個(gè)其它節(jié)點(diǎn)怎樣復(fù)制當(dāng)前狀態(tài)。
14.如權(quán)利要求12所述的方法,還包括在發(fā)送步驟之前使對(duì)象數(shù)據(jù)串行化。
15.如權(quán)利要求14所述的方法,還包括使對(duì)象數(shù)據(jù)的當(dāng)前狀態(tài)串行化;在修改了部分之后,使對(duì)象數(shù)據(jù)的修改后的狀態(tài)串行化;和在串行化的狀態(tài)之間應(yīng)用差別算法,以確定被修改的部分。
16.如權(quán)利要求15所述的方法,其中該應(yīng)用步驟包括應(yīng)用最長(zhǎng)公共子序列算法。
17.一種成簇?cái)?shù)據(jù)處理系統(tǒng),包括在通信網(wǎng)絡(luò)中成簇的多個(gè)節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)包括復(fù)制邏輯,用于將存儲(chǔ)器內(nèi)對(duì)象復(fù)制到一個(gè)或多個(gè)其它節(jié)點(diǎn);由復(fù)制邏輯保持的存儲(chǔ)器內(nèi)對(duì)象的前次復(fù)制的狀態(tài),其中前次復(fù)制的狀態(tài)是在一個(gè)或多個(gè)其它節(jié)點(diǎn)上已經(jīng)被復(fù)制的狀態(tài);存儲(chǔ)器內(nèi)對(duì)象的當(dāng)前對(duì)象狀態(tài);差別邏輯,用于確定當(dāng)前對(duì)象狀態(tài)和前次復(fù)制的狀態(tài)之間的差值;和編碼邏輯,用于基于該差別產(chǎn)生復(fù)制代碼,其中一個(gè)或多個(gè)其它節(jié)點(diǎn)可以使用該復(fù)制代碼來復(fù)制當(dāng)前對(duì)象狀態(tài),而不用接收該當(dāng)前對(duì)象狀態(tài)。
18.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),還包括通信邏輯,用于在用于創(chuàng)建復(fù)制狀態(tài)的多個(gè)節(jié)點(diǎn)之間發(fā)送和接收復(fù)制代碼。
19.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),其中當(dāng)前對(duì)象狀態(tài)和前次復(fù)制的狀態(tài)是存儲(chǔ)器內(nèi)對(duì)象的串行化形式。
20.如權(quán)利要求19所述的成簇?cái)?shù)據(jù)處理系統(tǒng),其中復(fù)制邏輯包括用于使當(dāng)前對(duì)象狀態(tài)和前次復(fù)制的狀態(tài)串行化的邏輯。
21.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),其中差別邏輯包括用于應(yīng)用差別算法的邏輯。
22.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),還包括解碼邏輯,用于解碼復(fù)制代碼以基于該差別產(chǎn)生復(fù)制狀態(tài)。
23.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),其中復(fù)制邏輯包括用于復(fù)制存儲(chǔ)器內(nèi)對(duì)象的裝置。
24.如權(quán)利要求17所述的成簇?cái)?shù)據(jù)處理系統(tǒng),其中該成簇?cái)?shù)據(jù)處理系統(tǒng)包括成簇企業(yè)應(yīng)用軟件。
全文摘要
在成簇處理系統(tǒng)中,復(fù)制邏輯將對(duì)象的復(fù)制控制為一個(gè)或多個(gè)復(fù)制狀態(tài)。該復(fù)制邏輯確定對(duì)象的狀態(tài)之間的差別。然后,可以在成簇系統(tǒng)中的其它節(jié)點(diǎn)上根據(jù)該差別產(chǎn)生一個(gè)或多個(gè)復(fù)制狀態(tài),而不用發(fā)送對(duì)象的整個(gè)狀態(tài)。
文檔編號(hào)G06F11/14GK1732438SQ200380106504
公開日2006年2月8日 申請(qǐng)日期2003年11月19日 優(yōu)先權(quán)日2002年12月17日
發(fā)明者凱文·K·常, 哈倫·B·塞克斯頓 申請(qǐng)人:甲骨文國(guó)際公司