專(zhuān)利名稱(chēng):幫助協(xié)調(diào)獨(dú)立更新的分布式數(shù)據(jù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明一般地涉及分布式通信環(huán)境,并且特別地涉及對(duì)分布式通信環(huán)境的獨(dú)立更新的分布式數(shù)據(jù)進(jìn)行協(xié)調(diào)。
背景技術(shù):
分布式通信環(huán)境包括高度可用、可升級(jí)的系統(tǒng),這些系統(tǒng)可用于各種情形,包括那些需要工作的高吞吐量或者系統(tǒng)的連續(xù)或近似連續(xù)的可用性的情形。
分布式環(huán)境的一個(gè)例子是具有一個(gè)或多個(gè)集群的集群式環(huán)境。集群包括例如多個(gè)共享資源并彼此協(xié)作以執(zhí)行系統(tǒng)任務(wù)的操作系統(tǒng)實(shí)例。在集群式環(huán)境中,經(jīng)常對(duì)信息進(jìn)行復(fù)制,以使相同信息在集群的所有成員上可用。由于當(dāng)并非所有成員都在線時(shí)成員可能會(huì)個(gè)別地或分組地進(jìn)行更新,因此保持這些數(shù)據(jù)的一致性是很困難的。此外,將這些成員拆分(劃分)為不進(jìn)行通信的子組要求當(dāng)修復(fù)這種拆分時(shí)對(duì)在不同子組上所進(jìn)行的更新進(jìn)行協(xié)調(diào)。
目前,為了實(shí)現(xiàn)更新,提供了集中式更新日志或集中式數(shù)據(jù)服務(wù)器,或者通過(guò)僅當(dāng)定數(shù)(quorum)的成員在線時(shí)才允許更新來(lái)保持一致性。然而,形成集群的成員通常希望在不依賴(lài)于集中式存儲(chǔ)或主成員(primary member)的情況下保持分布式的一致的信息。此外,定數(shù)要求是有缺陷的,原因是當(dāng)定數(shù)達(dá)不到或丟失時(shí),就不能進(jìn)行處理。
基于前述內(nèi)容,需要一種在沒(méi)有集中式存儲(chǔ)或定數(shù)要求的情況下用于實(shí)現(xiàn)更新和用于協(xié)調(diào)獨(dú)立更新的分布式數(shù)據(jù)的改進(jìn)的能力。
發(fā)明內(nèi)容
通過(guò)提供一種幫助協(xié)調(diào)分布式通信環(huán)境的數(shù)據(jù)的方法,克服了現(xiàn)有技術(shù)的缺點(diǎn)并提供了附加的優(yōu)點(diǎn)。該方法包括例如確定分布式通信環(huán)境的一組分布式數(shù)據(jù)與該分布式通信環(huán)境的另一組分布式數(shù)據(jù)是否一致,其中該確定包括在確定中使用一個(gè)或多個(gè)局部單調(diào)遞增的值;以及響應(yīng)于所述確定,對(duì)該一組分布式數(shù)據(jù)和該另一組分布式數(shù)據(jù)中的至少一組分布式數(shù)據(jù)進(jìn)行更新,以協(xié)調(diào)該一組分布式數(shù)據(jù)與該另一組分布式數(shù)據(jù)之間的一處或多處不一致。
根據(jù)本發(fā)明的另一個(gè)方面,提供了一種幫助協(xié)調(diào)集群式通信環(huán)境的數(shù)據(jù)的方法。該方法包括例如由加入成員發(fā)起加入該集群式通信環(huán)境的集群的操作,該集群包括至少一個(gè)當(dāng)前成員;由該至少一個(gè)當(dāng)前成員中的當(dāng)前成員向該加入成員提供當(dāng)前成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);由該加入成員確定一組增量,該一組增量包括該加入成員與該當(dāng)前成員之間的零處或多處數(shù)據(jù)不一致,該確定使用至少一個(gè)局部單調(diào)遞增的值;由該加入成員向該當(dāng)前成員提供該一組增量以及加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);由該當(dāng)前成員確定一組增量,該一組增量包括該當(dāng)前成員與該加入成員之間的零處或多處數(shù)據(jù)不一致,該確定使用至少一個(gè)局部單調(diào)遞增的值;由該當(dāng)前成員解決該加入成員的一組增量與該當(dāng)前成員的一組增量之間的零處或多處沖突,以提供一組已解決的增量;以及向該集群的一個(gè)或多個(gè)成員,包括該加入成員提供該一組已解決的增量。
在此還描述和要求保護(hù)對(duì)應(yīng)于上述方法的系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。
通過(guò)本發(fā)明的技術(shù)可以實(shí)現(xiàn)更多的特征和優(yōu)點(diǎn)。在此詳細(xì)地描述了本發(fā)明的其他實(shí)施例和方面,并且這些實(shí)施例和方面可以看作是所要求保護(hù)的發(fā)明的一部分。
在本說(shuō)明書(shū)所附的權(quán)利要求書(shū)中作為例子特別地指出和明確地要求保護(hù)本發(fā)明的一個(gè)或多個(gè)方面。根據(jù)以下結(jié)合附圖而進(jìn)行的詳細(xì)描述,本發(fā)明的前述和其他目標(biāo)、特征和優(yōu)點(diǎn)將顯而易見(jiàn),在附圖中圖1示出了包含和使用本發(fā)明的一個(gè)或多個(gè)方面的通信環(huán)境的一個(gè)圖2A示出了根據(jù)本發(fā)明的一個(gè)方面的圖1的通信環(huán)境的集群的一個(gè)例子;圖2B示出了根據(jù)本發(fā)明的一個(gè)方面的存儲(chǔ)于一個(gè)成員上并被協(xié)調(diào)的所復(fù)制的信息的一個(gè)例子;圖3示出了根據(jù)本發(fā)明的一個(gè)方面的成員構(gòu)成表的一個(gè)例子;圖4示出了根據(jù)本發(fā)明的一個(gè)方面的數(shù)據(jù)表的一個(gè)例子;圖5示出了根據(jù)本發(fā)明的一個(gè)方面的與成員加入集群相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;圖6A示出了根據(jù)本發(fā)明的一個(gè)方面的與加入成員確定增量相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;圖6B示出了根據(jù)本發(fā)明的一個(gè)方面的與當(dāng)前成員確定增量相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;圖7示出了根據(jù)本發(fā)明的一個(gè)方面的與確定沖突相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;圖8示出了根據(jù)本發(fā)明的一個(gè)方面的與對(duì)增量進(jìn)行復(fù)制相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;圖9示出了根據(jù)本發(fā)明的一個(gè)方面的與對(duì)增量進(jìn)行應(yīng)用相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例;以及圖10示出了根據(jù)本發(fā)明的一個(gè)方面的與為了從一種或多種優(yōu)化中受益而處理元數(shù)據(jù)相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。
具體實(shí)施例方式
根據(jù)本發(fā)明的一個(gè)方面,提供了一種用于幫助協(xié)調(diào)通信環(huán)境的獨(dú)立更新的分布式數(shù)據(jù)的能力。為了協(xié)調(diào)數(shù)據(jù),使用了局部單調(diào)遞增的值。這些值的例子包括本地計(jì)數(shù)器、單調(diào)遞增的本地時(shí)戳等。假設(shè)將來(lái)的值或時(shí)戳不會(huì)早于先前的值或時(shí)戳(即時(shí)間不會(huì)向后流轉(zhuǎn))。
圖1中示出了包含和使用本發(fā)明的一個(gè)或多個(gè)方面的通信環(huán)境的一個(gè)例子。分布式通信環(huán)境100包括例如通過(guò)多個(gè)連接104互連的多個(gè)節(jié)點(diǎn)102。作為一個(gè)例子,節(jié)點(diǎn)102是RS/6000并且連接104是耦合這些節(jié)點(diǎn)的局域網(wǎng)(LAN)連接。作為另一個(gè)例子,節(jié)點(diǎn)102是通過(guò)局域網(wǎng)(LAN)連接、交換機(jī)、因特網(wǎng)連接和/或其他類(lèi)型的連接而互連的個(gè)人計(jì)算機(jī)。此外,多種其他類(lèi)型的節(jié)點(diǎn)和/或連接可以包括在包含和使用了本發(fā)明的一個(gè)或多個(gè)方面的環(huán)境中。此外,盡管在圖1的環(huán)境中包括了5個(gè)節(jié)點(diǎn),但這只是一個(gè)例子并且僅用于說(shuō)明的目的。通信環(huán)境可以包括任意數(shù)目的節(jié)點(diǎn),這些節(jié)點(diǎn)中的一些或全部節(jié)點(diǎn)相互耦合。
通信環(huán)境100例如是集群式環(huán)境。在一個(gè)集群式環(huán)境中,有由集群成員形成的一個(gè)或多個(gè)集群。集群的集群成員共享資源并彼此協(xié)作以執(zhí)行任務(wù)。例如,Novaes等人在2000年5月31日提交的序列號(hào)為09/583,677的題目為“A Method,System And Program Products For Managing AClustered Computing Environment(用于管理集群式計(jì)算環(huán)境的方法、系統(tǒng)和程序產(chǎn)品)”(存檔號(hào)為POU920000004US1)的專(zhuān)利申請(qǐng)中描述了集群式環(huán)境的一個(gè)例子的各個(gè)方面,在此通過(guò)引用的方式包含其全部?jī)?nèi)容。
作為一個(gè)例子,通信環(huán)境100包括具有多個(gè)成員202的集群200(圖2)。在這個(gè)特定的例子中,成員202是環(huán)境的節(jié)點(diǎn);然而,在其他的例子中,成員是除節(jié)點(diǎn)之外的實(shí)體,諸如虛擬機(jī)或其他實(shí)體。盡管將集群200示出為具有5個(gè)成員,但是這只是用于說(shuō)明的目的。集群200可以包括一個(gè)或多個(gè)成員,包括通信環(huán)境的所有節(jié)點(diǎn)(或其他實(shí)體)或節(jié)點(diǎn)(或其他實(shí)體)的子集。
在集群200中,在該集群的所有成員上復(fù)制信息。這樣,每個(gè)成員202包括例如一個(gè)成員構(gòu)成表204(圖2b)和一個(gè)或多個(gè)數(shù)據(jù)表206。包括成員構(gòu)成表和數(shù)據(jù)表的所復(fù)制的信息保持同步,以便集群的每個(gè)成員可以訪問(wèn)相同的一致的信息。為了保持這種一致性,使用協(xié)調(diào)組件208,以下對(duì)其進(jìn)行更詳細(xì)的描述。
參考圖3描述成員構(gòu)成表204的一個(gè)例子。成員構(gòu)成表204包括例如包含于集群中的成員302的列表;以及每個(gè)成員302的最后改變的時(shí)戳(LCTS)304。最后改變的時(shí)戳表示出現(xiàn)與該最后改變的時(shí)戳相關(guān)聯(lián)的成員是數(shù)據(jù)表中的一行數(shù)據(jù)的改變首項(xiàng)(change leader)的情況的最近時(shí)間。最后改變的時(shí)戳是本地(節(jié)點(diǎn)特定的)時(shí)間并且不是集群同步時(shí)間(cluster-synchronized time)。該值是單調(diào)遞增的,并且因此其不是時(shí)刻(time-of-day)值,而是計(jì)時(shí)器本身的基本值。成員構(gòu)成表204還可以包括其他信息。
參考圖4描述數(shù)據(jù)表206的一個(gè)例子。數(shù)據(jù)表206包括多個(gè)數(shù)據(jù)行400(圖4),每一行包括例如唯一地標(biāo)識(shí)數(shù)據(jù)行的關(guān)鍵字402;數(shù)據(jù)404;指示出負(fù)責(zé)發(fā)起對(duì)數(shù)據(jù)行的改變的成員的改變首項(xiàng)406;以及指定改變時(shí)間的改變時(shí)戳(CTS)408。在一個(gè)實(shí)施例中,每個(gè)集群一次只有一個(gè)改變首項(xiàng)。然而,在其他的實(shí)施例中,一次可以有多個(gè)改變首項(xiàng)是活動(dòng)的。
協(xié)調(diào)組件208(圖2b)使用成員構(gòu)成表和數(shù)據(jù)表來(lái)對(duì)已經(jīng)獨(dú)立地更新并且未反映在一個(gè)或多個(gè)集群成員處的信息進(jìn)行協(xié)調(diào)。例如,當(dāng)集群的一個(gè)成員斷開(kāi)了與集群的其他成員的通信并且在集群中或在該分離的成員處進(jìn)行了更新時(shí),會(huì)發(fā)生這種情況。當(dāng)該成員重新與其他成員進(jìn)行通信時(shí),對(duì)該成員的信息和其他成員的信息進(jìn)行協(xié)調(diào)。
作為另一個(gè)例子,在集群的成員于斷開(kāi)的時(shí)間點(diǎn)上活動(dòng)時(shí)使用協(xié)調(diào)。例如,假設(shè)5節(jié)點(diǎn)(節(jié)點(diǎn)1-5)集群的節(jié)點(diǎn)1和節(jié)點(diǎn)2是活動(dòng)的,并且隨后停止。然后,集群的節(jié)點(diǎn)3-5是活動(dòng)的。當(dāng)所有的成員均為活動(dòng)的時(shí),使用協(xié)調(diào)來(lái)協(xié)調(diào)集群的彼此不進(jìn)行通信的兩個(gè)子組所進(jìn)行的更新,因?yàn)檫@些更新是由單獨(dú)的子組進(jìn)行的。
為了成為集群的一個(gè)活動(dòng)的成員,成員加入該集群。在此所用的術(shù)語(yǔ)“加入”是指在任意時(shí)間上一個(gè)成員在集群中變?yōu)榛顒?dòng)的。作為例子,其包括從系統(tǒng)復(fù)位開(kāi)始成員第一次在集群中變?yōu)榛顒?dòng)的;以及/或者在集群劃分(即拆分)之后成員變?yōu)榛顒?dòng)的。還可以存在其他例子,并且可以認(rèn)為其他例子也包含在“加入”的定義以及本發(fā)明的一個(gè)或多個(gè)方面之內(nèi)。
在一個(gè)實(shí)施例中,具有不同改變的多個(gè)成員可以同時(shí)加入。在這種情況下,集群的當(dāng)前成員確定其相對(duì)于所有加入成員的改變。
協(xié)調(diào)組件包括用于協(xié)調(diào)不一致的信息的邏輯。例如,其包括用以將成員加入集群的加入邏輯,確定待協(xié)調(diào)的任意改變的增量確定邏輯,用以確定是否存在待解決的任意沖突的邏輯,用以將改變復(fù)制到集群的所有成員(或者在另一個(gè)實(shí)施例中,成員子集)的復(fù)制邏輯,以及用以對(duì)已確定的增量進(jìn)行應(yīng)用的應(yīng)用邏輯。如有必要,則可以既協(xié)調(diào)數(shù)據(jù)表又協(xié)調(diào)成員構(gòu)成表。以下參考加入處理來(lái)描述與協(xié)調(diào)有關(guān)的更多細(xì)節(jié)。
一個(gè)成員加入一個(gè)集群以成為該集群的活動(dòng)成員。例如,成員1可能是集群A的成員,但是其可能不與該集群的其他成員進(jìn)行通信,并且因此,其是該集群的非活動(dòng)成員。為了成為活動(dòng)成員,成員1加入該集群。該成員可以在該成員能夠與該集群的其他成員進(jìn)行通信的任意時(shí)間上請(qǐng)求加入該集群。因此,即使該成員加入并且隨后發(fā)生故障,該成員也可以再次加入。
在加入處理期間,請(qǐng)求加入集群的成員確定其所具有的與集群信息不一致的信息。這稱(chēng)作增量處理。同樣,集群確定該集群是否具有任何與該加入者不一致的信息。同樣,這稱(chēng)作增量處理。
參考圖5來(lái)描述與加入處理相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。首先,在步驟500中,提出請(qǐng)求以加入集群。在這個(gè)例子中,該請(qǐng)求由已經(jīng)恢復(fù)與集群的通信的成員提出。在此將請(qǐng)求加入的成員稱(chēng)作加入成員或加入者。
在步驟502中,響應(yīng)于該加入請(qǐng)求,集群的當(dāng)前成員(例如,集群首項(xiàng))向該加入成員發(fā)送當(dāng)前成員構(gòu)成表。在步驟504中,該加入成員使用該成員構(gòu)成表來(lái)確定其相對(duì)于當(dāng)前在其要加入的集群中使用的表的一組增量。例如,加入成員使用其接收到的該成員構(gòu)成表而針對(duì)該加入成員所維護(hù)的每個(gè)數(shù)據(jù)表中的每一行確定該行是否是需要由現(xiàn)有成員處理的增量(例如改變)。
可以以多種方式來(lái)確定增量。在一個(gè)例子中,按照參考圖6A所描述的那樣來(lái)執(zhí)行處理。首先,在步驟600中,由加入成員選擇該加入成員的數(shù)據(jù)表的一行用于處理。在詢(xún)問(wèn)602中,對(duì)當(dāng)該行最后一次修改時(shí)該當(dāng)前成員是否存在于該集群中進(jìn)行判斷。如果該行的改變首項(xiàng)(CL)存在于該當(dāng)前成員的成員構(gòu)成表(CMT)中,并且如果該當(dāng)前成員的成員構(gòu)成表(CMT)中的改變首項(xiàng)的最后改變的時(shí)戳(LCTS)大于或等于該數(shù)據(jù)行的已改變的時(shí)戳(CTS)(即CMT[row.CL].LCTS>=row.CTS,其中表中的行用與C++相似的箭頭符號(hào)來(lái)表示,陣列索引是表關(guān)鍵字,并且行中的字段用點(diǎn)(.)來(lái)表示),則該當(dāng)前成員是在線的。
如果當(dāng)該行最后一次改變時(shí)該當(dāng)前成員在線,則在步驟604中該行不是一個(gè)增量。然而,如果當(dāng)該行最后一次改變時(shí)該當(dāng)前成員不在線,則在步驟608中該行是發(fā)送給該當(dāng)前成員的一個(gè)增量。當(dāng)前成員在加入成員的增量組中維護(hù)該增量以便用于進(jìn)一步的處理,下文將對(duì)此進(jìn)行描述。
接下來(lái),在詢(xún)問(wèn)610中,對(duì)是否還有更多的行需要處理進(jìn)行判斷。如果還有更多的行需要處理,則處理返回步驟600。否則,在步驟612中,對(duì)加入成員的增量處理完成。
返回圖5,如果有任何增量,則在步驟506中將增量(例如,數(shù)據(jù)表的已改變的行)和加入成員的成員構(gòu)成表發(fā)送給當(dāng)前成員。
除了上述內(nèi)容之外,當(dāng)前成員在步驟508中確定其是否具有相對(duì)于加入成員的任何增量。參考圖6B描述了這種邏輯的一個(gè)實(shí)施例。首先,在步驟650中,由當(dāng)前成員選擇該當(dāng)前成員的數(shù)據(jù)表的一行用于處理。在詢(xún)問(wèn)652中,對(duì)當(dāng)該行最后一次修改時(shí)該加入成員是否在該集群中進(jìn)行判斷。如果該數(shù)據(jù)行的改變首項(xiàng)(CL)存在于該加入成員的成員構(gòu)成表(JMT)中,并且如果該加入成員的成員構(gòu)成表中的改變首項(xiàng)的最后改變的時(shí)戳(LCTS)大于或等于該行的CTS(即JMT[row.CL].LCTS>=row.CTS),則該加入成員是在線的。如果JMT[row.CL].LCTS>=row.CTS,則該改變?cè)诩褐惺且阎?。如果?dāng)該行最后一次改變時(shí),該加入成員已經(jīng)在線,則在步驟654中該行不是一個(gè)增量。另一方面,如果當(dāng)該行最后一次修改時(shí)該加入成員不在線,則在步驟656中將該行添加到由當(dāng)前成員創(chuàng)建并維護(hù)的當(dāng)前成員的增量組中。
如果沒(méi)有任何增量,則在此之后在詢(xún)問(wèn)658中對(duì)是否存在更多的行需要處理進(jìn)行判斷。如果還有更多的行需要處理,則處理從步驟650繼續(xù)進(jìn)行。否則,在步驟660中,與當(dāng)前成員確定其增量相關(guān)聯(lián)的處理結(jié)束。
返回圖5,在當(dāng)前成員確定其相對(duì)于加入成員的增量之后,假設(shè)存在增量,則在步驟510中,當(dāng)前成員確定是否存在任何沖突,并且如果存在沖突則解決沖突。參考圖7描述了與確定沖突相關(guān)聯(lián)的邏輯的一個(gè)在一個(gè)例子中,為了確定是否存在沖突,在步驟700(圖7)中,從當(dāng)前成員的增量組中選擇一行,并且在詢(xún)問(wèn)702中對(duì)所選的行是否在加入成員的增量組中進(jìn)行判斷。如果該行不在加入成員的增量組中,則沒(méi)有沖突,并且可以添加該行,下文將會(huì)對(duì)此進(jìn)行描述。
然而,如果在詢(xún)問(wèn)702中該行在加入成員的增量組中,則在詢(xún)問(wèn)706中對(duì)該行的數(shù)據(jù)是否與該加入成員的行的數(shù)據(jù)相同進(jìn)行判斷。如果兩行中的數(shù)據(jù)相同,則在步驟708中該行不是一個(gè)增量,并且可以從兩個(gè)增量組中將該行移除。
返回詢(xún)問(wèn)706,如果兩行中的數(shù)據(jù)不同,則存在沖突,并且在詢(xún)問(wèn)710中,對(duì)是通過(guò)選擇當(dāng)前成員的增量還是通過(guò)選擇加入成員的增量來(lái)解決該沖突進(jìn)行判斷??梢砸远喾N不同方式來(lái)處理行沖突,這些方式包括仲裁的方式或者編程的方式,在仲裁的方式中,將兩行之一選擇為當(dāng)前行,在編程的方式中,編寫(xiě)一個(gè)程序來(lái)確定要使用的行。程序參考例如其他成員上的數(shù)據(jù)表來(lái)作出決定。在一個(gè)例子中,在選擇要使用的行時(shí),對(duì)兩行的改變首項(xiàng)是否相同進(jìn)行判斷。如果兩行的改變首項(xiàng)相同,則進(jìn)一步對(duì)當(dāng)前成員的LCTS和加入成員的LCTS哪一個(gè)更大進(jìn)行判斷。選擇與較大的LCTS相關(guān)聯(lián)的行。
如果確定選擇當(dāng)前成員的增量行,則在步驟714中從加入成員的增量組中移除該行。然而,如果確定通過(guò)選擇加入成員的增量行來(lái)解決沖突,則在步驟712中從當(dāng)前成員的增量組中移除該行。
在步驟704、708、712或714之后,在詢(xún)問(wèn)716中對(duì)是否有更多的行需要處理進(jìn)行判斷。如果有更多的行需要處理,則處理從步驟700繼續(xù)進(jìn)行。否則,沖突處理結(jié)束。
返回圖5,在解決沖突之后,在步驟512中,在本例中,將增量(如果存在)發(fā)送給所有的成員。參考圖8描述了與該處理相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。在圖8的處理中,創(chuàng)建一個(gè)累積的增量組,其包括來(lái)自當(dāng)前成員的增量組和加入成員的增量組的增量。在本例中,隨后將該累積的組發(fā)送給集群的所有成員。(在另一個(gè)例子中,將其發(fā)送給一個(gè)子集的成員)。
參考圖8,首先,在步驟800中,從當(dāng)前成員的增量組中選擇一行,并在步驟802中將所選的行添加到累積的增量組中。在此之后,在詢(xún)問(wèn)804中對(duì)該當(dāng)前成員的增量組中是否有更多的行需要處理進(jìn)行判斷。如果還有更多的行需要處理,則處理從步驟800開(kāi)始繼續(xù);否則,該邏輯就繼續(xù)處理加入成員的增量組。
在步驟806中,從加入成員的增量組中選擇一行,并且在步驟808中將該行應(yīng)用到當(dāng)前成員的表中。另外,在步驟810中,將該改變添加到累積的增量組。
然后,在詢(xún)問(wèn)812中對(duì)加入成員的增量組中是否有更多的行需要處理進(jìn)行判斷。如果還有更多的行,則處理從步驟806繼續(xù)進(jìn)行;否則,在步驟814中,將累積的增量組發(fā)送給集群的所有成員,包括加入成員和已加入成員。
返回圖5,在將增量發(fā)送給所有成員之后(假設(shè)有增量需要發(fā)送),在步驟514中,對(duì)這些增量進(jìn)行應(yīng)用。參考圖9描述了與該處理相關(guān)聯(lián)的邏輯的一個(gè)實(shí)施例。圖9的處理是由接收到增量的每個(gè)集群成員執(zhí)行的。
首先,在步驟900中,從累積的增量組中選擇一個(gè)增量行,并且在詢(xún)問(wèn)902中對(duì)該行是否存在于執(zhí)行該處理的成員的表中進(jìn)行判斷。如果該行存在于表中,則在詢(xún)問(wèn)904中進(jìn)一步對(duì)該增量是否是“刪除”進(jìn)行判斷。如果該增量是“刪除”,則在步驟906中刪除該行;否則,在步驟908中改變?cè)撔?。在此之后,處理從如下所述的?xún)問(wèn)912繼續(xù)進(jìn)行。
返回詢(xún)問(wèn)902,如果該行不存在于表中,則在詢(xún)問(wèn)909中對(duì)該增量是否為“刪除”進(jìn)行判斷。如果該增量是“刪除”,并且該行不存在,則不需要對(duì)該行進(jìn)行處理,并且處理從如下所述的詢(xún)問(wèn)912繼續(xù)進(jìn)行。然而,如果該行不存在于該表中并且該該增量不是“刪除”,則在步驟910中添加該行,并且處理從詢(xún)問(wèn)912繼續(xù)進(jìn)行。
在詢(xún)問(wèn)912中,對(duì)成員構(gòu)成表是否需要更新進(jìn)行判斷。作為一個(gè)例子,對(duì)該增量的改變首項(xiàng)的時(shí)戳是否大于該成員構(gòu)成表中的改變首項(xiàng)的最后改變的時(shí)戳(即,CL.CTS>CL.LCTS)進(jìn)行判斷。如果CL.CTS>CL.LCTS,則在步驟914中利用改變首項(xiàng)的最后改變的時(shí)戳來(lái)對(duì)成員構(gòu)成表進(jìn)行更新。在此之后,或者如果該成員構(gòu)成表不需要進(jìn)行更新,則在詢(xún)問(wèn)916中對(duì)累積增量組中是否有更多的行需要被應(yīng)用進(jìn)行判斷。如果有更多的行需要被應(yīng)用,則處理從步驟900開(kāi)始繼續(xù)進(jìn)行;否則,應(yīng)用增量邏輯結(jié)束。由此,使用兩階段提交過(guò)程來(lái)提交所有成員處的改變,然后在假設(shè)該提交成功的情況下,結(jié)束加入處理。
如上所述,利用加入處理,與成員構(gòu)成表相結(jié)合的數(shù)據(jù)表的改變首項(xiàng)和已改變的時(shí)戳的信息實(shí)現(xiàn)了對(duì)表改變的相對(duì)先后順序的確定。這提供了一種機(jī)制,其用于忽略先前已經(jīng)包含在合并的表中的行。
在一個(gè)實(shí)施例中,不管加入成員是否具有任何增量,當(dāng)前成員都復(fù)制已更新的表。這考慮的是加入成員不具有數(shù)據(jù)表或者當(dāng)前成員的數(shù)據(jù)表中的行不在加入成員的數(shù)據(jù)表中的情況。如果成員的成員構(gòu)成表被無(wú)意地(或惡意地)刪除了,則加入處理仍可以工作。在這種情況下,成員加入時(shí)不帶有成員構(gòu)成表。當(dāng)成員加入一個(gè)集群時(shí),加入操作有效地引起全部表被傳送。這也是將新安裝的成員初次添加到集群的情況。然而,如果該成員是所出現(xiàn)的第一個(gè)成員,則其他的成員確定他們的所有表都是增量。在另一個(gè)實(shí)施例中,可能確定在當(dāng)前成員的表中沒(méi)有任何數(shù)據(jù),并且作為代替,復(fù)制該加入者的表。
在又一個(gè)實(shí)施例中,有多個(gè)加入成員。在這種情況下,每個(gè)加入成員都執(zhí)行在此所述的處理,然而,當(dāng)前成員確定其相對(duì)于任何加入成員是否具有增量。這在當(dāng)前成員的圖表中引入了外部循環(huán),其中在確定增量時(shí)針對(duì)加入成員的成員構(gòu)成表中的每個(gè)表對(duì)當(dāng)前成員的數(shù)據(jù)行進(jìn)行檢查,并且還引入了一個(gè)循環(huán),該循環(huán)用以在確定沖突時(shí)和在沖突解決之后移除未被選擇的增量時(shí)以及在當(dāng)增量相同時(shí)從多個(gè)加入者的增量組中移除增量時(shí)檢查每個(gè)加入成員的增量組。
此外,在對(duì)增量進(jìn)行應(yīng)用時(shí),在改變一行之前,成員(當(dāng)前成員或加入者)將檢查該改變是否適用。因此,如果其成員構(gòu)成表(MT)[row.CL].LCTS==row.CTS,則不需要對(duì)該改變進(jìn)行處理并且可以跳過(guò)該改變(因?yàn)樗x的增量來(lái)自于該節(jié)點(diǎn))。在處理期間可以在每一個(gè)成員上進(jìn)行該項(xiàng)操作,因?yàn)槿魏萎?dāng)前成員或加入成員都可能處于這種“健忘”的狀態(tài)。
由于加入成員已經(jīng)是非活動(dòng)的,因此加入集群所包括的步驟可能根據(jù)已經(jīng)發(fā)生的處理而不同。因此,下面描述了為實(shí)現(xiàn)加入而發(fā)生的處理的不同例子。
例1簡(jiǎn)單合并。這描述了子集群同時(shí)選擇一個(gè)當(dāng)前成員來(lái)進(jìn)行處理的拆分修復(fù)情況。
5個(gè)成員{N1-N5}。改變首項(xiàng)為N1。
所有成員上的成員構(gòu)成表(MT)為成員 LCTSN10N20N30N40N50LCTS==0表示成員不曾是任何行的改變首項(xiàng)。
所創(chuàng)建的兩個(gè)數(shù)據(jù)行條目關(guān)鍵字CL CTSRG12 N1 0100CG5 N1 0101集群的MT成員 LCTSN10101
N20N30N40N50該集群隨后拆分(即劃分)。
子集群A={N1-N3},CL=N1。
子集群B={N4-N5},CL=N4。
子集群A改變了RG12關(guān)鍵字CL CTSRG12 N1 0200RG45 N1 0101子集群A的MT成員 LCTSN10200N20N30N40N50子集群B改變了RG45關(guān)鍵字CL CTSRG12 N1 0100RG45 N4 0200子集群B的MT成員 LCTSN10101N20N30N40200N50
修復(fù)了網(wǎng)絡(luò)拆分,并且子集群A和子集群B重新合并為一個(gè)完整的集群{N1-N5},CL=N1。假設(shè)子集群A的主項(xiàng)N1是當(dāng)前成員。N1將N1的MT發(fā)送給所選的加入成員(N4)。N4隨后將計(jì)算一個(gè)增量,N4將這個(gè)增量發(fā)送給N1。N1隨后將針對(duì)N的增量的每一行而確定是否存在與該行的沖突。這可以描述為1.將N1.MT發(fā)送給N4。
2.針對(duì)N4中的每一行,確定N4是否具有增量。
a.N4.RG12.CL=N1。N1.MT[N1].LCTS=0200,N4.RG12.CTS=0100。
N1更大,因此N1具有更近的改變。RG12不是增量。
b.N4.RG45.CL=N4。N1.MT[N4].LCTS=0;N4.RH45.CTS=0200。
N4更大,因此RG45是增量。
3a.將來(lái)自N4的增量(RG45)連同N4.MT一起發(fā)送給N1。
3b.N1確定其相對(duì)于N4的增量。該檢查不是利用每個(gè)增量行,而是利用相對(duì)于N4的MT的數(shù)據(jù)表中的每個(gè)行。如果其是增量,則可以檢查從N4接收到的增量以查看該行是否為其中的增量以及其是否具有相同的數(shù)據(jù)值。
4.針對(duì)增量中的每一行,確定是否存在沖突。
a.針對(duì)行N1.RG45。N1.RG45.CL=N1。N4.MT[N1].LCTS=0101。N1.RG45.CTS=0101。它們相等,這意味著N4知道RG45的N1版本,因此N4.RG45是已更新的行。N1利用來(lái)自N4的行對(duì)RG45進(jìn)行更新。
5.通過(guò)上述步驟,合并所有的數(shù)據(jù)行。現(xiàn)在合并成員構(gòu)成行。針對(duì)N1.MT中的每一行,與N4中相同的行進(jìn)行比較。選擇具有最大LCTS的行。
6.現(xiàn)在N1復(fù)制MT和數(shù)據(jù)表。
例2復(fù)雜合并如果集群{N1,N2,N3,N4,N5}具有完全復(fù)制的數(shù)據(jù)表和成員構(gòu)成表,并且隨后拆分成子集群A{N1,N2,N3}和子集群B{N4,N5},則每一方都知道當(dāng)劃分發(fā)生時(shí)有效的LCTS值。因此,如果A方進(jìn)行了改變并定義了RG12,則該條目的CTS值將大于該行的CL的先前的LCTS。如果B方(N4,N5)改變了先前的用于RG45的條目,則該條目的CTS同樣將大于CL的先前的LCTS。
如果修復(fù)了該拆分并且兩個(gè)子集群準(zhǔn)備合并,則A方將具有1行的增量組(RG12),并且B方將具有1行的增量組(RG45)。與上述的簡(jiǎn)單情況相似,當(dāng)應(yīng)用到A方時(shí),B方的增量將代替該行。
然而,假設(shè)N5在修復(fù)拆分之前發(fā)生故障。然后,當(dāng)修復(fù)拆分時(shí),成員N4將并入子集群A,從而成員構(gòu)成為{N1-N4}。該行增量仍將被發(fā)現(xiàn)和應(yīng)用。
如果隨后N4死機(jī),使成員構(gòu)成再次成為{N1-N3},并且再次修改了RG45,則RG45將會(huì)接收到已更新的CTS。更重要的是,RG45的CL值將從N4變?yōu)镹1。注意,現(xiàn)在有行RG45的3個(gè)單獨(dú)的組。即成員構(gòu)成{N1-N3},N4以及N5,并且它們都具有截然不同的CTS值。
如果N5隨后加入該集群,則N5將發(fā)現(xiàn)它相對(duì)于集群沒(méi)有增量,原因是對(duì)RG45的改變是當(dāng)N4在集群中時(shí)應(yīng)用的。而該集群將發(fā)現(xiàn)它相對(duì)于N5具有兩個(gè)必須應(yīng)用的改變(RG12和RG45)。下面將進(jìn)一步描述這個(gè)例子。
網(wǎng)絡(luò)拆分成子集群A={N1-N3},CL=N1以及子集群B={N4,N5},CL=N4。
子集群A的成員構(gòu)成表成員 LCTSN10101N20N30N40N50子集群B的成員構(gòu)成表成員 LCTSN10101N20
N30N40N50子集群A和子集群B上的數(shù)據(jù)行關(guān)鍵字CL CTSRG12 N1 0100RG45 N1 0101子集群A改變了RG12關(guān)鍵字CL CTSRG12 N1 0200RG45 N1 0101子集群B改變了RG45關(guān)鍵字CL CTSRG12 N1 0101RG45 N4 0200N5發(fā)生故障。A={N1-N3},B={N4}。
N4與A合并。A={N1-N4}。將N4上發(fā)生的RG45改變反映到A中。
子集群A的成員構(gòu)成表成員 LCTSN10200N20N30N40200N50子集群A上的數(shù)據(jù)行關(guān)鍵字CL CTSRG12 N1 0200RG45 N4 0200
N4發(fā)生故障。使得A={N1-N3}。
子集群A(N1-N3)改變了RG45關(guān)鍵字CL CTSRG12 N1 0200RG45 N1 0201子集群A的成員構(gòu)成成員 LCTSN10201N20N30N40200N50N5加入A方。
N5的成員構(gòu)成成員 LCTSN10101N20N30N40200N50N5上的數(shù)據(jù)行關(guān)鍵字CL CTSRG12 N1 0101RG45 N4 02001.將N1.MT發(fā)送給N5。
2.針對(duì)N5中的每一行,確定N5是否具有增量。
a.N5.RG12.CL=N1。N1.MT[N1].LCTS=0201,N5.RG12.CTS=0101。行RG12的CTS小于N1的MT LCTS,因此N1上的數(shù)據(jù)行比N5上的數(shù)據(jù)行更近,因此該行不是增量。
b.N5.RG45.CL=N4。N1.MT[N4].LCTS=0200;N5.RG45.CTS=0200。N4的MT LCTS與行RG45中的N4的CTS相同,因此該行不是增量。
3.沒(méi)有增量被發(fā)送給N1,但是仍然合并成員構(gòu)成表(在這種情況下,N1的成員構(gòu)成表將不發(fā)生改變)。N1仍復(fù)制合并的成員構(gòu)成表和數(shù)據(jù)表。
盡管在此描述了加入處理的例子,但是在不偏離本發(fā)明的精神的情況下可以對(duì)這一處理進(jìn)行各種變更。作為一個(gè)例子,提供一種優(yōu)化,其中處理和/或復(fù)制的信息保持最少。例如,在處理的早期階段(例如,在加入處理的初始階段)對(duì)是否有任何需要處理的增量進(jìn)行判斷。如果沒(méi)有任何增量,則處理迅速停止。參考圖10對(duì)此進(jìn)行了更詳細(xì)的描述。
參考圖10,如在此所描述的那樣,既在當(dāng)前成員處又在加入成員處執(zhí)行處理。首先,在步1000中,當(dāng)前成員將其最后改變的時(shí)戳發(fā)送給加入成員,并且加入者將其最后改變的時(shí)戳發(fā)送給當(dāng)前成員。在此之后,加入成員和當(dāng)前成員中的每一個(gè)對(duì)當(dāng)前成員的改變首項(xiàng)是否等于加入成員的改變首項(xiàng)進(jìn)行判斷。在這一例子中,每個(gè)成員都知道另一個(gè)成員的首項(xiàng);然而,在另一個(gè)實(shí)施例中,對(duì)改變首項(xiàng)信息進(jìn)行交換。如果改變首項(xiàng)不同,則不對(duì)時(shí)戳進(jìn)行比較,因此在步1006中,如果有增量,則當(dāng)前成員和加入成員都將處理增量。然而,如果當(dāng)前成員的改變首項(xiàng)與加入成員的改變首項(xiàng)相等,則在詢(xún)問(wèn)1004中進(jìn)一步對(duì)當(dāng)前的LCTS是否與加入的LCTS相等進(jìn)行判斷。如果當(dāng)前的LCTS與加入的LCTS相等,則在步1008中沒(méi)有增量需要處理,并且處理完成。然而,如果當(dāng)前的LCTS與加入的LCTS不相等,則在詢(xún)問(wèn)1010中進(jìn)一步對(duì)當(dāng)前LCTS是否大于加入成員的LCTS進(jìn)行判斷。如果當(dāng)前LCTS大于加入成員的LCTS,則在步1012中當(dāng)前成員可能具有增量。然而,如果當(dāng)前成員的LCTS小于或等于加入的LCTS,則在步1014中加入成員可能具有需要處理的增量。如果在步1006和步1014中有需要處理的增量,則在步1016中,如以上參考圖6A和圖6B所述的那樣,處理從確定是否有任何增量開(kāi)始繼續(xù)進(jìn)行。
在上面的實(shí)施例中,如果沒(méi)有需要處理的增量,則處理結(jié)束。如果加入者或當(dāng)前成員具有需要處理的增量,則處理繼續(xù)。當(dāng)前成員將它的表的元數(shù)據(jù)(例如,成員ID、CL以及LCTS)發(fā)送給加入者,并且加入者將它的表的元數(shù)據(jù)發(fā)送給當(dāng)前成員。對(duì)于每個(gè)表,分別對(duì)每個(gè)元數(shù)據(jù)的值進(jìn)行比較。在當(dāng)前成員或加入成員上只對(duì)那些具有增量的表進(jìn)行處理。
在上述的例子中,已經(jīng)假設(shè)成員在集群中的存在表示已經(jīng)合并了在其中成員是改變首項(xiàng)的任意改變。然而,如果在特定成員上丟失了數(shù)據(jù),則情況將不是這樣。例如,如果例如由于表刪除或替代,成員(例如,節(jié)點(diǎn))上的成員構(gòu)成表全部丟失,則成員已經(jīng)忘記了當(dāng)它作為改變首項(xiàng)存在時(shí)所進(jìn)行的改變。該成員就叫做一個(gè)“健忘”的成員。
對(duì)于健忘的成員,對(duì)元數(shù)據(jù)進(jìn)行交換以使得可以確定這種情況。當(dāng)對(duì)表進(jìn)行改變時(shí),將針對(duì)該已改變的時(shí)戳保存為表中的元數(shù)據(jù)(CL.CTS),并且作為整組表的元數(shù)據(jù)。因此,每個(gè)表記錄所應(yīng)用的最后時(shí)戳,并且成員構(gòu)成表記錄應(yīng)用到任意表的最后時(shí)戳。當(dāng)成員加入時(shí),其與當(dāng)前的集群交換這組元數(shù)據(jù),并且因此,可以確定該成員是否已經(jīng)忘記了它的任何改變。例如,如果表已經(jīng)被移除,則將元數(shù)據(jù)時(shí)戳交換為CL=0,CTS=0。這直接意味著包含在集群成員上的表應(yīng)當(dāng)在不考慮任何增量的情況下被使用。如果成員是加入該集群的第一個(gè)成員,則加入成員將發(fā)現(xiàn)整個(gè)數(shù)據(jù)表都將被看做增量并被用來(lái)與當(dāng)前成員進(jìn)行交換。
為了處理從不同成員移動(dòng)或恢復(fù)表的情況,表的元數(shù)據(jù)還包含成員標(biāo)識(shí)。因此,在導(dǎo)入后,成員能夠確定該表是否是在其自身上創(chuàng)建的,并且如果不是,則忽略并移除該表,用包含于加入成員的集群中的當(dāng)前信息對(duì)該表進(jìn)行替換。
如果重置了成員的系統(tǒng)時(shí)間,從而使時(shí)間值不再是單調(diào)遞增的,則這也可以被發(fā)現(xiàn),因此不會(huì)使改變具有不正確的時(shí)戳。為了處理這一點(diǎn),成員構(gòu)成表的元數(shù)據(jù)還包含由成員自身形成的用于LCTS的條目。因此,在導(dǎo)入后,如果元數(shù)據(jù)LCTS小于系統(tǒng)時(shí)間,則將使用的值是LCTS+1,直到系統(tǒng)時(shí)間之類(lèi)的時(shí)間重置為正確的值,或系統(tǒng)時(shí)間跟上改變計(jì)數(shù)器為止。這確保了值保持單調(diào)遞增。
如果兩種情況同時(shí)發(fā)生,則重置系統(tǒng)時(shí)間并將表恢復(fù)到前一個(gè)鏡像,以成員作為改變首項(xiàng)的一些改變將以大于正由成員使用的單調(diào)確定的值的CTS值存在于集群中。在這種情況下,復(fù)制的已解決的成員構(gòu)成表包括晚于在成員上使用的單調(diào)遞增的值的LCTS值。當(dāng)檢測(cè)到這一點(diǎn)時(shí),將該值重置為包含于復(fù)制的成員構(gòu)成表中作為該表的條目的值LCTS+1。
此外,如果將表恢復(fù)到先前的版本,并且將計(jì)時(shí)器向后調(diào),則檢查接收到的成員構(gòu)成表以查看LCTS是否大于所記錄的LCTS,并且將時(shí)戳設(shè)定為較大的值。對(duì)于多個(gè)加入者,這一處理相對(duì)于所有的成員構(gòu)成表,即當(dāng)前成員和所有加入者而進(jìn)行。在增量處理期間進(jìn)行檢測(cè)是因?yàn)樽钚碌臅r(shí)戳存在于增量中。因此,該邏輯是如果row.CL==該成員&&row.CTS>該成員的MT[該成員],則將計(jì)時(shí)器更新為單調(diào)遞增的。(注意,這將時(shí)戳恢復(fù)為該成員為CL時(shí)的最后CTS。如果其他的成員未對(duì)改變進(jìn)行記錄,則有可能在數(shù)據(jù)表被替換時(shí)這些改變已經(jīng)丟失。)下面描述與健忘的成員相關(guān)聯(lián)的處理的例子。
例3健忘的成員(例如,節(jié)點(diǎn))時(shí)間動(dòng)作16:00 N1和N2是所定義的節(jié)點(diǎn)。
20:36 N1和N2開(kāi)啟并運(yùn)行,以N1作為主項(xiàng)。
23:45 將一個(gè)備份鏡像切換到磁帶上。
00:01 進(jìn)行一個(gè)改變(C1).
00:45 N1發(fā)生故障,N2成為主項(xiàng)。
01:15 進(jìn)行另一個(gè)改變(C2)。
02:15 一個(gè)人停止了N2。
02:23 N1被擦除(scratch)并從備份磁帶上重新加載。
03:02 N1啟動(dòng)。
03:04 N2啟動(dòng)并加入到與N1一起。改變C1和C2都只存在于N2上。
與上面的例子相似,當(dāng)N2計(jì)算其增量時(shí),C1和C2都在增量中,原因是在進(jìn)行這些改變之前就恢復(fù)了成員構(gòu)成表,N1和N2的LCTS都來(lái)自第一次備份發(fā)生之前。改變C1和C2在備份之后,因此當(dāng)N2加入時(shí),N2將正確地將C1和C2放在其增量中。N1接受了這兩個(gè)改變,原因是每一行的CTS都大于該行的CL的LCTS,并且這些行的N1的CTS小于N2針對(duì)這些行的CL而具有的LCTS。
上面詳細(xì)描述了用于在諸如集群成員之類(lèi)的獨(dú)立更新的條目之間提供一致的信息的協(xié)調(diào)處理。除了上述內(nèi)容之外,在此還敘述了兩種情形。一種情形是當(dāng)表中的行被刪除時(shí)的情形,并且另一種情形是處理刪除的成員。
當(dāng)數(shù)據(jù)表中的一行被刪除時(shí),其被標(biāo)記為已經(jīng)被刪除,但是仍保留在數(shù)據(jù)表中。處理這種已刪除的行的一種方式是一旦刪除了一行就不允許改變。因此,如果檢測(cè)到增量改變,則忽略該改變并且該行仍保持為已刪除狀態(tài)。保留已經(jīng)被刪除的行,直到集群的所有成員都在線為止,此時(shí)將這些“未處理的刪除”行從復(fù)制到加入成員的數(shù)據(jù)表中移除。如果在所有成員在線的同時(shí)刪除行,則無(wú)需將該行保留為“未處理的”并且可以移除該行。
如同對(duì)任意其他的數(shù)據(jù)行那樣處理已刪除的行。其包括指示出進(jìn)行刪除的時(shí)間的時(shí)戳,并且可以作為增量被檢測(cè)并在加入處理期間被處理。一種潛在的機(jī)制是將刪除看做相對(duì)于改變具有優(yōu)先權(quán)。因此,如果在沖突解決期間檢測(cè)到行的增量改變,則對(duì)刪除進(jìn)行處理,而不是進(jìn)行改變。
如果將刪除的行添加回表中(該行的關(guān)鍵字與已刪除的行的關(guān)鍵字相同),則如果成員都未記錄了對(duì)該行的未處理的刪除,則保留該行。還存在其他的機(jī)制,其在這些情況下通過(guò)使沖突解決處理確定應(yīng)當(dāng)保留哪一行來(lái)實(shí)現(xiàn)正確的處理。
在一個(gè)實(shí)施例中,對(duì)已刪除的行進(jìn)行累積,直到每個(gè)成員都加入了該集群為止。如果所有的成員都存在于集群中,則可知每個(gè)成員都已經(jīng)看到了該已刪除的行并且該已刪除的行可以被丟棄。
當(dāng)刪除一個(gè)成員時(shí),在成員構(gòu)成表中將該成員標(biāo)記為已刪除,并且將其保留在成員構(gòu)成表中,直到所有的成員都已經(jīng)加入為止。將已刪除的成員保留在成員構(gòu)成表中是因?yàn)槠涑蓡TID(標(biāo)識(shí))和時(shí)戳可能在數(shù)據(jù)表中,并且該信息被用于確定增量。然而,已刪除的成員不計(jì)算在所需的成員數(shù)目中,以便丟棄已刪除的行或已刪除的成員。
當(dāng)所有已定義的成員都已經(jīng)加入集群時(shí),從成員構(gòu)成表中丟棄已刪除的成員。將數(shù)據(jù)表處理為移除該已刪除成員的條目。在表被復(fù)制之前,以該已刪除的成員作為改變首項(xiàng)值的行替換它們的時(shí)戳以表明處理該加入的當(dāng)前集群成員是改變首項(xiàng)并且當(dāng)前的時(shí)戳是已改變的時(shí)戳,使得數(shù)據(jù)表的行都不指向已刪除的成員。這一處理是以不可再分的方式進(jìn)行的,因此從成員構(gòu)成表中刪除成員并改變時(shí)戳標(biāo)簽是以不可再分的方式進(jìn)行的。如果這些動(dòng)作之一失敗,則它們就都失敗。
在又一個(gè)實(shí)施例中,還處理已添加的成員的情況。在此,一個(gè)成員上的成員構(gòu)成表具有比另一個(gè)成員上的成員構(gòu)成表更多的條目。在這種情況下,如果時(shí)戳屬于一個(gè)不存在于成員構(gòu)成表中的改變首項(xiàng),則其被假設(shè)為一個(gè)增量。當(dāng)解決成員構(gòu)成表?xiàng)l目時(shí),將該條目添加到成員構(gòu)成表。
在另一個(gè)實(shí)施例中,不是單獨(dú)的節(jié)點(diǎn)個(gè)別地加入,而是通過(guò)拆分創(chuàng)建的兩個(gè)子集群在修復(fù)拆分之后又回到一起。在這種場(chǎng)景中,來(lái)自于一個(gè)子集群的一個(gè)成員被看做是當(dāng)前成員,并且另一個(gè)子集群的一個(gè)成員被看做是加入者。在該加入子集群中的所有成員不需要處理合并步,但是需要進(jìn)行增量應(yīng)用和提交的處理。(注意,有可能有多于兩個(gè)子集群進(jìn)行合并,并且因此仍會(huì)有多個(gè)加入者——來(lái)自于除了從中選擇當(dāng)前成員的那個(gè)子集群之外的每個(gè)子集群的加入者)。
以上詳細(xì)描述了用于幫助協(xié)調(diào)通信環(huán)境的獨(dú)立更新的分布式數(shù)據(jù)的能力。為了協(xié)調(diào)數(shù)據(jù),使用了局部單調(diào)遞增的值。這些值的一個(gè)例子是本地時(shí)戳。這些時(shí)戳是單調(diào)遞增的,因此確保了在更新中使用的將來(lái)的時(shí)戳早于先前的時(shí)戳。通過(guò)使用局部單調(diào)遞增的值,在不需要集中式更新日志,集中式數(shù)據(jù)服務(wù)器,共享磁盤(pán)或其他的共享介質(zhì),或者硬件時(shí)鐘的情況下對(duì)更新進(jìn)行有利的協(xié)調(diào)。此外,在不需要定數(shù)的情況下進(jìn)行協(xié)調(diào)。
在本發(fā)明的一個(gè)或多個(gè)方面中,以這樣一種方式在多個(gè)正在進(jìn)行通信的節(jié)點(diǎn)之間復(fù)制永久性的數(shù)據(jù),即允許在任意時(shí)間段上當(dāng)未與其余節(jié)點(diǎn)進(jìn)行通信的節(jié)點(diǎn)(包括已經(jīng)從一組節(jié)點(diǎn)中被刪除的節(jié)點(diǎn))的任意子集可能已經(jīng)對(duì)數(shù)據(jù)進(jìn)行了更新時(shí),節(jié)點(diǎn)同時(shí)對(duì)已明確更新的數(shù)據(jù)條目以及未明確更新的條目進(jìn)行正確的標(biāo)識(shí),允許在一些節(jié)點(diǎn)上刪除數(shù)據(jù)條目并且允許對(duì)從節(jié)點(diǎn)上丟失的數(shù)據(jù)進(jìn)行檢測(cè)。
盡管上文已經(jīng)描述了多個(gè)例子,但在不偏離本發(fā)明的精神的情況下,可以進(jìn)行多種變更。例如,除了在此描述的那些環(huán)境之外的環(huán)境也可以包含和使用本發(fā)明的一個(gè)或多個(gè)方面。例如,盡管已經(jīng)參考集群式環(huán)境描述了本發(fā)明的一個(gè)或多個(gè)方面,但是這只是一個(gè)例子。任何具有待協(xié)調(diào)的獨(dú)立更新的數(shù)據(jù)的環(huán)境都可以使用本發(fā)明的一個(gè)或多個(gè)方面。此外,集群或其他環(huán)境的成員可以不是節(jié)點(diǎn),諸如可以是虛擬機(jī)或其他類(lèi)型的實(shí)體。此外,在其他的實(shí)施例中,為了執(zhí)行用于協(xié)調(diào)獨(dú)立更新的數(shù)據(jù)的加入處理或其他處理,可以進(jìn)行一種或多種優(yōu)化或其他改變。在其他的例子中,附加的、不同的或更少的邏輯可以作為協(xié)調(diào)組件的一部分。還有可能有多種其他的變更。
此外,盡管這些例子使用了時(shí)戳,但是可以使用任意的單調(diào)遞增的值,包括但不限于計(jì)數(shù)器。時(shí)戳只是一個(gè)例子。
本發(fā)明的一個(gè)或多個(gè)方面的能力可以以軟件、固件、硬件或它們的某些組合來(lái)實(shí)現(xiàn)。
本發(fā)明的一個(gè)或多個(gè)方面可以包括在具有例如計(jì)算機(jī)可讀介質(zhì)的一種制造產(chǎn)品(例如一個(gè)或多個(gè)計(jì)算機(jī)程序產(chǎn)品)中。該介質(zhì)中具有例如用以提供和實(shí)現(xiàn)本發(fā)明能力的計(jì)算機(jī)可讀程序代碼裝置或邏輯(例如指令、代碼、命令等)。這種制造產(chǎn)品可以作為計(jì)算機(jī)系統(tǒng)的一部分而包括或單獨(dú)地進(jìn)行銷(xiāo)售。
另外,可以提供機(jī)器可讀的至少一種程序存儲(chǔ)裝置,其包含至少一個(gè)指令程序,該指令程序可由機(jī)器來(lái)執(zhí)行以實(shí)現(xiàn)本發(fā)明能力。
在此描述的流程圖僅僅是例子。在不偏離本發(fā)明的精神的情況下,可以對(duì)在此描述的這些示圖或步驟(或操作)進(jìn)行多種變更。例如,可以以不同次序來(lái)執(zhí)行各步驟,或可以添加、刪除或修改各步驟。所有這些變更都應(yīng)看做是所要求保護(hù)的發(fā)明的一部分。
盡管在此已經(jīng)詳細(xì)示出和描述了優(yōu)選的實(shí)施例,但是本領(lǐng)域的普通技術(shù)人員將很容易理解,在不偏離本發(fā)明精神的情況下,可以進(jìn)行各種修改、添加、替換等,并且因此這些修改、添加、替換等都應(yīng)看做是在所附權(quán)利要求書(shū)中所限定的本發(fā)明的范圍之內(nèi)。
權(quán)利要求
1.一種幫助協(xié)調(diào)分布式通信環(huán)境的數(shù)據(jù)的方法,所述方法包括確定所述分布式通信環(huán)境的一組分布式數(shù)據(jù)與所述分布式通信環(huán)境的另一組分布式數(shù)據(jù)是否一致,其中所述確定包括在所述確定中使用一個(gè)或多個(gè)局部單調(diào)遞增的值;以及響應(yīng)于所述確定,對(duì)所述一組分布式數(shù)據(jù)和所述另一組分布式數(shù)據(jù)中的至少一組分布式數(shù)據(jù)進(jìn)行更新,以協(xié)調(diào)所述一組分布式數(shù)據(jù)與所述另一組分布式數(shù)據(jù)之間的一處或多處不一致。
2.根據(jù)權(quán)利要求1所述的方法,其中所述使用包括將所述一組分布式數(shù)據(jù)的局部單調(diào)遞增的值與所述另一組分布式數(shù)據(jù)的局部單調(diào)遞增的值進(jìn)行比較。
3.根據(jù)權(quán)利要求1所述的方法,其中所述分布式通信環(huán)境包括集群式環(huán)境,所述一組分布式數(shù)據(jù)包括所述集群式環(huán)境的集群的一個(gè)成員的數(shù)據(jù),并且所述另一組分布式數(shù)據(jù)包括所述集群的另一個(gè)成員的數(shù)據(jù)。
4.根據(jù)權(quán)利要求3所述的方法,其中所述一個(gè)成員包括所述集群的當(dāng)前成員并且所述另一個(gè)成員包括所述集群的加入成員,并且其中所述使用包括將所述加入成員的局部單調(diào)遞增的值與從所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得的局部單調(diào)遞增的值進(jìn)行比較,以確定所述加入成員是否具有一個(gè)或多個(gè)增量,其中與所述加入成員的局部單調(diào)遞增的值相關(guān)聯(lián)的值是為了從所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得局部單調(diào)遞增的值而用于所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引;以及將所述當(dāng)前成員的局部單調(diào)遞增的值與從所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得的局部單調(diào)遞增的值進(jìn)行比較,以確定所述當(dāng)前成員是否具有一個(gè)或多個(gè)增量,其中與所述當(dāng)前成員的局部單調(diào)遞增的值相關(guān)聯(lián)的值是為了從所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得局部單調(diào)遞增的值而用于所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引。
5.根據(jù)權(quán)利要求4所述的方法,其中用于所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引的值包括對(duì)與所述加入成員的局部單調(diào)遞增的值相關(guān)聯(lián)的數(shù)據(jù)的改變首項(xiàng)的指示,并且其中用于所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引的值包括對(duì)與所述當(dāng)前成員的局部單調(diào)遞增的值相關(guān)聯(lián)的數(shù)據(jù)的改變首項(xiàng)的指示。
6.根據(jù)權(quán)利要求1所述的方法,其中所述分布式通信環(huán)境包括集群式環(huán)境,所述一組分布式數(shù)據(jù)包括所述集群式環(huán)境的集群的當(dāng)前成員的數(shù)據(jù),并且所述另一組分布式數(shù)據(jù)包括所述集群的加入成員的數(shù)據(jù),并且其中所述使用包括將所述當(dāng)前成員的局部單調(diào)遞增的時(shí)間值與所述加入成員的局部單調(diào)遞增的時(shí)間值進(jìn)行比較,以確定所述當(dāng)前成員和所述加入成員中的一個(gè)或多個(gè)是否具有相對(duì)于對(duì)方的一個(gè)或多個(gè)增量。
7.根據(jù)權(quán)利要求6所述的方法,其中所述比較是響應(yīng)于所述當(dāng)前成員的改變首項(xiàng)與所述加入成員的改變首項(xiàng)的比較結(jié)果為相等而進(jìn)行的。
8.根據(jù)權(quán)利要求1所述的方法,其中在所述分布式通信環(huán)境的一個(gè)通信節(jié)點(diǎn)上維護(hù)所述一組分布式數(shù)據(jù),并且所述另一組分布式數(shù)據(jù)是所述一組分布式數(shù)據(jù)的一組復(fù)制數(shù)據(jù)并且在所述分布通信環(huán)境的另一通信節(jié)點(diǎn)上維護(hù)所述另一組分布式數(shù)據(jù),并且其中當(dāng)所述一個(gè)通信節(jié)點(diǎn)與所述另一通信節(jié)點(diǎn)彼此不進(jìn)行通信時(shí),作為對(duì)所述一組分布式數(shù)據(jù)和所述另一組分布式數(shù)據(jù)中的至少一組分布式數(shù)據(jù)進(jìn)行更新的結(jié)果,存在一處或多處不一致。
9.一種幫助協(xié)調(diào)集群式通信環(huán)境的數(shù)據(jù)的方法,所述方法包括由加入成員發(fā)起加入所述集群式通信環(huán)境的一個(gè)集群的操作,所述集群包括至少一個(gè)當(dāng)前成員;由所述至少一個(gè)當(dāng)前成員中的當(dāng)前成員向所述加入成員提供當(dāng)前成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);由所述加入成員確定一組增量,所述一組增量包括所述加入成員與所述當(dāng)前成員之間的零處或多處數(shù)據(jù)不一致,所述確定使用至少一個(gè)局部單調(diào)遞增的值;由所述加入成員向所述當(dāng)前成員提供所述一組增量以及加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);由所述當(dāng)前成員確定一組增量,所述一組增量包括所述當(dāng)前成員與所述加入成員之間的零處或多處數(shù)據(jù)不一致,所述確定使用至少一個(gè)局部單調(diào)遞增的值;由所述當(dāng)前成員解決所述加入成員的一組增量與所述當(dāng)前成員的一組增量之間的零處或多處沖突,以提供一組已解決的增量;以及向所述集群的一個(gè)或多個(gè)成員,包括所述加入成員提供所述一組已解決的增量。
10.根據(jù)權(quán)利要求9所述的方法,其中由所述加入成員確定增量包括從所述加入成員的數(shù)據(jù)結(jié)構(gòu)中選擇數(shù)據(jù)行;確定當(dāng)所述數(shù)據(jù)行最后一次改變時(shí)所述當(dāng)前成員是否存在于所述集群中,所述確定使用至少一個(gè)局部單調(diào)遞增的值;以及針對(duì)所述數(shù)據(jù)結(jié)構(gòu)的零個(gè)或多個(gè)數(shù)據(jù)行重復(fù)所述選擇和確定。
11.根據(jù)權(quán)利要求9所述的方法,其中由所述當(dāng)前成員確定增量包括從所述當(dāng)前成員的數(shù)據(jù)結(jié)構(gòu)中選擇數(shù)據(jù)行;確定當(dāng)所述數(shù)據(jù)行最后一次改變時(shí)所述加入成員是否存在于所述集群中,所述確定使用至少一個(gè)局部單調(diào)遞增的值;以及針對(duì)所述數(shù)據(jù)結(jié)構(gòu)的零個(gè)或多個(gè)數(shù)據(jù)行重復(fù)所述選擇和確定。
12.根據(jù)權(quán)利要求9所述的方法,其中所述發(fā)起包括同時(shí)向所述集群加入多個(gè)加入成員。
13.根據(jù)權(quán)利要求9所述的方法,其中所述加入成員的一組增量和所述當(dāng)前成員的一組增量中的至少一組增量包括已刪除的行,并且其中保留所述已刪除的行,直到所述集群的所有非活動(dòng)成員都已經(jīng)加入所述集群為止。
14.根據(jù)權(quán)利要求9所述的方法,其中具有復(fù)制的且彼此一致的數(shù)據(jù)的多個(gè)加入成員準(zhǔn)備加入所述集群,并且其中所述多個(gè)加入成員中的單個(gè)加入成員與所述發(fā)起、由當(dāng)前成員進(jìn)行的提供、由所述加入成員進(jìn)行的確定、由所述加入成員進(jìn)行的提供、由所述當(dāng)前成員進(jìn)行的確定以及所述解決相關(guān)聯(lián)。
15.一種幫助協(xié)調(diào)分布式通信環(huán)境的數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括用于確定所述分布式通信環(huán)境的一組分布式數(shù)據(jù)與所述分布式通信環(huán)境的另一組分布式數(shù)據(jù)是否一致的裝置,其中所述用于確定的裝置包括用于在所述確定中使用一個(gè)或多個(gè)局部單調(diào)遞增的值的裝置;以及用于響應(yīng)于所述確定而對(duì)所述一組分布式數(shù)據(jù)和所述另一組分布式數(shù)據(jù)中的至少一組分布式數(shù)據(jù)進(jìn)行更新以協(xié)調(diào)所述一組分布式數(shù)據(jù)與所述另一組分布式數(shù)據(jù)之間的一處或多處不一致的裝置。
16.根據(jù)權(quán)利要求15所述的系統(tǒng),其中所述用于使用一個(gè)或多個(gè)局部單調(diào)遞增的值的裝置包括用于將所述一組分布式數(shù)據(jù)的局部單調(diào)遞增的值與所述另一組分布式數(shù)據(jù)的局部單調(diào)遞增的值進(jìn)行比較的裝置。
17.根據(jù)權(quán)利要求15所述的系統(tǒng),其中所述分布式通信環(huán)境包括集群式環(huán)境,所述一組分布式數(shù)據(jù)包括所述集群式環(huán)境的集群的當(dāng)前成員的數(shù)據(jù),并且所述另一組分布式數(shù)據(jù)包括所述集群的加入成員的數(shù)據(jù),并且其中所述用于使用一個(gè)或多個(gè)局部單調(diào)遞增的值的裝置包括用于將所述加入成員的局部單調(diào)遞增的值與從所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得的局部單調(diào)遞增的值進(jìn)行比較以確定所述加入成員是否具有一個(gè)或多個(gè)增量的裝置,其中與所述加入成員的局部單調(diào)遞增的值相關(guān)聯(lián)的值是為了從所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得所述局部單調(diào)遞增的值而用于所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引;以及用于將所述當(dāng)前成員的局部單調(diào)遞增的值與從所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得的局部單調(diào)遞增的值進(jìn)行比較以確定所述當(dāng)前成員是否具有一個(gè)或多個(gè)增量的裝置,其中與所述當(dāng)前成員的局部單調(diào)遞增的值相關(guān)聯(lián)的值是為了從所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中獲得所述局部單調(diào)遞增的值而用于所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其中用于所述當(dāng)前成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引的值包括對(duì)與所述加入成員的局部單調(diào)遞增的值相關(guān)聯(lián)的數(shù)據(jù)的改變首項(xiàng)的指示,并且其中用于所述加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu)中的索引的值包括對(duì)與所述當(dāng)前成員的局部單調(diào)遞增的值相關(guān)聯(lián)的數(shù)據(jù)的改變首項(xiàng)的指示。
19.根據(jù)權(quán)利要求15所述的系統(tǒng),其中所述分布式通信環(huán)境包括集群式環(huán)境,所述一組分布式數(shù)據(jù)包括所述集群式環(huán)境的集群的當(dāng)前成員的數(shù)據(jù),并且所述另一組分布式數(shù)據(jù)包括所述集群的加入成員的數(shù)據(jù),并且其中所述使用包括將所述當(dāng)前成員的局部單調(diào)遞增的時(shí)間值與所述加入成員的局部單調(diào)遞增的時(shí)間值進(jìn)行比較,以確定所述當(dāng)前成員和所述加入成員中的一個(gè)或多個(gè)是否具有相對(duì)于對(duì)方的一個(gè)或多個(gè)增量。
20.根據(jù)權(quán)利要求19所述的系統(tǒng),其中所述比較是響應(yīng)于所述當(dāng)前成員的改變首項(xiàng)與所述加入成員的改變首項(xiàng)的比較結(jié)果為相等而進(jìn)行的。
21.一種幫助協(xié)調(diào)集群式通信環(huán)境的數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括加入成員,發(fā)起加入所述集群式通信環(huán)境的集群的操作,所述集群包括至少一個(gè)當(dāng)前成員;所述至少一個(gè)當(dāng)前成員中的當(dāng)前成員,其向所述加入成員提供當(dāng)前成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);所述加入成員確定一組增量,所述一組增量包括所述加入成員與所述當(dāng)前成員之間的零處或多處數(shù)據(jù)不一致,所述確定使用至少一個(gè)局部單調(diào)遞增的值;所述加入成員向所述當(dāng)前成員提供所述一組增量以及加入成員的成員構(gòu)成數(shù)據(jù)結(jié)構(gòu);所述當(dāng)前成員確定一組增量,所述一組增量包括所述當(dāng)前成員與所述加入成員之間的零處或多處數(shù)據(jù)不一致,所述確定使用至少一個(gè)局部單調(diào)遞增的值;所述當(dāng)前成員解決所述加入成員的一組增量與所述當(dāng)前成員的一組增量之間的零處或多處沖突,以提供一組已解決的增量;以及所述集群的一個(gè)或多個(gè)成員,包括所述加入成員,其被提供所述一組已解決的增量。
22.根據(jù)權(quán)利要求21所述的系統(tǒng),其中所述加入成員確定所述一組增量包括所述加入成員從所述加入成員的數(shù)據(jù)結(jié)構(gòu)中選擇數(shù)據(jù)行;確定當(dāng)所述數(shù)據(jù)行最后一次改變時(shí)所述當(dāng)前成員是否存在于所述集群中,所述確定使用至少一個(gè)局部單調(diào)遞增的值;以及針對(duì)所述數(shù)據(jù)結(jié)構(gòu)的零個(gè)或多個(gè)數(shù)據(jù)行重復(fù)所述選擇和確定。
23.根據(jù)權(quán)利要求21所述的系統(tǒng),其中所述當(dāng)前成員確定所述一組增量包括所述當(dāng)前成員從所述當(dāng)前成員的數(shù)據(jù)結(jié)構(gòu)中選擇數(shù)據(jù)行;確定當(dāng)所述數(shù)據(jù)行最后一次改變時(shí)所述加入成員是否存在于所述集群中,所述確定使用至少一個(gè)局部單調(diào)遞增的值;以及針對(duì)所述數(shù)據(jù)結(jié)構(gòu)的零個(gè)或多個(gè)數(shù)據(jù)行重復(fù)所述選擇和確定。
24.根據(jù)權(quán)利要求21所述的系統(tǒng),其中具有復(fù)制的且彼此一致的數(shù)據(jù)的多個(gè)加入成員準(zhǔn)備加入所述集群,并且其中所述多個(gè)加入成員中的單個(gè)加入成員與所述發(fā)起、由當(dāng)前成員進(jìn)行的提供、由所述加入成員進(jìn)行的確定、由所述加入成員進(jìn)行的提供、由所述當(dāng)前成員進(jìn)行的確定以及所述解決相關(guān)聯(lián)。
25.一種產(chǎn)品,包括至少一個(gè)計(jì)算機(jī)可用介質(zhì),所述計(jì)算機(jī)可用介質(zhì)具有用于幫助協(xié)調(diào)分布式通信環(huán)境的數(shù)據(jù)的計(jì)算機(jī)可讀程序代碼邏輯,所述計(jì)算機(jī)可讀程序代碼邏輯包括用于執(zhí)行根據(jù)權(quán)利要求1-15中任意一項(xiàng)所述的步驟的指令。
全文摘要
對(duì)分布式通信環(huán)境的獨(dú)立更新的數(shù)據(jù)進(jìn)行協(xié)調(diào)以便向該環(huán)境的多個(gè)成員,諸如集群式環(huán)境的集群的多個(gè)成員提供一致的數(shù)據(jù)。使用局部單調(diào)遞增的值來(lái)協(xié)調(diào)數(shù)據(jù)。在協(xié)調(diào)不一致的數(shù)據(jù)時(shí)所用的一類(lèi)局部單調(diào)遞增的值是本地時(shí)戳。
文檔編號(hào)H04L29/08GK1964297SQ200610148459
公開(kāi)日2007年5月16日 申請(qǐng)日期2006年11月10日 優(yōu)先權(quán)日2005年11月10日
發(fā)明者杰弗里·S·盧卡施, 羅伯特·米勒 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司