專利名稱:帶復(fù)制的一致消息收發(fā)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及消息收發(fā),尤其涉及帶復(fù)制的一致消息收發(fā)。
背景技術(shù):
消息收發(fā)系統(tǒng)提供計算機(jī)網(wǎng)絡(luò)中計算設(shè)備之間存儲和轉(zhuǎn)發(fā)消息的基本功能。在計算機(jī)編程上下文中,消息收發(fā)用于在應(yīng)用組件之間交換消息。在一個示例中,消息收發(fā)系統(tǒng)以客戶機(jī)-服務(wù)器模型實現(xiàn)。消息收發(fā)服務(wù)器常常以包括點對點消息收發(fā)和發(fā)布-訂閱消息收發(fā)的兩種模式的一種或兩者來組織。使用消息收發(fā)實體來實現(xiàn)模式,其為用于接收和分發(fā)消息的消息收發(fā)原語。隊列是可實現(xiàn)點對模式的消息收發(fā)實體的示例。發(fā)送者將消息放置在隊伍中直到接收者取回它們。主題是可實現(xiàn)發(fā)布-訂閱模式的消息收發(fā)實體的示例。發(fā)布者將消息放置在主題中,而一個或多個訂閱者可消費(fèi)該消息。這些模式常常提供異步通信協(xié)議,使得消息的發(fā)送者和接收者,或發(fā)布者和訂閱者不需要同時與消息實體交互。消息收發(fā)系統(tǒng)用于解耦合應(yīng)用組件之間的通信,也用于連接跨網(wǎng)絡(luò)邊界的實體。 因此,分布式計算系統(tǒng)中的應(yīng)用組件,例如,可以可靠地交換數(shù)據(jù)并提供應(yīng)用一致性。許多分布式計算系統(tǒng)(包括云計算)應(yīng)用消息收發(fā)系統(tǒng)以提供為整個網(wǎng)絡(luò)中的數(shù)據(jù)和事件的異步交換提供可靠方便的機(jī)制。
發(fā)明內(nèi)容
提供本發(fā)明內(nèi)容以便以簡化的形式介紹將在以下的詳細(xì)描述中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。在一個通用示例中,本發(fā)明涉及在分布式計算系統(tǒng)中的多個通信地耦合的節(jié)點的第一節(jié)點的存儲器內(nèi)配置的消息收發(fā)實體。消息收發(fā)實體被配置為作為通信地耦合的節(jié)點的消息收發(fā)服務(wù)器中的備份,或輔消息收發(fā)實體來運(yùn)行。輔消息收發(fā)實體通信地耦合到配置在多個節(jié)點的第二節(jié)點的存儲器中的主消息收發(fā)實體。配置主消息收發(fā)實體來存儲從分布式計算系統(tǒng)傳遞給它的消息。配置輔消息收發(fā)實體來存儲消息的副本。此外,配置輔消息收發(fā)實體以在主消息收發(fā)實體故障時提升為新的主消息收發(fā)實體。在一個示例中,消息收發(fā)服務(wù)器包括用一致結(jié)構(gòu)耦合在一起的多個節(jié)點。消息收發(fā)實體跨結(jié)構(gòu)中的節(jié)點分布,諸如分布在各個分開的消息收發(fā)服務(wù)器中。消息收發(fā)實體可被配置為節(jié)點的存儲器中的數(shù)據(jù)結(jié)構(gòu)。配置來提供處理的消息收發(fā)實體可被指定為主消息收發(fā)實體。每個主消息收發(fā)實體對應(yīng)于至少一個大致相同的也被配置來提供主消息收發(fā)實體的處理的輔消息收發(fā)實體。輔消息收發(fā)實體也跨結(jié)構(gòu)中的節(jié)點分布。當(dāng)消息到達(dá)主消息收發(fā)實體,該消息的副本被提供給對應(yīng)的輔消息收發(fā)實體。一旦輔消息收發(fā)實體接收到消息副本,它向主消息收發(fā)實體提供確認(rèn)。一旦主消息收發(fā)實體接收選定數(shù)量的確認(rèn),消息提交且消息被寫到主消息收發(fā)實體而副本被寫到確認(rèn)的輔消息
3收發(fā)實體??商峁└郊訌?fù)制技術(shù)以將主消息收發(fā)實體與對應(yīng)的輔消息收發(fā)實體同步。可配置一個或多個消息收發(fā)實體來持久地將消息寫入位于節(jié)點的存儲系統(tǒng)或共享的后端存儲系統(tǒng)。在包括主消息收發(fā)實體的節(jié)點故障的情況中,一致結(jié)構(gòu)將所選擇的對應(yīng)的已同步的輔消息收發(fā)實體提升為新的主消息收發(fā)實體。新的主消息收發(fā)實體繼續(xù)操作而沒有丟失數(shù)據(jù)或一致性且沒有影響消息收發(fā)服務(wù)器的性能的顯著的等待時間(如果有等待時間的話)。如果新的主消息收發(fā)實體故障,另一對應(yīng)的已同步的輔消息收發(fā)實體將被提升。對應(yīng)于主消息收發(fā)實體的輔消息收發(fā)實體的數(shù)量沒有限制,但是增加輔消息收發(fā)實體的數(shù)量以增加潛在等待時間為代價增加了一致性。在一些示例中,消息收發(fā)服務(wù)器可包括多個分布式主消息收發(fā)實體,每一個具有至少一個對應(yīng)輔實體。通常,主消息收發(fā)實體將在分開的節(jié)點上配置。節(jié)點還可主控相互不對應(yīng)的輔消息收發(fā)實體或位于同一處的一個或多個主消息收發(fā)實體。在故障的節(jié)點也包括輔消息收發(fā)實體的情況下,結(jié)構(gòu)可在還沒有對應(yīng)消息收發(fā)實體的節(jié)點上創(chuàng)建新的輔消息收發(fā)實體。
包括附圖來提供了對各實施例的進(jìn)一步理解,且這些附圖被合并在本發(fā)明書內(nèi)并構(gòu)成其一部分。附圖示出各實施例,并且與說明書一起用于解釋本發(fā)明的原理。其他實施例和各實施例的許多預(yù)期優(yōu)點將隨著參考下面的詳細(xì)描述進(jìn)行更好的理解而得到認(rèn)識。附圖的元素不一定相對于彼此而縮放。相同的附圖標(biāo)記指代對應(yīng)的類似部分。圖1是示出示例計算設(shè)備的框圖。圖2是示出了消息收發(fā)系統(tǒng)的示例的示意圖,它實現(xiàn)為包括圖1的計算設(shè)備的特征的計算設(shè)備的網(wǎng)絡(luò)。圖3是消息收發(fā)服務(wù)器的示例的示意圖,用于圖2的消息收發(fā)系統(tǒng),它實現(xiàn)為每一個可包括圖1的計算設(shè)備的特征的計算設(shè)備的網(wǎng)絡(luò)。圖4是示出了用于圖3的消息收發(fā)服務(wù)器的示例方法的框圖。圖5是示出了在設(shè)備故障后圖3的消息收發(fā)服務(wù)器的示意圖。
具體實施例方式在以下具體實施例中,對附圖進(jìn)行了參考,附圖構(gòu)成了實施例的一部分且在其中作為示例示出了可在其中實踐本發(fā)明的各特定實施例??梢岳斫?,可以使用其它實施例并且可以做出結(jié)構(gòu)上或邏輯上的改變而不背離本發(fā)明的范圍。因此,以下詳細(xì)描述并不旨在限制,并且本發(fā)明的范圍由所附權(quán)利要求來限定。應(yīng)理解,此處描述的各示例性實施例的特征可相互組合,除非另外具體注明。圖1示出了示例性計算機(jī)系統(tǒng),其可被用于諸如分布式計算系統(tǒng)或其他顯示的計算機(jī)網(wǎng)絡(luò)的操作環(huán)境中的組件。計算機(jī)系統(tǒng)可被用來運(yùn)行消息收發(fā)服務(wù)器并耦合到運(yùn)行客戶機(jī)應(yīng)用的計算機(jī)系統(tǒng)。示例性計算機(jī)系統(tǒng)包括計算設(shè)備,諸如計算設(shè)備100。在一基本配置中,計算設(shè)備100通常包括具有一個或多個處理單元(即,處理器10 的處理器系統(tǒng),以及存儲器104。取決于計算設(shè)備的確切配置和類型,存儲器104可以是易失性的(如隨機(jī)存取存儲器 (RAM))、非易失性的(諸如只讀存儲器(ROM)、閃存等)或兩者的某種組合。該基本配置在圖1中由虛線106來例示。該計算設(shè)備可采取若干形式中的一種或多種。這些形式包括個人計算機(jī)、服務(wù)器、手持式設(shè)備、消費(fèi)電子產(chǎn)品能(諸如視頻游戲控制臺)或其他設(shè)備。計算設(shè)備100還可具有附加特征或功能。例如,計算設(shè)備100還可包括附加存儲 (可移動和/或不可移動),包括但不限于磁盤或光盤或固態(tài)存儲器,或者閃速存儲設(shè)備, 諸如可移動存儲108和不可移動存儲110。計算機(jī)存儲介質(zhì)包括以用于存儲諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等的任何合適的方法或技術(shù)實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。存儲器104、可移動存儲108和不可移動存儲110都是計算機(jī)存儲介質(zhì)的示例。計算機(jī)存儲介質(zhì)包括,但不限于,RAM、R0M、EEPR0M、閃存或其它存儲器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲、磁帶盒、磁帶、磁盤存儲或其它磁性存儲設(shè)備、通用串行總線(USB)閃存驅(qū)動器、閃存卡、或能用于存儲所需信息且可以由計算設(shè)備100訪問的任何其它介質(zhì)。任何這樣的計算機(jī)存儲介質(zhì)都可以是計算設(shè)備100的一部分。計算設(shè)備100包括允許計算設(shè)備100與其它計算機(jī)/應(yīng)用114通信的一個或多個通信連接115。示例性通信連接可以是以太網(wǎng)接口。在一些示例中,計算設(shè)備也可具有一個或多個附加處理器或?qū)S锰幚砥?未示出),以執(zhí)行從處理器102卸載的處理功能。計算設(shè)備100還可包括諸如鍵盤、定點設(shè)備(例如,鼠標(biāo))、筆、語音輸入設(shè)備、觸摸輸入設(shè)備等的輸入設(shè)備112。計算設(shè)備100還可包括諸如顯示器、揚(yáng)聲器、打印機(jī)等的輸出設(shè)備111。計算設(shè)備100可被配置成運(yùn)行操作系統(tǒng)軟件程序以及一個或多個軟件應(yīng)用,這些構(gòu)成系統(tǒng)平臺。在一個示例中,計算設(shè)備100包括被稱為托管的或運(yùn)行時環(huán)境的軟件組件。 托管環(huán)境可被包括為操作系統(tǒng)的一部分或者可在稍后被包括為軟件下載。托管環(huán)境通常包括針對常見編程問題的預(yù)先編碼的解決方案以幫助軟件開發(fā)者創(chuàng)建諸如應(yīng)用等在托管環(huán)境中運(yùn)行的軟件程序。被配置成在計算設(shè)備100上執(zhí)行的計算機(jī)應(yīng)用包括至少一個過程(或任務(wù)),該至少一個過程(或任務(wù))是執(zhí)行程序。每一過程提供用于執(zhí)行該程序的資源。一個或多個線程在該過程的上下文中運(yùn)行。線程是操作系統(tǒng)在處理器102中向其分配時間的基本單元。 線程是為執(zhí)行而調(diào)度的過程內(nèi)的實體。過程的各線程可共享其虛擬地址空間和系統(tǒng)資源。 每一線程可包括異常處理程序、調(diào)度優(yōu)先級、線程位置存儲、線程標(biāo)識符、以及直到該線程被調(diào)度的線程上下文(或線程狀態(tài))。線程上下文包括線程的機(jī)器寄存器集、內(nèi)核棧、線程環(huán)境塊、以及與該線程對應(yīng)的過程的地址空間中的用戶堆。在并行應(yīng)用中,可在處理器102 上并發(fā)地執(zhí)行各線程。圖2示出了示例性消息收發(fā)系統(tǒng)200,包括通信地耦合到多個分布式客戶機(jī)/服務(wù)器204的消息收發(fā)服務(wù)器202。消息收發(fā)系統(tǒng)200可被實現(xiàn)為提供用于分布式計算的計算機(jī)網(wǎng)絡(luò),并且包括群集、網(wǎng)格、云,等等的特征。消息收發(fā)服務(wù)器202可在多個分布式節(jié)點 206的子網(wǎng)絡(luò)上實現(xiàn),其每一個可結(jié)合計算設(shè)備100的特征。客戶機(jī)204還可實現(xiàn)在結(jié)合了計算設(shè)備100的特征的計算設(shè)備上。客戶機(jī)204和服務(wù)器202之間的一可能的通信可包括,在兩個或多個計算機(jī)進(jìn)程之間在一通信框架上發(fā)送計算機(jī)數(shù)據(jù)包,該通信框架將服務(wù)器202耦合到客戶機(jī)204。在一個示例中,每個客戶機(jī)204可包括應(yīng)用組件,諸如一個或多個進(jìn)程、對象,或類似。消息收發(fā)服務(wù)器202在應(yīng)用組件之間提供消息交換。依據(jù)分布式應(yīng)用組件的配置, 客戶機(jī)204可假設(shè)發(fā)送者、接收者、發(fā)布者、訂閱者等的角色。消息收發(fā)服務(wù)器202可包括至少一個消息收發(fā)實體,諸如點對點消息收發(fā)模式的隊列,或發(fā)布者-訂閱者消息收發(fā)模式的主題。在一些示例中,主題可包括訂閱以過濾消息。例如,客戶機(jī)側(cè)訂閱通過在客戶機(jī)側(cè)維護(hù)最后消息順序號來直接從主題讀取消息。通常,消息收發(fā)服務(wù)器202包括兩個或多個不相似消息收發(fā)實體,諸如兩個隊列、一個隊列和一個主題,等等。流過系統(tǒng)200的消息通常被持久地記錄到位于節(jié)點206的本地存儲系統(tǒng)208或后端遠(yuǎn)程存儲系統(tǒng)210,以在節(jié)點故障或其他服務(wù)中斷的情況下保留狀態(tài)。持久地存儲的消息的恢復(fù)施加等待時間,負(fù)面地影響了消息收發(fā)系統(tǒng)200的性能。減少等待時間的通常手段包括高速緩存消息或存儲器內(nèi)隊列和主題,如果這些消息丟失或破壞則降低了一致性。在節(jié)點故障或服務(wù)中斷的情況中,存儲器內(nèi)消息收發(fā)狀態(tài)從持久的存儲器以耗時的過程重新創(chuàng)建,也負(fù)面地影響系統(tǒng)性能。此外,如果設(shè)備故障在消息可被持久地記錄之前發(fā)生,消息將丟失。圖3示出了示例性分布式消息收發(fā)服務(wù)器300,其結(jié)合了消息收發(fā)服務(wù)器202的特征。消息收發(fā)服務(wù)器300包括用一致結(jié)構(gòu)耦合在一起的多個節(jié)點302 (諸如計算設(shè)備30加、 302b、和302c)。一致結(jié)構(gòu)可包括多個硬件設(shè)備,諸如計算設(shè)備和通信設(shè)備(例如路由器、中繼器等)以及諸如結(jié)構(gòu)層304的軟件組件。在節(jié)點302上分布多個消息收發(fā)實體。配置來提供已選處理的消息收發(fā)實體可被指定為主消息收發(fā)實體。每個主消息收發(fā)實體對應(yīng)于至少一個通常相同的輔消息收發(fā)實體。輔消息收發(fā)實體也分布在不同于包括主消息收發(fā)實體的節(jié)點的至少一些節(jié)點302上。當(dāng)節(jié)點數(shù)量受限或主消息收發(fā)實體的數(shù)量大時,每個節(jié)點302可包括多個可形成消息收發(fā)實體集的位于同一處的消息收發(fā)實體。例如,計算設(shè)備30h、302b、302c的存儲器的每一個包括多個消息收發(fā)實體,分別安排為消息收發(fā)實體集306、308、310。在該示例中, 主隊列1312、主主題1314,以及主主題2316分別跨消息收發(fā)實體集306、308、310分布。此示例中的主消息收發(fā)實體被配置來接收來自發(fā)送者或發(fā)布者的寫入,并通常被配置以允許從接收者和訂閱者讀取。主消息收發(fā)實體中的每個消息被復(fù)制到對應(yīng)的輔消息收發(fā)實體中去。例如,主隊列1312中的消息被復(fù)制到包括在消息收發(fā)實體318、320中的多個輔隊列1中。主主題1314 的消息被復(fù)制到輔主題1322,且主主題2316中的消息被復(fù)制到輔主題23M中。如以下所描述,結(jié)構(gòu)層304還可將輔消息收發(fā)實體中的消息與它們對應(yīng)的主消息收發(fā)實體中的消息進(jìn)行同步。在該示例中,每個消息收發(fā)實體被包括在對應(yīng)節(jié)點302的存儲器中。例如,消息收發(fā)實體可被配置為節(jié)點的存儲器中的數(shù)據(jù)結(jié)構(gòu)。存儲在存儲器中的消息提供減少了的用于從存儲系統(tǒng)存取的消息的等待時間,并存儲器內(nèi)的消息復(fù)制增加了一致性。在包括主消息收發(fā)實體的計算設(shè)備故障的情況中,結(jié)構(gòu)層304將對應(yīng)的輔消息收發(fā)實體提升為新的主消息收發(fā)實體。新的主消息收發(fā)實體繼續(xù)運(yùn)行而沒有沒有丟失數(shù)據(jù)或一致性且沒有影響服務(wù)器300的性能的顯著等待時間(如果有等待時間的話)。在故障的節(jié)點包括輔消息收發(fā)實體的情況中,結(jié)構(gòu)可創(chuàng)建消息收發(fā)實體集內(nèi)的新的輔消息收發(fā)實體,新的輔消息收發(fā)實體既不包括對應(yīng)的主消息收發(fā)實體也不包括它的任何對應(yīng)的輔消息收發(fā)實體。在主消息收發(fā)實體和存儲器內(nèi)存儲體系結(jié)構(gòu)中的數(shù)據(jù)的復(fù)制相對于現(xiàn)有方案顯著增加了一致性并減少了等待時間。結(jié)構(gòu)層304維持跨在存儲器服務(wù)器300上分布的一組處理的消息收發(fā)實體的放置和消息收發(fā)實體的放置的一致性。結(jié)構(gòu)層304可包括多個分區(qū),每個分區(qū)是在結(jié)構(gòu)層304 中維持的一致性單元。分區(qū)可以是主分區(qū)或輔分區(qū)。主分區(qū)包括主消息收發(fā)實體并且由計算設(shè)備維持,該計算設(shè)備被配置來處理寫到該分區(qū)的全部寫入。輔分區(qū)包括輔消息收發(fā)實體并且由計算設(shè)備維持,其通常不被配置來處理寫入。結(jié)構(gòu)層304被配置來維持對存儲器服務(wù)器和消息收發(fā)實體中的節(jié)點的認(rèn)知,并參與存儲在消息收發(fā)實體中的數(shù)據(jù)的生存期。結(jié)構(gòu)層304可包括資源和應(yīng)用,并為分布式計算系統(tǒng)中的節(jié)點提供調(diào)度、資源定位、設(shè)備管理、以及容錯。結(jié)構(gòu)層也可提供用于智能管理完整應(yīng)用生存期的高級別語言模型,智能管理包括部署、健康監(jiān)測,升級、以及停用。合適的結(jié)構(gòu)層304的例子是可用的,諸如作為服務(wù)的平臺O^aaS),其可被主控在后端數(shù)據(jù)中心并用操作系統(tǒng)控制。示例操作系統(tǒng)在來自美國華盛頓州雷蒙德市的微軟公司的Windows Azure的交易指定下可用。圖4示出了示例方法400用于處理要被寫入消息收發(fā)服務(wù)器300的上下文中的特定消息實體的消息。消息收發(fā)服務(wù)器300從客戶機(jī)接收消息,并確定消息收發(fā)服務(wù)器300 上的哪個消息收發(fā)實體被分配來處理該消息。在402,該消息接著被提供給所分配的消息收發(fā)實體的主消息收發(fā)實體。例如,分配到隊列1的用于處理的消息被提供到主消息收發(fā)實體隊列1312。在404,消息的副本被提供給對應(yīng)的輔消息收發(fā)實體。例如,分配到隊列1312的消息副本被提供給輔隊列1318和輔隊列1320。每個能夠接收消息副本的輔消息收發(fā)實體向主消息收發(fā)實體提供確認(rèn)。在406,一旦主消息收發(fā)實體從輔消息收發(fā)實體接收到所選數(shù)量或更多的確認(rèn),消息提交。在寫操作的示例中,在408,消息被寫到主消息收發(fā)實體,且副本被寫到提供確認(rèn)的對應(yīng)的輔消息收發(fā)實體。消息收發(fā)服務(wù)器300可向客戶機(jī)提供消息已經(jīng)提交的確認(rèn),且該消息將根據(jù)消息收發(fā)實體的功能來處理。在410,如果主消息收發(fā)實體接收到少于所選數(shù)量的確認(rèn),寫操作中止、回退,或以其他方式指示為故障。在一些情況中,消息服務(wù)器300可接著應(yīng)用重試策略。在寫入被包括為交易的部分的情況中,不提交交易,直到輔消息收發(fā)實體提供所選數(shù)量的確認(rèn)。當(dāng)多個寫被包括在交易中時,僅交易提交可等待所選數(shù)量的確認(rèn),以便減少交易內(nèi)的操作的等待時間。所選數(shù)量的確認(rèn)可被設(shè)為一個或多個確認(rèn),或基于被選來接收消息副本的輔實體的法定數(shù)量?;诜ǘ〝?shù)量的所選數(shù)量的示例可等于大多數(shù)法定數(shù)量、全部法定數(shù)量,或其他基于法定數(shù)量的量。相對高的所選數(shù)量可增強(qiáng)一致性,但也增加了等待時間,而相對低的所選數(shù)量可減少等待時間但也降低了一致性。因此,所選數(shù)量可被選擇,從而以另一個為代價來有益于一個關(guān)注的一方,或平衡諸競爭性諸關(guān)注方。例如,由于消息收發(fā)實體可為寫入提交等待更久,將所選數(shù)量設(shè)置為接近或包括全部法定數(shù)量可增加更長期的可靠性而減少吞吐量和/或負(fù)面地影響等待時間。盡管可能有更長期的可靠性,但如果在等待確認(rèn)以提交用于寫時輔消息收發(fā)實體故障,則數(shù)據(jù)可能丟失。在一示例中,在406,在消息收發(fā)服務(wù)器在420聲明故障之前,主消息收發(fā)實體可被配置以等待一預(yù)定數(shù)量的時間或事件以接收所選數(shù)量的確認(rèn)。作為重試策略的一部分, 主消息收發(fā)實體可檢查以確定是否知曉無響應(yīng)的輔消息收發(fā)實體停機(jī)。主消息收發(fā)實體可檢查以確定是否知曉主控輔消息收發(fā)實體的節(jié)點停機(jī)。如果輔消息收發(fā)實體或主控節(jié)點之一或兩者停機(jī),主消息收發(fā)實體可確定不重發(fā)消息的副本。結(jié)構(gòu)層304被配置用于除了寫操作之外的消息收發(fā)操作。在通常情況中,盡管讀取可被發(fā)送到一個或多個輔消息收發(fā)實體以避免在主消息收發(fā)實體處理另一操作情況中或在巨大數(shù)量訂閱者的讀取淹沒單個消息收發(fā)實體情況中的等待時間,讀操作可被發(fā)送到主消息收發(fā)實體。發(fā)送操作和刪除操作可被看待為寫操作,并按照如方法400的類似處理。 隊列或訂閱上的接收操作常常是破壞性的或使用取數(shù)-鎖定(peek-lock)并刪除語義。破壞性接收和刪除可以以類似于方法400中的寫入的方式來看待。取數(shù)-鎖定通常不提供給輔消息收發(fā)實體,因為取數(shù)-鎖定是消息收發(fā)對象的超時樂觀鎖定。因此,取數(shù)-鎖定可以以類似于前述的讀操作的方式來看待。在由于節(jié)點故障或其他原因鎖定丟失的情況中,可以以類似于當(dāng)鎖定因不活動而期滿時的方式再次獲得鎖定。此外,關(guān)于隊列、主題和訂閱的瀏覽操作可類似讀操作來看待。在消息可以少于確認(rèn)的全部法定數(shù)量被提交的情況下,可能不將一些輔消息收發(fā)實體與主消息收發(fā)實體同步,并可包括少于一組完整的已提交消息。為解決這一可能性,消息收發(fā)服務(wù)器300可支持重復(fù)檢查邏輯,其包括幫助輔消息收發(fā)實體維持與對應(yīng)的主消息收發(fā)實體同步的機(jī)制。例如,消息收發(fā)實體可被實現(xiàn)為帶序號的日志和指針的組合,指針存儲已刪除消息標(biāo)識符的狀態(tài)并指向要從日志中讀取的下一個消息。指針通常保持諸如取數(shù)-鎖定的未復(fù)制的非可靠狀態(tài)及復(fù)制的可靠狀態(tài)。輔消息收發(fā)實體可各自維持一歷史表格,包括已經(jīng)被存儲在輔消息收發(fā)實體中的諸消息的先前消息序號。分布式計算系統(tǒng)(例如,結(jié)構(gòu)層) 可被配置來存儲正對應(yīng)于最后序號的已提交的消息。周期性地經(jīng)由結(jié)構(gòu)層傳遞該信息作為控制信息,以允許輔消息收發(fā)實體清除它們的歷史表格。除了減少所涉及的復(fù)制和處理的量,此機(jī)制也改善復(fù)制吞吐量,因為復(fù)制子系統(tǒng)不以順序的次序發(fā)送和接收消息,因此復(fù)制可以并行。消息可具有生存時間語義,導(dǎo)致消息在生存時間過了以后期滿。然而,諸如消息收發(fā)服務(wù)器300的分布式系統(tǒng),通常不包括具有已同步時鐘的節(jié)點,并且這可導(dǎo)致消息跨主消息收發(fā)實體和輔消息收發(fā)實體分布的不同的期滿時間。為解決這一問題,復(fù)制下的消息的生存時間值可被調(diào)節(jié)為相對值,其描述了消息上所剩的剩余時間。消息生存時間可被調(diào)節(jié)為相對值,其等于實際的消息生存時間減去輔消息收發(fā)實體中的當(dāng)前時間。當(dāng)提交消息時,相對生存時間被轉(zhuǎn)換回絕對生存時間。此外,轉(zhuǎn)換的平均時間可被用來在目的地精細(xì)地調(diào)節(jié)消息生存時間以說明網(wǎng)絡(luò)轉(zhuǎn)換時間。期滿的消息可從復(fù)制中去除,以減低復(fù)制通信流量。圖5示出了消息收發(fā)服務(wù)器300的故障轉(zhuǎn)移處理的示例性結(jié)果,配置用于節(jié)點 302a的故障或崩潰事件??捎脤?yīng)于節(jié)點302或消息收發(fā)實體312-3M的故障的置換 (permutation)的故障轉(zhuǎn)移處理來配置消息收發(fā)服務(wù)器300。在故障之前配置的故障轉(zhuǎn)移處理相比于響應(yīng)于故障來配置故障處理而言可減少等待時間,但也可造成開銷。存儲在主隊列1312和輔主題1322中的數(shù)據(jù)(包括在圖3所述的設(shè)備30 的存儲器中)由于故障
8而丟失。故障轉(zhuǎn)移處理迅速將設(shè)備302b上的輔隊列1318提升成為新主消息收發(fā)實體,用于從故障的主隊列1312丟失的數(shù)據(jù)。主主題1314丟失了其一個輔主題1322,因此可在節(jié)點上創(chuàng)建新輔主題13 ,該節(jié)點不包括主消息收發(fā)實體或?qū)?yīng)的輔消息收發(fā)實體,諸如設(shè)備302c。在故障的節(jié)點恢復(fù)或回到在線情況下,本地存儲系統(tǒng)208可能已經(jīng)包括了本地狀態(tài)的持久存儲。結(jié)構(gòu)層304可選擇是否復(fù)活設(shè)備30 以包括主消息收發(fā)實體或僅僅輔消息收發(fā)實體直到全部狀態(tài)恢復(fù)。上述重復(fù)檢查邏輯可被用來表示在輔消息收發(fā)實體成為主消息收發(fā)實體時的故障轉(zhuǎn)移情況中沒有被持久地存儲的消息。消息可被寫入持久存儲以進(jìn)一步改善系統(tǒng)的可靠性。持久存儲的兩個示例包括遠(yuǎn)程或后端共享存儲,諸如消息收發(fā)系統(tǒng)200中的遠(yuǎn)程存儲系統(tǒng)210和本地存儲系統(tǒng)208。消息收發(fā)服務(wù)器300可被配置來在空閑系統(tǒng)周期或其他指定時間期間將消息從主消息收發(fā)實體周期性地寫入共享遠(yuǎn)程存儲系統(tǒng)210。在大多數(shù)情況中,持久寫入不在復(fù)制期間發(fā)生。 除了寫入遠(yuǎn)程存儲系統(tǒng)210,或在不同于寫入遠(yuǎn)程存儲系統(tǒng)210的其他時間,消息收發(fā)服務(wù)器300可被配置來在空閑系統(tǒng)周期或其他指定時間期間將消息從消息收發(fā)實體周期性地寫入本地存儲系統(tǒng)208。在一個示例中,除了對應(yīng)主消息收發(fā)實體寫入本地存儲208或遠(yuǎn)程存儲系統(tǒng)以外或作為替代,輔消息收發(fā)實體寫入本地存儲208或遠(yuǎn)程存儲系統(tǒng)210。服務(wù)器300可在每個節(jié)點上持久地存儲所選輔消息收發(fā)實體以減少計算節(jié)點302的總體存儲需求。上述重復(fù)檢查邏輯還可被應(yīng)用于寫入存儲系統(tǒng)208、210。其他因素可確定消息收發(fā)實體何時寫入存儲。例如,實體的存儲器可能變滿了或到達(dá)了消息的數(shù)量或大小的限額,將觸發(fā)寫入持久存儲。同樣,存儲器實體可在所選時間段過去之后寫入持久存儲。還構(gòu)想了更多示例。在隊列或主題包含主日志存儲作為消息收發(fā)系統(tǒng)的一部分的情況下,主日志存儲可用作到本地存儲系統(tǒng)208的寫-后隊列。一旦消息寫入持久存儲,它可從主和輔消息收發(fā)實體中被逐出。為了減少存儲需求,空消息收發(fā)實體,即逐出了所有消息的消息收發(fā)實體, 本身可被逐出存儲器并可在需要時復(fù)活。盡管此處說明并描述了具體實施例,但本領(lǐng)域技術(shù)人員可以理解,可用各種替換和/或等價實現(xiàn)來替換所示出并描述的具體實施例而不背離本發(fā)明的范圍。本申請旨在覆蓋此處討論的具體實施例的任何改編或變型。因此,本發(fā)明旨在僅由權(quán)利要求書及其等效方案來限制。
權(quán)利要求
1.一種消息收發(fā)實體(308),配置在分布式計算系統(tǒng)O00)的多個通信地耦合的節(jié)點 (302)的第一節(jié)點(302b)的存儲器(104、108,和/或110)中,并配置以作為在多個通信地耦合的節(jié)點的消息收發(fā)服務(wù)器(202)中的輔消息收發(fā)實體(318)來運(yùn)行;通信地耦合(304)到主消息收發(fā)實體(312),所述主消息收發(fā)實體配置在所述多個節(jié)點的第二節(jié)點(302a)的存儲器(104、108,和/或110)中,其中所述主消息收發(fā)實體配置為存儲消息(402,408);存儲所述消息的副本;以及如果所述主消息收發(fā)實體故障,則被提升為新的主消息收發(fā)實體。
2.如權(quán)利要求1所述的消息收發(fā)實體,其特征在于,所述消息收發(fā)實體從包括消息收發(fā)隊列和消息收發(fā)主題的組中選擇。
3.如權(quán)利要求2所述的消息收發(fā)實體,其特征在于,被配置為所述第一節(jié)點的存儲器中的數(shù)據(jù)結(jié)構(gòu)。
4.如權(quán)利要求1所述的消息收發(fā)實體,其特征在于,被配置為接收所述消息的副本,并在存儲所述消息的副本之前向主消息收發(fā)實體發(fā)送確認(rèn)。
5.如權(quán)利要求1所述的消息收發(fā)實體,其特征在于,被配置隨后為在所述主消息收發(fā)實體空閑期間將所述消息寫入耐久存儲。
6.如權(quán)利要求5所述的消息收發(fā)實體,其特征在于,在被寫到耐久存儲之后,所述消息被從所述主消息收發(fā)實體和輔消息收發(fā)實體中逐出。
7.如權(quán)利要求1所述的消息收發(fā)實體,其特征在于,所述主消息收發(fā)實體被配置來從所述分布式計算系統(tǒng)的客戶機(jī)接收全部對應(yīng)的寫請求。
8.如權(quán)利要求7所述的消息收發(fā)實體,其特征在于,所述主消息收發(fā)實體和輔消息收發(fā)實體之一被配置為從所述客戶機(jī)接收對應(yīng)的讀請求。
9.如權(quán)利要求1所述的消息收發(fā)實體,其特征在于,所述系統(tǒng)包括對應(yīng)于所述主消息收發(fā)實體的多個輔消息收發(fā)實體,其中所述消息被包括作為所述主實體的多個消息的一部分,并且其中所述多個輔消息收發(fā)實體被配置來將所述多個消息的副本與所述主消息收發(fā)實體中的所述多個消息同步。
10.如權(quán)利要求9所述的消息收發(fā)實體,其特征在于,所述同步用重復(fù)檢查邏輯提供。
全文摘要
本發(fā)明涉及帶復(fù)制的一致消息收發(fā)。揭示了多個通信地耦合的節(jié)點的第一節(jié)點的存儲器中配置的消息收發(fā)實體。節(jié)點被包括在分布式計算系統(tǒng)中。消息收發(fā)實體被配置為作為在通信地耦合的節(jié)點的消息收發(fā)服務(wù)器中的輔消息收發(fā)實體來運(yùn)行。消息收發(fā)實體通信地耦合到配置在多個節(jié)點的第二節(jié)點的存儲器中的主消息收發(fā)實體。主消息收發(fā)實體配置來存儲消息;存儲消息的副本。此外,配置消息收發(fā)實體以在主消息收發(fā)實體故障時提升為新的主消息收發(fā)實體。
文檔編號H04L12/58GK102447650SQ20111033939
公開日2012年5月9日 申請日期2011年10月24日 優(yōu)先權(quán)日2010年10月25日
發(fā)明者A·諾瑞, J·卡蒂, K·帕拉瑪斯萬姆, M·克里希納普拉塞德 申請人:微軟公司