欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

計算集群中的分布式組件的制作方法

文檔序號:12512725閱讀:329來源:國知局
計算集群中的分布式組件的制作方法與工藝

分布式計算系統(tǒng)可以具有軟件組件,諸如軟件對象或其他類型的個體可尋址的孤立實體,諸如分布式對象、代理、動作方(actor)、虛擬組件等。通常,每個這樣的組件個體可尋址,并且在分布式系統(tǒng)中具有唯一的身份(諸如整數(shù)、GUID、字符串或不透明數(shù)據(jù)結(jié)構(gòu)等)。

在允許地理分布(包括當被布置為集群的兩個服務器集合在相同數(shù)據(jù)中心內(nèi)或在不同數(shù)據(jù)中心中時)的分布式系統(tǒng)中,應用部署可以駐留在一個集群中。在這種情況下,其客戶端廣泛分布(例如,在世界各地)的應用在單個數(shù)據(jù)中心處處理請求,由此遠離數(shù)據(jù)中心的客戶端可能經(jīng)歷高的等待時間。



技術(shù)實現(xiàn)要素:

提供本發(fā)明內(nèi)容以便以簡化的形式介紹在下面的具體實施方式中進一步描述的代表性概念的選擇。本發(fā)明內(nèi)容不旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在以限制所要求保護的主題的范圍的任何方式來使用。

簡言之,本文中所描述的主題的各個方面中的一個或多個方面涉及嘗試確定組件是否在嘗試集群能夠與其通信的任何其他集群中已經(jīng)被激活,并且如果是,則使用已經(jīng)激活的組件。如果尚未激活,則關(guān)于在至少兩個集群之間是否存在分割進行確定;如果存在分割,則組件被激活并且與指示所激活的組件是可能的副本的狀態(tài)數(shù)據(jù)相關(guān)聯(lián),例如與分割的集群中的另一實例相關(guān)聯(lián)。

從下面結(jié)合附圖的詳細描述中,其他優(yōu)點將變得顯而易見。

附圖說明

本公開通過示例的方式示出并且不限于附圖,在附圖中,相同的附圖標記指示相似的元件,并且在附圖中:

圖1是根據(jù)一個或多個示例實現(xiàn)的表示具有可以用于提供和管理組件的分割的集群的分布式計算系統(tǒng)的示例組件的框圖。

圖2是根據(jù)一個或多個示例實現(xiàn)的表示具有可以用于提供和管理組件的不再分割的集群的分布式計算系統(tǒng)的示例組件的框圖。

圖3是根據(jù)一個或多個示例實現(xiàn)的具有可以用于提供關(guān)于組件激活的不同操作模式的示例步驟的流程圖。

圖4是根據(jù)一個或多個示例實現(xiàn)的表示分割的集群中的組件以及副本組件的激活和去激活的示例的框圖。

圖5是根據(jù)一個或多個示例實現(xiàn)的表示在集群之間傳送的組件激活請求和響應的框圖。

圖6是根據(jù)一個或多個示例實現(xiàn)的由集群(或集群的個體服務器)維護的數(shù)據(jù)的表示,其包括針對組件的激活狀態(tài)數(shù)據(jù)。

圖7是根據(jù)一個或多個示例實現(xiàn)的具有可以用于發(fā)送激活請求并且將響應處理為動作的示例步驟的流程圖。

圖8是根據(jù)一個或多個示例實現(xiàn)的具有可以在接收激活請求并且輸出響應時采取的示例步驟的流程圖。

圖9是根據(jù)一個或多個示例實現(xiàn)的具有以下示例步驟的流程圖,該示例步驟可以在不再被分割的集群通過將可能的副本的集合發(fā)送給其他集群并且處理響應以去除被選擇為不能存活的任何副本來從分割中恢復時被采取。

圖10是根據(jù)一個或多個示例實現(xiàn)的具有以下示例步驟的流程圖,該示例步驟可以在接收和處理可能的副本的集合以確定是否存在任何副本以及在存在副本的情況下確定哪些副本存活并且輸出響應時被采取。

圖11是表示其中可以實現(xiàn)本文中所描述的各種示例的一個或多個方面的示例非限制性網(wǎng)絡化或分布式計算環(huán)境的框圖。

圖12是表示其中可以實現(xiàn)本文中所描述的各種示例的一個或多個方面的示例非限制性機器/計算設(shè)備的框圖。

具體實施方式

本文中所描述的技術(shù)的各個方面通常涉及允許應用跨多個服務器集群,例如在不同數(shù)據(jù)中心中的服務器集群,例如在云環(huán)境中。這樣的應用激活(實例化)組件或使用已經(jīng)激活的組件。組件基于始終可用并且具有單個激活的概念,包括在多集群環(huán)境中。注意,雖然集群可以在多個數(shù)據(jù)中心中,但是該技術(shù)適用于布置在單個數(shù)據(jù)中心中的不同服務器集群,其中一些集群在一個數(shù)據(jù)中心中并且一些集群在其他數(shù)據(jù)中心中,或者以任何其他合適的方式布置。

如本文中所使用的,集群是通常在數(shù)據(jù)中心內(nèi)運行的服務器的集合。集群相對于其他集群具有唯一的身份。多集群是集群的集合,其可以是地理分布式的,例如(但不限于)駐留在不同數(shù)據(jù)中心中的集群。整個多集群是所有集群的集合,其對于每個集群是靜態(tài)地已知的?;顒佣嗉菏瞧涑蓡T可以彼此通信的整個多集群的子集;當整個多集群的一些集群不能彼此通信時,集群被稱為被分割。仲裁(quorum)多集群是包含整個多集群中的法定數(shù)目的集群(例如,整個集群的大部分)或擁有仲裁資源的活動多集群。整個多集群中最多可以有一個仲裁多集群。注意,當沒有分割時,每個集群都是仲裁的一部分。

在組件系統(tǒng)中,應用被編程為如同任何給定的單個激活組件始終存在。當組件被調(diào)用時,如果組件尚未運行,則運行時系統(tǒng)將激活該組件,或者如果組件已經(jīng)運行,則運行時系統(tǒng)使用組件的已激活實例。

因此,應用被編程為如同在任何時候都有任何組件的一個實例,其被構(gòu)建到編程模型和分布式運行時中。如果應用調(diào)用組件,則如果組件的激活存在,則運行時系統(tǒng)尋找該激活(可能在另一個服務器集群中),或者如果組件的激活不存在,則運行時系統(tǒng)創(chuàng)建該激活。

然而,當處理多個計算集群時,不同的集群可能試圖在相同時間創(chuàng)建相同組件,即存在競爭狀況。此外,諸如通過集群之間的通信鏈路的故障,集群可能變得彼此分割。在這種情況下,個體可尋址的單個激活虛擬化軟件組件的概念變得不確定。

本文中描述了包括處理競爭狀況以及分割集群的一個合適的示例協(xié)議的技術(shù)。例如,服務器集群可能由于它們之間的通信鏈路的故障而變得彼此分割,這在服務器集群在不同的數(shù)據(jù)中心中運行的情況下傾向于更加普遍,尤其是在服務器集群以相對大的地理距離分開的情況下傾向于更加普遍。盡管如此,彼此相對靠近的不同服務器集群(包括在相同數(shù)據(jù)中心中運行的集群)也可以彼此分割。

在集群彼此分割的情況下,分布式系統(tǒng)繼續(xù)操作,但是在整個分布式系統(tǒng)中僅激活單個組件的概念可能是過度限制的。例如,應用可能要求使用可以在分割集群上運行的組件實例(如果需要,運行時將激活),并且被要求的集群運行時無法與其他分割集群通信。

本文中描述了各種操作模式,其通常涉及組件的一致性與可用性。例如,在高一致性模式下,系統(tǒng)確保跨集群有組件的至多一個激活。為此,如果任何集群變得分割,則在集群再次通信之前不允許發(fā)生組件的新激活。

在另一模式下,例如高可用性模式,如果集群不能訪問組件的激活,則該集群可以創(chuàng)建組件的實例,即使組件的另一激活可能在另一個分割集群上已經(jīng)存在(或之后被創(chuàng)建)。當分割集群再次通信時,執(zhí)行組件實例(例如它們的狀態(tài))的協(xié)調(diào)。

注意,上述操作模式以及其它操作模式可以基于每個組件、或每個組件類型。例如,組件Y可以被規(guī)定(例如,由管理員)為在高一致性模式下運行,而組件Z可以被規(guī)定為被允許在高可用性模式下運行。

其他模式是可行的,其中一些在本文中被示例。作為一個示例,如果一個或多個集群變得被分割,則被例如大多數(shù)集群(或者被仲裁資源的所有權(quán)等或任何其他合適的所有權(quán)/預留機制)視為(并且被其他集群已知為)仲裁的一部分的集群之一可以創(chuàng)建組件的新實例。沒有仲裁并且從具有仲裁的集群分割的一個或多個其他集群無法創(chuàng)建任何組件的新實例。

又一種模式允許激活僅對于該集群存在的組件。作為一個示例,如果集群知道(或很可能)沒有其他集群將需要創(chuàng)建另一實例,則集群可以樂觀地(optimistically)創(chuàng)建該組件的實例。作為更具體的示例,如果集群需要激活包括視頻游戲的組件,并且游戲玩家也在集群內(nèi),則該組件可以獨立于任何其他集群而被激活,無論是否被劃分。其他集群也可以有自己的獨立的組件實例。

此外,模式中的至少一些可以在一定程度上被組合。例如,在視頻游戲示例中,如果大多數(shù)玩家(但不一定是全部)在集群中,或者可能在不同的集群中但是在相同的數(shù)據(jù)中心中,則多個集群可以樂觀地創(chuàng)建其自己的獨立的游戲組件實例。集群即使在從任何或所有其他集群得到回應之前,如果認為可能(例如,來自先前使用模式)沒有其他集群可能已經(jīng)創(chuàng)建了該組件,則集群也可以樂觀地創(chuàng)建組件實例。其他樂觀情形與悲觀(pessimistic)情形是可行的,例如,如果超過一半的其他集群已經(jīng)響應,或者一些其他可配置的閾值百分比,則樂觀地創(chuàng)建組件實例。

應當理解,本文中的任何示例是非限制性的。例如,組件不限于任何特定的分布式系統(tǒng)。作為另一示例,集群通常是指彼此結(jié)合操作的兩個或更多個服務器,使得在任何服務器和/或集群內(nèi)通信故障的情況下,存活的服務器或服務器集合接管故障/非通信服務器的應用。因此,如本文中所使用的,“集群”甚至包括單個存活的服務器。集群還包括用作不同服務器的虛擬機的概念,即使在相同物理機上運行。

此外,“組件”是指具有可以受益于本文中所描述的技術(shù)的屬性的任何軟件組件/軟件對象/動作方。因此,本發(fā)明不限于本文中所描述的任何特定實現(xiàn)、方面、概念、結(jié)構(gòu)、功能或示例。相反,本文中所描述的任何實現(xiàn)、方面、概念、結(jié)構(gòu)、功能或示例是非限制性的,并且本發(fā)明通常可以以在編程、計算系統(tǒng)、數(shù)據(jù)中心和分布式計算系統(tǒng)中提供益處和優(yōu)點的各種方式來使用。

圖1示出了包括集群102(1)-102(n)的多集群配置。如通信鏈路中的“X”所表示的,集群102(1)-102(3)從集群102(4)-102(n)被分割。注意,為了說明的目的,示出了兩個數(shù)據(jù)中心A和M(由此,分割可以由數(shù)據(jù)中心之間的廣域網(wǎng)連接的故障導致),然而,應當理解,數(shù)據(jù)中心不是必需的,但是如果存在,則可以連接任何實際的數(shù)目。

如在一個服務器集群102(1)中所示,但是應當理解,也適用于其他集群,一個或多個應用104可以經(jīng)由運行時106請求組件的使用或激活。該技術(shù)可以使用(例如,協(xié)商一致的)協(xié)議P,用于集群跟蹤哪些激活存在以及每個激活駐留在哪個集群處,其中在圖1中將跟蹤數(shù)據(jù)表示為組件激活數(shù)據(jù)108。協(xié)議P在運行時106中實現(xiàn),包括在服務器處理器/存儲器上運行的系統(tǒng),該系統(tǒng)支持如本文中所描述的多集群單個激活組件抽象。

一般來說,如果系統(tǒng)中存在組件,則組件在組件空間中具有始終可尋址的身份,無論是在激活狀態(tài)還是去激活狀態(tài)下。因此,應用可以向組件發(fā)送操作(任務),并且組件可以彼此通信,而不管它們的實際當前狀態(tài)如何。如果組件處于去激活狀態(tài)并且被發(fā)送通信,例如操作請求和/或消息(因為組件的激活或去激活狀態(tài)對于發(fā)送方是未知的),則運行時可以負責保留任何這樣的操作請求和通信,直到組件可以被激活并且被提供有操作請求和/或通信。備選地,調(diào)用組件獲取對去激活組件的引用的嘗試可以引起去激活組件被激活,之后調(diào)用組件可以向其他組件發(fā)送操作或消息。注意,對于“始終”可尋址和“始終”存在組件的概念可能存在罕見的例外,例如,運行時可以被編程為有意地忽略涉及某一個或多個組件的請求/管理員可以有意地從存儲器和持久性存儲裝置去除某一個或多個組件。因此,如本文中所使用的,“始終”可尋址或“始終”存在表示“始終或基本上始終”以解釋任何這樣的例外。

在該示例中,考慮到組件激活當前不存在于集群102(1)-102(3)上,如通過在其上被維護或以其它方式可訪問的組件激活數(shù)據(jù)108(例如作為復制數(shù)據(jù)庫)已知的。然而,沒有辦法與集群102(4)-102(n)通信,其中之一可能嘗試在分割修復之前創(chuàng)建其自己的實例。

在這種情況下,運行時可以訪問策略/規(guī)則110以確定采取什么動作。也就是說,如上所述,可以關(guān)于所請求的組件使用各種可能的操作模式之一,例如,如策略/規(guī)則110中所規(guī)定的。

為了在存在網(wǎng)絡分割時提供高可用性,當集群不能通信時,系統(tǒng)允許存在兩個或更多個激活的可能性。因此,如果如圖1所示,集群102(1)不能與其他集群中的至少一個集群通信以獲得高可用性,則運行時106基于策略/規(guī)則110可以允許集群102(1)激活它無法訪問的組件。運行時注意到,該激活是可能的副本,如下所述,例如通過將激活與“DOUBTFUL”狀態(tài)相關(guān)聯(lián)。

當恢復通信時,如圖2所示,系統(tǒng)通過使得集群交換可能的副本組件激活的列表或其他數(shù)據(jù)結(jié)構(gòu)來重新建立組件一致性(例如,示出222(1)和222(n),盡管每個集群發(fā)送其自己的列表)。如果激活事實上已經(jīng)被復制,則通過保留僅一個存活的激活并且通知一個或多個其他激活它們是副本,協(xié)議重新建立一致性。任何副本激活都被終止,通常包括第一持久性狀態(tài)。應用(例如,104)負責將一個或多個其他激活的任何狀態(tài)合并到存活的激活中。

如本文中所描述的,在一個高一致性模式下,可以通過不允許針對任何給定組件(或者可能針對任何組件)的激活來完全防止一致性問題。在較少限制性但仍然一致性模式下,規(guī)則可以規(guī)定允許集群的一個集合創(chuàng)建激活(針對規(guī)定的組件或類型,或者可能針對任何激活),但是僅在創(chuàng)建集群是集群的仲裁的一部分的情況下??捎眯匀匀皇軗p,因為不是仲裁的一部分的集群不允許創(chuàng)建新的激活。

然而,注意,諸如地理分布式的面向用戶的應用(例如,用于游戲和社交網(wǎng)絡,客戶端連接)的一些應用通常被本地化到最靠近它們的數(shù)據(jù)中心。在很多情況下,與相同地理位置中的用戶進行互動。因此,減少了用戶/會話組件的多個激活的概率。在這種情況下,非仲裁分割集群可以創(chuàng)建激活,盡管有副本的可能性。

圖3是概述一些上述概念的簡化的示例流程圖。如果在步驟302不存在分割,則系統(tǒng)在正常模式下操作,其中一次僅允許一個激活(盡管可能存在如下所述的臨時異常,諸如當運行時以激活是唯一的可能性來樂觀地創(chuàng)建激活并且之后檢查是否存在另一激活時)。

如果存在分割,例如運行協(xié)議的運行時屬于作為整個多集群的真子集的活動集群,則步驟302代替地跳轉(zhuǎn)到步驟306,其在響應于應用請求需要創(chuàng)建激活時操作。注意,如果激活已在活動集群中被實例化(被激活),則運行時僅使用該激活并且向應用返回信息,因此應用將使用現(xiàn)有激活實例。

如上所述,如果在高可用性模式下允許創(chuàng)建(可能作為副本)組件(無論被特定地標識還是通過具有某個類/類型),則步驟308跳轉(zhuǎn)到步驟314,其中,激活被創(chuàng)建,但是具有指示它是可能的副本的DOUBTFUL(可疑)狀態(tài)。

相反,如果僅允許在高一致性模式下創(chuàng)建激活,但是存在分割,則步驟308跳轉(zhuǎn)到步驟310,其評估集群是否為仲裁的一部分。如果不是,則在步驟312拒絕激活請求。注意,在備選的最限制性的高一致性場景中,可以繞過步驟310,即,如步驟312所示拒絕請求,而不管集群是否為仲裁的一部分。

可以理解,可以允許在高可用性模式下使用給定組件,在高一致性模式下使用另一組件(而不管仲裁),而再一組件可以處于高一致性模式(取決于仲裁成員資格)。作為一個示例,如果沒有實際的方式來使用副本協(xié)調(diào)(恢復)一個組件的狀態(tài),則這樣的組件可能需要僅在高一致性模式下被激活。另一組件可以具有可協(xié)調(diào)的副本,在該情況下該組件可以是用于高可用性模式的良好候選。

可以容易地理解,協(xié)議P需要運行時間開銷,通常是通信延遲。對于靜態(tài)地(例如,在應用編譯時)已知為僅在激活它們的集群(或者可能是集群的數(shù)據(jù)中心)內(nèi)可訪問的組件,則可以避免該開銷。例如,表示游戲?qū)嵗慕M件僅可以被與游戲?qū)嵗v留在相同的數(shù)據(jù)中心中的玩家組件訪問。在這種情況下,不需要通知其他數(shù)據(jù)中心中的集群關(guān)于游戲?qū)嵗募せ?。為了避免該通知,可以用關(guān)鍵字來注釋針對游戲組件的類定義,例如,該關(guān)鍵字告知系統(tǒng)當該類的組件需要被激活時不運行協(xié)議。

分布式系統(tǒng)因此提供了將組件視為虛擬實體而不是物理實體的編程模型和支持分布式計算運行時。如將理解的,除了其它益處之外,這從程序員的角度大大簡化了組件管理,同時提供了可擴展性和可靠性。注意,如本文中所使用的,“組件”是指在性質(zhì)上相似的其他分布式組件、對象或動作方。

例如,如本文中所描述的“虛擬化分布式組件”(或更簡單地“組件”)具有獨立于其任何存儲器內(nèi)實例化的壽命并且因此獨立于任何特定服務器的壽命的存在。例如,如果沒有組件的存儲器內(nèi)實例,則自動發(fā)送給組件的消息可以導致在可用服務器上(例如,由運行時或諸如發(fā)送方的另一組件)創(chuàng)建新實例,可用服務器可以是任何可用服務器。運行時因此給予開發(fā)者虛擬“組件空間”,其允許調(diào)用系統(tǒng)中的任何可能的組件,如同它存在于存儲器中一樣。因此,即使服務器崩潰,組件也不會故障,并且組件不需要由應用來監(jiān)督和/或顯式地重新創(chuàng)建。

如可以容易理解的,因此應用代碼可以以樂觀風格編寫,假定所有合法請求將由相應組件服務。這去除了編寫檢查組件的存在并且在未找到該組件的情況下創(chuàng)建該組件的應用代碼的需要,這大大簡化了應用邏輯并且減少了開發(fā)人員需要編寫的代碼量。

作為示例,圖4概括了一個或多個實現(xiàn)中的組件的激活、去激活和持久性狀態(tài)。類440中的去激活組件由運行時442激活到集群的所選擇的服務器的服務器存儲器444中,例如,激活組件M可以根據(jù)需要從去激活被激活。一旦被激活,激活組件M可以根據(jù)需要從持久性存儲裝置446(如果存在)調(diào)用狀態(tài)/將狀態(tài)存儲到持久性存儲裝置446中。注意,持久性存儲裝置446可以是可訪問的,而不管組件當前在其上被激活的物理服務器,例如經(jīng)由例如可以基于每個集群的集中式和/或復制存儲裝置。然而,備選地,狀態(tài)可以從很多不同種類的介質(zhì)讀取/存儲到很多不同種類的介質(zhì),例如移動電話、控制臺、云存儲服務等。這樣的存儲裝置可能不是始終可訪問的,例如,諸如電話/控制臺的設(shè)備;然而,可能的是,僅當設(shè)備可訪問時需要依賴于對設(shè)備的訪問的組件。

另外如圖4所示,由運行時442基于一個或多個去激活標準來去激活激活組件X,諸如基于(缺少)使用,例如當針對一段時間沒有執(zhí)行任何工作時。注意,也可以允許組件去激活自身,例如通過調(diào)用去激活功能。在任何時間,并且作為去激活完成之前的去激活的一部分,組件X可以根據(jù)需要將狀態(tài)持久化到持久性存儲裝置446(如果存在)。然后組件X被去激活。

圖4還示出了組件的復制激活D,例如,兩個分割集群A和B上的服務器每個具有它們自己的組件激活D的實例。每個運行時允許狀態(tài)被永久化,但是在這種情況下,集群不能通信,并且因此當集群再次通信時將需要執(zhí)行狀態(tài)協(xié)調(diào),其中僅一個激活實例存活,如本文中所描述的。注意,在該示例中,存儲裝置在每個集群的基礎(chǔ)上被集中化。

如所理解的,當應用或另一組件需要時,運行時激活組件。因此,因為應用能夠在任何時間尋址組件并且不具有組件的激活或去激活狀態(tài)的概念,本文中為了簡化和解釋的目的,組件即使暫時處于去激活狀態(tài),也可以被視為“激活”或“被激活”。

如將理解的,本文中描述了提供針對跨多個集群的應用的支持的技術(shù)。具體地,程序員不需要顯式地規(guī)定其中組件必須被激活的集群。因此,一個或多個實現(xiàn)允許未修改的應用是地理分布式的。

在地理分布式設(shè)置中,組件跨多個集群分布。但是,系統(tǒng)中的每個組件不太可能被來自每個集群的請求調(diào)用。特定組件的調(diào)用可以被限制為兩種訪問模式之一,包括本地引用的組件或全局引用的組件。

例如,很多組件僅可能從單個集群內(nèi)被引用。這種訪問模式在若干應用場景中自然出現(xiàn)。例如,在多玩家游戲場景的上下文中,游戲通常使其玩家登錄到相同數(shù)據(jù)中心中的相同集群或集群的集合中。

全局引用的組件允許從任何集群引用組件。例如,全局引用的組件可以包含聚合信息,諸如全球排行榜或用戶的游戲簡檔的公開可訪問的摘要。

轉(zhuǎn)到一個合適的激活創(chuàng)建協(xié)議,為了清楚起見,可以認為每個集群如同它是單個節(jié)點;本文中描述了可能需要在集群之間交換的消息。在一個或多個實現(xiàn)中,地理分布式組件目錄協(xié)議P至少部分地基于上述組件訪問模式。

如圖5所示,當集群C0需要激活組件V時,C0詢問其可以與之通信的每個集群(例如集群C1-Cn)該集群是否已經(jīng)激活該組件。為此,描述了在每個集群上運行的協(xié)議P的請求/響應部分。如果存在已經(jīng)激活組件的集群,則C0使用該激活。如果沒有C0可以與之通信的其它集群C1-Cn已經(jīng)創(chuàng)建了激活,則集群C0在本地創(chuàng)建激活。

本文中所描述的技術(shù)需要處理競爭狀況,例如,當C0首次試圖調(diào)用組件V時,它詢問它可以與其通信的每個集群關(guān)于V的激活;這防止C0創(chuàng)建V的副本激活。然而,如果另一個集群C1同時首次試圖調(diào)用V,則C0和C1可以另外各自為V創(chuàng)建不同的激活。協(xié)議P避免該競爭狀況場景,如下所述。

本文中所描述的技術(shù)還需要處理分割,即,當并非所有集群都可以彼此通信時。例如,由于集群C0關(guān)于組件V僅可以詢問其可以與之通信的集群,如果存在從集群C0分割的任何集群,則它們中的一個或多個可能已經(jīng)激活V。在分割集群中的這些激活對于集群C0是未知的,因此如本文中所描述的,在某些情況下,盡管存在這些激活,但是集群C0仍然可以激活V。

分割問題的一個解決方案是使用一致的組件創(chuàng)建策略,其不允許在存在分割的情況下創(chuàng)建組件。另一稍微限制較少的解決方案是僅允許可以通信并且具有仲裁的集群在存在分割的情況下創(chuàng)建組件。然而,存在顯著的分割機會,特別是在廣域網(wǎng)中,因此,這樣的策略可以使系統(tǒng)或有可能使系統(tǒng)的大部分不可用于創(chuàng)建新的組件

如圖6中示例的,每個集群具有組件目錄660,組件目錄660通常包括將VirtualComponentId(虛擬組件Id)映射到類型元組<ActivationId,ActivationState>(<激活I(lǐng)d,激活狀態(tài)>)的字典;其中VirtualComponentId是組件的標識符,ActivationId是組件的激活的標識符,以及ActivationState。如圖6一般所示,ActivationState可以取五個值之一:

·OWNED(擁有):如果在沒有分割的情況下創(chuàng)建激活,則激活處于狀態(tài)OWNED。也就是說,在被創(chuàng)建時,創(chuàng)建集群的活動多集群等于整個多集群。

·DOUBTFUL:如果在創(chuàng)建集群和其他集群之間存在一個或多個分割的情況下創(chuàng)建激活,則激活處于狀態(tài)DOUBTFUL。也就是說,在被激活時,創(chuàng)建集群的活動多集群是整個多集群的真子集。如果組件V的激活是DOUBTFUL,則它可能已經(jīng)被創(chuàng)建,盡管在創(chuàng)建集群的活動多集群之外存在另一激活。

·REQUESTED_OWNERSHIP(請求_所有權(quán)):如果組件V的激活存在的集群在向其活動多集群中的其他集群詢問其他激活的過程中,則組件V的激活處于狀態(tài)REQUESTED_OWNERSHIP。

·RACE_LOSER(競爭_失敗方):如果集群C0失去與試圖同時激活A1的另一個集群(例如C1)的競爭狀況,則集群C0中的組件V的激活A0處于狀態(tài)RACE_LOSER。

·CACHED(緩存):如果激活是對遠程集群中的激活的引用,則激活處于CACHED。

轉(zhuǎn)到本文中所描述的技術(shù)如何處理競爭狀況,作為示例,考慮集群C0想要為組件V創(chuàng)建激活A0。如圖7的步驟702所示,C0首先在其組件目錄V=><A0,REQUESTED_OWNERSHIP>中插入條目。C0然后向其活動多集群中的集群廣播(例如,圖5和圖7的步驟704)類型ACTIVATION_REQUEST(V,C0)(激活_請求(V,C0))的消息,其中V是C0正在試圖激活的組件的VirtualComponentId。

當另一集群(例如集群C1)接收到ACTIVATION_REQUEST(V,C0)消息時,集群C1針對與組件V相對應的映射檢查其組件目錄。響應集群運行協(xié)議P的響應部分,通常如圖8所示,其中步驟802表示接收到請求。

如果集群C1的組件目錄不包含針對組件V的映射,如在步驟804處所評估的,則集群C1在步驟822處返回ACTIVATION_RESPONSE(PASS,null)(激活_響應(通過,空))。集群C1不對其組件目錄進行任何改變。

如果C1的組件目錄包含針對組件V的映射,則映射可以處于上述五個ActivationState之一。C1采取的操作基于其組件目錄中的激活的ActivationState。

步驟806評估C1是否在其組件目錄中包含V=><A1,OWNED>,其中A1是由C1為組件V創(chuàng)建的激活。在這種情況下,C1已經(jīng)創(chuàng)建了針對組件V的激活。因此,集群C1通過在步驟810向集群C0發(fā)送消息ACTIVATION_RESPONSE(FAILED,A1)(激活_響應(失敗,A1))來對集群C0進行響應C1已經(jīng)擁有組件V的激活,其中A1表示激活I(lǐng)D。

如果不擁有,則步驟808評估集群C1在其組件目錄中是否包含V=><A1,DOUBTFUL>。這種情況類似于C1包含處于狀態(tài)OWNED的激活的情況。在這種情況下,C1具有針對組件V的激活(A1),但是當C1創(chuàng)建激活A1時,C1的活動多集群是整個多集群的子集。如果是可疑,則集群C1在步驟810類似地用ACTIVATION_RESPONSE(FAILED,A1)進行響應。

如果狀態(tài)既不是擁有也不是可疑,則步驟812評估集群C1是否在C1的組件目錄中包含V=><A1,REQUESTED_OWNERSHIP>。在這種情況下,C0和C1都競爭激活組件V;通過圖7的步驟702回憶,在發(fā)出消息ACTIVATION_REQUEST之前,C0在其組件目錄中插入了條目V=><A0,REQUESTED_OWNERSHIP>。還要注意,因為C1也在請求所有權(quán),所以C0類似地運行如圖8所示例的協(xié)議的響應部分。

在從集群C0接收到消息ACTIVATION_REQUEST之后,C1的狀態(tài)對于該組件是REQUESTED_OWNERSHIP,C1需要決定它是贏得還是失去競爭狀況??梢允褂?步驟814)例如構(gòu)建在策略/規(guī)則110中并且在本文中作為確定性優(yōu)先級函數(shù)prec_func示例的決勝機制T來決定哪個集群贏得競爭狀況。注意,集群C0正在或者將類似地運行優(yōu)先函數(shù)。

在一個或多個實現(xiàn)中,函數(shù)prec_func取兩個參數(shù),第一個是VirtualComponentId V,第二個是ClusterId C。對于給定的組件V,prec_func(V,C)定義所有C上的總順序;對于給定的一對不同的集群C和C’,prec_func(V,C)小于prec_func(V,C’)或prec_func(V,C)大于prec_func(V,C’)。

如果prec_func(V,C1)大于prec_func(V,C0),則C1贏得競爭狀況(步驟816),并且在步驟818發(fā)送ACTIVATION_RESPONSE(FAILED,null)(激活_響應(失敗,空))。相反,如果prec_func(V,C1)小于prec_func(V,C0),則C1執(zhí)行兩個步驟:在步驟820,集群C1將其對應于V的組件目錄條目的狀態(tài)改為V=><A1,RACE_LOSER>,并且在步驟822,集群C1向集群C0發(fā)送ACTIVATION_RESPONSE(PASS,null)。

如果在步驟812狀態(tài)不是REQUESTED_OWNERSHIP,則C1可以在其組件目錄中包含V=><A1,RACE_LOSER>或V=><A’,CACHED>。注意,在該實現(xiàn)中,這些是僅有的兩個剩余可能狀態(tài)(CACHED表示C1包含對由另一集群C’擁有的V的激活A’的引用)。在任一情況下,C1在步驟822用ACTIVATION_RESPONSE(PASS,null)進行響應。

返回圖7,在從其活動多集群中的每個集群接收到ACTIVATION_RESPONSE時,針對組件V的集群C0的條目或者處于狀態(tài)REQUESTED_OWNERSHIP或者處于狀態(tài)RACE_LOSER(因為集群C0可能已經(jīng)類似地基于C1針對所有權(quán)的請求而執(zhí)行了步驟814、816和820)。

如果如在步驟706處評估的針對V的C0的條目處于狀態(tài)RACE_LOSER,則另一集群贏得競爭。C0延遲短的時間(步驟720),將其狀態(tài)設(shè)置為REQUESTED_OWNERSHIP,并且通過向其活動多集群中的每個集群發(fā)送消息ACTIVATION_REQUEST來重新運行協(xié)議。注意,集群C0延遲,以便允許贏得競爭狀況的集群得到組件的所有權(quán)。

如果針對組件V的C0的組件目錄處于狀態(tài)REQUESTED_OWNERSHIP,則C0基于其從其活動多集群中的集群看到的消息ACTIVATION_RESPONSE來采取以下步驟:

如果C0從其活動多集群中的所有其它集群接收到ACTIVATION_RESPONSE(PASS,null)(步驟708),并且C0的活動多集群也是整個多集群(即,在步驟710不存在分割),則在步驟712,C0將其組件目錄條目從V=><A0,REQUESTED_OWNERSHIP>改為V=><A0,OWNED>。如果C0的活動多集群不等于整個多集群,即存在分割,則C0將其組件目錄條目改為V=><A0,DOUBTFUL>。然后發(fā)生激活,如步驟716所示。

如果集群C0從其活動多集群中的集群中的至少一個集群接收到ACTIVATION_RESPONSE(FAILED,A’)(激活_響應(失敗,A’)),則步驟718跳轉(zhuǎn)到步驟722,在步驟722,集群將其組件目錄條目改為V=><A0,CACHED>,如步驟726所示。注意,無論是處于OWNED狀態(tài)還是DOUBTFUL狀態(tài),經(jīng)由在激活激活的集群上執(zhí)行的步驟810返回激活I(lǐng)D A’。如果集群C0接收到多于一個這樣的響應(步驟722),則集群C0使用prec_func(步驟724)來決定在步驟726在其組件目錄中緩存哪個激活。然后集群C0使用現(xiàn)有激活,如步驟728所示。

返回步驟718,如果集群C0沒有接收到具有非空A’的FAILED(失敗)ACTIVATION_RESPONSE消息,但是接收到至少一個ACTIVATION_RESPONSE(FAILED,null)消息,則集群C0通過向其活動多集群中的每個集群發(fā)送消息ACTIVATION_REQUEST來重新運行協(xié)議。這可以包括延遲,如步驟720所示。

集群可以例如在步驟716之后,向其他集群廣播其最近激活的組件的激活通告。在一個實現(xiàn)中,例如,類可以由ClusterLocal(集群本地)或ClusterShared(集群共享)注釋,使得僅需要廣播ClusterShared類的組件的激活。這些在其他集群的組件目錄中可以被設(shè)置為狀態(tài)“CACHED”。

關(guān)于檢測組件的多個激活,考慮當活動多集群是整個多集群的子集時,集群C0在運行本文中所描述的協(xié)議之后創(chuàng)建DOUBTFUL激活。由于分割,C0無法與不屬于其活動多集群的集群進行通信。這些分割集群可能已經(jīng)創(chuàng)建了組件的激活。當在狀態(tài)DOUBTFUL下創(chuàng)建激活時,當分割之后修復時,執(zhí)行關(guān)于是否存在一個或多個副本激活的檢查。圖9和10涉及處理任何多個激活。

如果存在一個或多個副本激活,則一個激活被分類為“獲勝方”激活,而其余激活被分類為“失敗方”激活。每個失敗方激活的狀態(tài)與獲勝方激活的狀態(tài)合并,然后失敗方激活被去除。

無論何時集群的活動多集群改變(即,集群加入),協(xié)議的該部分運行,如在圖9的步驟902處一般表示的??梢允褂靡恢碌膮f(xié)議來決定對活動多集群的改變。因此,新的活動多集群中的每個集群運行協(xié)議和/或當一個或多個集群加入活動多集群時。如果一個或多個集群退出并且沒有集群加入,則運行協(xié)議沒有意義。

如步驟904所示,當集群C0的活動多集群改變時,集群C0收集處于狀態(tài)DOUBTFUL的任何激活,并且向其活動多集群中的其他集群發(fā)送RESOLVE_REQUEST(Doubtful_Set,C0)(解析_請求(可疑_集合,C0))。Doubtful_Set(可疑_集合)是由C0創(chuàng)建的DOUBTFUL激活的集合,如圖2中一般由可能的副本列表222(1)和222(n)的通信所表示的。在一個或多個實現(xiàn)中,Doubtful_Set中的每個DOUBTFUL激活是一對形式<V,A>,其中A是組件V的激活。

當集群(例如,C1)接收到消息RESOLVE_REQUEST(Doubtful_Set,C0)時,如圖10的步驟1002所示,集群C1創(chuàng)建激活的空集合(步驟1004),例如命名為Loser_Set以返回C0。然后,對于Doubtful_Set中的每個組件<V,A0>,(步驟1006和1020),如果如步驟1008中針對組件V所評估的C1的組件目錄包含DOUBTFUL或OWNED激活A1,則表示C1和C0都創(chuàng)建了組件V的激活。一個是獲勝方,另一個是失敗方。為了決定哪個集群是哪方,可以使用與上述類似的優(yōu)先函數(shù),如通過步驟1010和1012所表示的。如果prec_func(V,C1)大于prec_func(V,C0),則C1獲勝并且在步驟1014將<V,A0>添加到Loser_Set(失敗方_集合)。如果prec_func(V,C1)小于prec_func(V,C0),則C1從其組件目錄去除A1(步驟1016),并且在步驟1018終止激活(在合并狀態(tài)之后或至少將其持久化以用于之后的合并)。一旦C1完成處理Doubtful_Set中的所有<V,A0>對,步驟1020跳轉(zhuǎn)到步驟1022,在步驟1022,集群C1向集群C0發(fā)送消息RESOLVE_RESPONSE(Loser_Set)(解析_響應(失敗方_集合))。

返回圖9,步驟906,當C0從其活動多集群中的每個集群Ci接收到RESOLVE_RESPONSE(Loser_Seti)時,C0將Loser_Seti累加到Complete_Loser_Set(完整_失敗方_集合)中(步驟908)。C0從其組件目錄去除Complete_Loser_Set中的所有激活(步驟910)。步驟912表示合并和終止那些失敗的副本。

注意,如果Ci從未為V創(chuàng)建激活,或者如果Ci為V創(chuàng)建激活,但是C0優(yōu)先于Ci并且因此Ci從其組件目錄去除V,則集群Ci不將組件V的DOUBTFUL激活添加到Loser_Seti。如果新的活動多集群等于整個多集群(在步驟914中不存在分割),則C0關(guān)于其所有DOUBTFUL組件已經(jīng)聯(lián)系了系統(tǒng)中的每個集群。如果沒有一個集群將組件V的激活添加到Loser_Seti,則C0的激活狀態(tài)被轉(zhuǎn)換為狀態(tài)OWNED;或者沒有集群為V創(chuàng)建激活、或者C0優(yōu)先于為V創(chuàng)建激活的所有其他集群。因此,C0得到Doubtful_Set和Complete_Loser_Set的差異(步驟916),并且將差異中的每個激活的狀態(tài)改為OWNED(步驟918)。

轉(zhuǎn)向集群內(nèi)的個體服務器操作的多個方面,當創(chuàng)建組件的激活時,集群的服務器之間的集群內(nèi)消息被適配為地理分布式集群環(huán)境??紤]在試圖為組件V創(chuàng)建激活A0的集群C0中存在服務器S0c。S0c首先計算組件V的一致性散列以找出集群的哪個服務器包含適當?shù)哪夸浄指頢0p。如果S0p已經(jīng)包含針對組件V的激活,則它將激活返回給調(diào)用方S0c。然而,如果S0p不包含針對組件V的激活,則其運行激活創(chuàng)建協(xié)議,如本文參考圖5、7和8一般描述的。

關(guān)于運行如參考圖9和圖10一般描述的副本檢測階段,可以將集群C0中的一個服務器S0g分配為網(wǎng)關(guān)服務器。集群的網(wǎng)關(guān)服務器從集群的服務器內(nèi)收集DOUBTFUL激活的集合。S0g向C0中的每個服務器廣播消息,以向每個服務器詢問在其組件目錄分割中的DOUBTFUL激活的集合。一旦網(wǎng)關(guān)服務器從每個服務器獲得DOUBTFUL激活的集合,S0g然后向每個其他集群的網(wǎng)關(guān)服務器S1g廣播消息RESOLVE_REQUEST(Doubtful_Set,C0),如上面參照圖7步驟704一般描述的。

在從S0g接收到消息RESOLVE_REQUEST(Doubtful_Set,C0)時,例如在圖10的步驟1002,S1g基于每個激活的VirtualComponentId的一致性散列,將一組DOUBTFUL激活的集合分發(fā)給負責適當?shù)慕M件目錄分割的服務器。集群C1中的個體服務器如本文中所描述的解析激活。C1中的每個服務器還將失敗方激活的集合返回S1g(如果遠程失敗方激活的集合為空,則返回空集)。

如果S1g從C1中的每個服務器獲得失敗方激活的集合,則S1g使用消息RESOLVE_RESPONSE(Loser_Set,true)(解析_響應(失敗方_集合,真))向S0g發(fā)送失敗方激活的完整集合。如果S1g沒有從每個服務器獲得失敗方激活的集合,則它向S0g發(fā)送RESOLVE_RESPONSE(Loser_Set,false)(解析_響應(失敗方_集合,假))。這兩種情況是區(qū)分的,因為C0不能將DOUBTFUL激活V轉(zhuǎn)換為OWNED,除非確定每個其他集群C1已經(jīng)確保它不包含針對V的激活,或者它包含針對V的激活,但是根據(jù)prec_func,C0優(yōu)先。

當S0g從其活動多集群中的每個集群接收到消息RESOLVE_RESPONSE時,其去激活失敗方激活的集合。然而,如果以下兩個狀況成立,則S0g僅將Doubtful_Set\Loser_Set中的激活集合轉(zhuǎn)換為狀態(tài)OWNED:1)其活動多集群等于整個多集群,2)所有消息具有形式RESOLVE_RESPONSE(Loser_Set,true)。如果一個或多個接收到的消息是包含RESOLVE_RESPONSE(Loser_Set,false)的形式,它不會將任何DOUBTFUL激活轉(zhuǎn)換為OWNED。如果S0g從遠程集群C1的網(wǎng)關(guān)服務器S1g接收到消息RESOLVE_RESPONSE(Loser_Set,false),則S0g不能確定C0中的所有DOUBTFUL激活已經(jīng)由集群C1中的適當服務器分析。

注意,以上描述僅是一個示例,其中每個集群使用單個區(qū)分的服務器作為網(wǎng)關(guān)。然而,在備選實現(xiàn)中,多個服務器可以用于冗余,和/或DOUBTFUL激活的集合可以在若干網(wǎng)關(guān)服務器之間被劃分。

關(guān)于集群成員資格,如果集群C中的服務器S0試圖創(chuàng)建針對組件V的激活A,則S0首先將V=><A,REQUESTED_OWNERSHIP>形式的條目插入到其組件目錄中,然后向其活動多集群中的每個集群發(fā)送消息ACTIVATION_REQUEST。如果在同時將新服務器添加到集群C或從集群C刪除新服務器,則S0負責的VirtualComponentId散列的范圍可能改變。因此,S0的組件目錄分割中的數(shù)據(jù)的子集可能需要移動到另一服務器S1。在S0正在運行激活創(chuàng)建協(xié)議時,可能發(fā)生S0負責的VirtualComponentId散列的范圍的改變。

即使當S0正在運行針對組件V的激活創(chuàng)建協(xié)議時,也允許針對組件V的組件目錄條目從服務器S0移動到服務器S1。當激活創(chuàng)建協(xié)議正在進行時,組件目錄條目具有形式V=><A,REQUESTED_OWNERSHIP>或V=><A,RACE_LOSER>。當所有集群都使用消息ACTIVATION_RESPONSE進行響應時,S0找不到與組件V相對應的組件目錄條目(因為組件目錄條目可能遷移)。在該點處,S0識別組件目錄條目已經(jīng)移動到另一服務器,并且停止運行激活創(chuàng)建協(xié)議。當組件目錄條目已經(jīng)遷移到其的服務器S1接收到V=><A,REQUESTED_OWNERSHIP>或V=><A,RACE_LOSER>形式的組件目錄條目時,它將重新運行激活創(chuàng)建協(xié)議。為了運行激活創(chuàng)建協(xié)議,與激活相對應的組件目錄條目的ActivationState需要處于狀態(tài)REQUESTED_OWNERSHIP。因為S1可能已經(jīng)接收到處于狀態(tài)RACE_LOSER的組件目錄條目,所以S1需要首先將激活的狀態(tài)改為REQUESTED_OWNERSHIP;S1延遲,以便允許贏得競爭狀況的集群得到組件的所有權(quán),然后將組件目錄條目的狀態(tài)轉(zhuǎn)換為REQUESTED_OWNERSHIP。

S1僅需要針對具有ActivationState REQUESTED_OWNERSHIP或RACE_LOSER的組件目錄條目運行激活創(chuàng)建協(xié)議。激活狀態(tài)為DOUBTFUL、OWNED或CACHED的組件目錄條目不需要任何特殊處理。

轉(zhuǎn)到另一方面,一些(可能大多數(shù))組件僅從單個集群(即,其中組件被激活的集群)內(nèi)被引用。為了確保全局僅存在特定組件的單個激活,協(xié)議使得試圖創(chuàng)建組件V的激活的集群檢查其活動多集群中的任何其它集群是否已經(jīng)創(chuàng)建了針對V的激活。如果V是本地引用的組件,則除了創(chuàng)建集群之外的任何集群都將不引用V。對于本地引用的組件,例如V是本地引用的組件,集群C與其集群活動多集群中的所有集群檢查V的激活,盡管C是曾經(jīng)引用V的唯一集群。在C的活動多集群中關(guān)于V詢問每個集群的成本是單個WAN往返。WAN往返的網(wǎng)絡等待時間成本通常比集群內(nèi)的兩個節(jié)點之間的往返高若干大小的數(shù)量級。

為了避免在每個本地引用的組件V上支付WAN往返的成本,集群C可以在運行激活創(chuàng)建協(xié)議之前樂觀地創(chuàng)建針對V的激活。C然后異步地運行協(xié)議,而本地激活服務請求來自C中的服務器。如果C發(fā)現(xiàn)其活動多集群中的所有其他集群用ACTIVATION_RESPONSE(PASS,null)進行響應,則C對V的樂觀激活是DOUBTFUL或OWNED,如本文中所描述的。相反,如果C發(fā)現(xiàn)其活動多集群中的集群之一已經(jīng)激活了V,則C終止其對V的本地激活,并且在其組件目錄中添加對遠程激活的引用。

本公開的各方面與以下各項的任何組合一起可操作。本文中描述了在地理分布式計算環(huán)境的多集群分布式系統(tǒng)中提供單實例組件的示例。組件始終由應用程序通過組件的身份可尋址,包括當集群彼此分割時。

當計算環(huán)境沒有彼此分割的集群時,可以在集群中僅激活多集群分布式系統(tǒng)中的另一單實例組件。當執(zhí)行激活的集群是集群仲裁的一部分時,可以在集群中僅激活再一單實例組件。

本文中進一步描述了當被分割的集群不再被分割時,消除任何副本組件,以僅提供該組件的一個存活的單實例。消除任何副本組件包括執(zhí)行選擇組件的存活單實例的確定性操作。

另一方面涉及防止競爭狀況,其中至少兩個未分割的集群同時嘗試激活組件,包括檢測競爭狀況狀態(tài)并且僅選擇一個獲勝組件實例用于激活。防止競爭狀況包括執(zhí)行選擇用于激活的獲勝組件實例的確定性操作。

在一個或多個方面,一種分布式計算系統(tǒng)包括多個集群,每個集群具有在至少一個處理器上的至少一個服務器存儲器中執(zhí)行的運行時。運行時被配置為防止競爭狀況,其中兩個或更多個集群同時嘗試激活組件,并且當集群被分割時允許存在副本組件,包括將狀態(tài)數(shù)據(jù)與每個可能的副本相關(guān)聯(lián)以指示可能的副本狀態(tài)。當集群不再被分割時運行時評估狀態(tài)數(shù)據(jù)以去除任何副本組件,以便使得針對存在的任何副本僅一個組件存活。

對于給定的組件(或類型),運行時可以被配置為防止在分布式計算系統(tǒng)的集群之間存在分割的情況下激活另一組件。

運行時可以被配置為在每個其他集群已經(jīng)關(guān)于組件是否在另一集群上被激活而進行響應之前樂觀地激活該組件。

運行時通過向請求集群能夠與其通信的每個其他集群傳送激活請求來防止競爭狀況,激活請求指示請求集群激活組件的意圖。當另一集群確定請求集群與該另一集群處于競爭狀況時,該另一集群使用決勝機制來確定哪個激活請求要成功。

運行時通過以下方式來去除任何副本組件:將可能的副本的集合交換到集群可以與之通信的每個其他集群,并且使用決勝機制確定針對存在的任何副本哪個復制組件要存活以及哪一個或多個副本將被終止。運行時可以被配置為當沒有集群彼此分割時,改變狀態(tài)數(shù)據(jù)以指示集群的唯一所有權(quán)。

一個或多個方面涉及在嘗試集群中嘗試確定在嘗試集群可以與之通信的任何其他集群中組件是否已經(jīng)被激活,并且如果是,則使用已經(jīng)激活的組件。如果尚未激活,則關(guān)于在至少兩個集群之間是否存在分割進行確定。如果存在分割,則組件被激活并且與指示激活組件是可能的副本的狀態(tài)數(shù)據(jù)相關(guān)聯(lián)。

一個或多個方面涉及確定至少一個先前分割的集群不再被分割,并且與至少一個其他集群交換可能的副本集合。如果存在副本組件,則選擇要存活的一個組件。當沒有集群彼此分割時,狀態(tài)數(shù)據(jù)可以從指示可能的副本改為指示集群的唯一所有權(quán)。

一個或多個方面涉及檢測競爭狀況,其中至少兩個未分割的集群同時嘗試激活組件,并且僅選擇一個獲勝組件實例用于激活。

還描述了檢測分割,并且僅當嘗試激活的集群是集群仲裁的一部分時允許激活另一組件。

在地理分布式計算環(huán)境中,描述了用于在多集群分布式系統(tǒng)中提供單實例組件的裝置,其中該組件始終由應用經(jīng)由組件的身份可尋址,該組件針對應用可尋址包括當集群彼此分割時。還描述了用于在嘗試集群中嘗試確定在嘗試集群可以與之通信的任何其他集群中組件是否已經(jīng)被激活的裝置,如果是,則用于使用已經(jīng)激活的組件的裝置,如果尚未激活,則描述了用于確定在至少兩個集群之間是否存在分割的裝置,并且如果存在分割,則用于激活組件并且將組件與指示激活組件是可能的副本的狀態(tài)數(shù)據(jù)相關(guān)聯(lián)的裝置。

示例網(wǎng)絡化和分布式環(huán)境

本領(lǐng)域普通技術(shù)人員可以理解,本文中所描述的各種實現(xiàn)和方法可以結(jié)合任何計算機或其他客戶端或服務器設(shè)備來實現(xiàn),這些計算機或其他客戶端或服務器設(shè)備可以被部署為計算機網(wǎng)絡的一部分或者部署在分布式計算環(huán)境中,并且可以連接到任何種類的一個或多個數(shù)據(jù)儲存庫。在這點上,本文中所描述的各種實現(xiàn)可以在具有任何數(shù)目的存儲器或存儲單元以及跨任何數(shù)目的存儲單元發(fā)生的任何數(shù)目的應用和進程的任何計算機系統(tǒng)或環(huán)境中實現(xiàn)。這包括但不限于具有部署在網(wǎng)絡環(huán)境或分布式計算環(huán)境中的具有遠程或本地存儲裝置的服務器計算機和客戶端計算機的環(huán)境。應當理解,系統(tǒng)設(shè)置可以是本地模式操作(例如,直接在硬件上)或虛擬化環(huán)境、或兩者的組合。

分布式計算通過計算設(shè)備和系統(tǒng)之間的通信交換提供計算機資源和服務的共享。這些資源和服務包括針對對象(例如文件)的信息交換、高速緩存存儲裝置和磁盤存儲裝置。這些資源和服務還包括跨多個處理單元的處理能力的共享,用于負載平衡、資源擴展、處理的專業(yè)化等。分布式計算利用網(wǎng)絡連接性,以允許客戶端利用它們的集體能力來使整個企業(yè)受益。在這點上,各種設(shè)備可以具有可以參與資源管理機制的應用、對象或資源,如針對本公開的各種實現(xiàn)所描述的。

圖11提供示例網(wǎng)絡化或分布式計算環(huán)境的示意圖。分布式計算環(huán)境包括計算對象1110、1112等以及計算對象或設(shè)備1120、1122、1124、1126、1128等,其可以包括如由示例應用1130、1132、1134、1136、1138表示的程序、方法、數(shù)據(jù)存儲、可編程邏輯等。可以理解,計算對象1110、1112等以及計算對象或設(shè)備1120、1122、1124、1126、1128等可以包括不同的設(shè)備,例如個人數(shù)字助理(PDA)、音頻/視頻設(shè)備、移動電話、MP3播放器、個人計算機、膝上型計算機等。

每個計算對象1110、1112等以及計算對象或設(shè)備1120、1122、1124、1126、1128等可以與一個或多個其他計算對象1110、1112等以及計算對象或設(shè)備1120、1122、1124、1126、1128等直接或間接地通過通信網(wǎng)絡1140來通信。即使在圖11中被示為單個元件。但是通信網(wǎng)絡1140可以包括向圖11的系統(tǒng)提供服務的其他計算對象和計算設(shè)備,和/或可以表示未示出的多個互連網(wǎng)絡。每個計算對象1110、1112等或者計算對象或設(shè)備1120、1122、1124、1126、1128等還可以包含應用,諸如應用1130、1132、1134、1136、1138,其可以利用適于與根據(jù)本公開的各種實現(xiàn)提供的應用通信或?qū)崿F(xiàn)該應用的API或其他對象、軟件、固件和/或硬件。

存在支持分布式計算環(huán)境的各種系統(tǒng)、組件和網(wǎng)絡配置。例如,計算系統(tǒng)可以通過有線或無線系統(tǒng),通過本地網(wǎng)絡或廣泛分布式網(wǎng)絡連接在一起。當前,很多網(wǎng)絡耦合到因特網(wǎng),其為廣泛分布式計算提供基礎(chǔ)設(shè)施,并且包括很多不同的網(wǎng)絡,盡管任何網(wǎng)絡基礎(chǔ)設(shè)施可以用于例如在各種示例中描述的易發(fā)生于系統(tǒng)的通信。

因此,可以利用具有諸如客戶端/服務器、對等或混合架構(gòu)的網(wǎng)絡拓撲和網(wǎng)絡基礎(chǔ)設(shè)施的主機?!翱蛻舳恕笔鞘褂门c其不相關(guān)的另一類或組的服務的類或組的成員??蛻舳丝梢允钦埱笥闪硪怀绦蚧蜻^程提供的服務的過程,例如大致一組指令或任務。客戶端過程利用所請求的服務,而不必“知道”關(guān)于其他程序或服務本身的任何工作細節(jié)。

在客戶端/服務器架構(gòu)中,特別是網(wǎng)絡化的系統(tǒng)中,客戶端通常是訪問由另一計算機(例如,服務器)提供的共享網(wǎng)絡資源的計算機。在圖11的圖示中,作為非限制性示例,計算對象或設(shè)備1120、1122、1124、1126、1128等可以被認為是客戶端,并且計算對象1110、1112等可以被認為是服務器,其中充當服務器的計算對象1110、1112等提供數(shù)據(jù)服務,諸如從客戶端計算對象或設(shè)備1120、1122、1124、1126、1128等接收數(shù)據(jù),存儲數(shù)據(jù),處理數(shù)據(jù),向客戶端計算對象或設(shè)備1120、1122、1124、1126、1128等傳輸數(shù)據(jù),但是根據(jù)情況,任何計算機都可以被認為是客戶端、服務器或兩者。

服務器通常是通過遠程或本地網(wǎng)絡(例如因特網(wǎng)或無線網(wǎng)絡基礎(chǔ)設(shè)施)可訪問的遠程計算機系統(tǒng)??蛻舳诉M程可以在第一計算機系統(tǒng)中是活動的,并且服務器進程可以在第二計算機系統(tǒng)中是活動的,通過通信介質(zhì)彼此通信,從而提供分布式功能并且允許多個客戶端利用服務器的信息收集能力。

在其中通信網(wǎng)絡1140或總線是因特網(wǎng)的網(wǎng)絡環(huán)境中,例如,計算對象1110、1112等可以是其他計算對象或設(shè)備1120、1122、1124、1126、1128等經(jīng)由諸如超文本傳輸協(xié)議(HTTP)的多種已知協(xié)議中的任何協(xié)議與之進行通信的Web服務器。如分布式計算環(huán)境可以具有的特征,充當服務器的計算對象1110、1112等還可以用作客戶端,例如計算對象或設(shè)備1120、1122、1124、1126、1128等。

示例計算設(shè)備

如上所述,有利地,本文中所描述的技術(shù)可以應用于任何設(shè)備。因此,可以理解,所有種類的手持式、便攜式和其他計算設(shè)備和計算對象被預期用于結(jié)合各種實現(xiàn)使用。因此,下面在圖12中描述的下面的通用遠程計算機僅是計算設(shè)備的一個示例。

示例可以部分地經(jīng)由用于由針對設(shè)備或?qū)ο蟮姆盏拈_發(fā)者使用的操作系統(tǒng)來實現(xiàn),和/或被包括在操作以執(zhí)行本文中所描述的各種實現(xiàn)的一個或多個功能方面的應用軟件內(nèi)。軟件可以在由諸如客戶端工作站、服務器或其他設(shè)備的一個或多個計算機執(zhí)行的諸如程序模塊的計算機可執(zhí)行指令的一般上下文中描述。本領(lǐng)域技術(shù)人員將理解,計算機系統(tǒng)具有可以用于傳送數(shù)據(jù)的各種配置和協(xié)議,因此,任何特定的配置或協(xié)議都不被認為是限制性的。

圖12因此示出了其中可以實現(xiàn)本文中所描述的示例的一個或多個方面的合適的計算系統(tǒng)環(huán)境1200的示例,但是如上所述,計算系統(tǒng)環(huán)境1200僅是合適的計算環(huán)境的一個示例,而非意圖建議對用途或功能范圍的任何限制。另外,計算系統(tǒng)環(huán)境1200并非意圖被解釋為具有與示例計算系統(tǒng)環(huán)境1200中所示的組件中的任一個或組合相關(guān)的任何依賴性。

參考圖12,用于實現(xiàn)一個或多個實現(xiàn)的示例遠程設(shè)備包括計算機1210形式的通用計算設(shè)備。計算機1210的組件可以包括但不限于處理單元1220、系統(tǒng)存儲器1230以及將包括系統(tǒng)存儲器的各種系統(tǒng)組件耦合到處理單元1220的系統(tǒng)總線1222。

計算機1210通常包括各種機器/計算機可讀介質(zhì),并且可以是可以由計算機1210訪問的任何可用介質(zhì)。系統(tǒng)存儲器1230可以包括易失性和/或非易失性存儲器形式的計算機存儲介質(zhì),例如只讀存儲器(ROM)和/或隨機存取存儲器(RAM)。作為示例而非限制,系統(tǒng)存儲器1230還可以包括操作系統(tǒng)、應用程序、其他程序模塊和程序數(shù)據(jù)。

用戶可以通過輸入設(shè)備1240將命令和信息輸入到計算機1210中。監(jiān)視器或其他類型的顯示設(shè)備也經(jīng)由諸如輸出接口1250的接口連接到系統(tǒng)總線1222。除了監(jiān)視器之外,計算機還可以包括可以通過輸出接口1250連接的其他外圍輸出設(shè)備,諸如揚聲器和打印機。

計算機1210可以使用到一個或多個其他遠程計算機(諸如遠程計算機1270)的邏輯連接在網(wǎng)絡化或分布式環(huán)境中操作。遠程計算機1270可以是個人計算機、服務器、路由器、網(wǎng)絡PC、對等設(shè)備或其他公共網(wǎng)絡節(jié)點或任何其他遠程介質(zhì)消費或傳輸設(shè)備,并且可以包括以上關(guān)于計算機1210描述的任何或所有元件。圖12所示的邏輯連接包括網(wǎng)絡1272,例如局域網(wǎng)(LAN)或廣域網(wǎng)(WAN),但是也可以包括其他網(wǎng)絡/總線。這樣的網(wǎng)絡化環(huán)境在家庭、辦公室、企業(yè)范圍的計算機網(wǎng)絡、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。

如上所述,盡管已經(jīng)結(jié)合各種計算設(shè)備和網(wǎng)絡架構(gòu)描述了示例實現(xiàn),但是基礎(chǔ)概念可以應用于期望提高資源使用效率的任何網(wǎng)絡系統(tǒng)和任何計算設(shè)備或系統(tǒng)。

此外,存在多種方式實現(xiàn)相同或類似功能,例如,使得應用和服務能夠利用本文中所描述的技術(shù)的適當?shù)腁PI、工具箱、驅(qū)動程序代碼、操作系統(tǒng)、控件、獨立或可下載軟件對象等。因此,從API(或其他軟件對象)的角度以及從實現(xiàn)如本文中所描述的一個或多個示例的軟件或硬件對象來考慮本文中的示例。因此,本文中所描述的各種示例可以具有完全為硬件、部分為硬件、部分為軟件以及軟件的多個方面。

本文中使用的詞語“示例性”表示用作示例、實例或說明。為了避免疑問,本文中公開的主題不限于這些示例。另外,本文中描述為“示例性”的任何方面或設(shè)計不一定被解釋為相對于其它方面或設(shè)計是優(yōu)選的或有利的,也不表示排除本領(lǐng)域普通技術(shù)人員已知的等效示例性結(jié)構(gòu)和技術(shù)。此外,為了避免疑問,在使用術(shù)語“含有”、“具有”、“包含”和其它類似詞語的范圍內(nèi),這些術(shù)語旨在以類似于術(shù)語“包括”的方式是包含性的,作為開放式轉(zhuǎn)換詞,而在權(quán)利要求中使用時不排除任何附加或其它元件。

如上所述,本文中所描述的各種技術(shù)可以結(jié)合硬件或軟件或在適當時通過兩者的組合來實現(xiàn)。如本文中所使用的,術(shù)語“組件”、“模塊”、“系統(tǒng)”等同樣旨在指代計算機相關(guān)實體,其是硬件、硬件和軟件的組合、軟件或執(zhí)行中的軟件。例如,組件可以是但不限于在處理器上運行的進程、處理器、對象、可執(zhí)行文件、執(zhí)行線程、程序和/或計算機。作為說明,在計算機上運行的應用和計算機都可以是組件。一個或多個組件可以駐留在進程和/或執(zhí)行線程內(nèi),并且組件可以位于一個計算機上和/或分布在兩個或更多個計算機之間。

已經(jīng)關(guān)于若干組件之間的交互描述了上述系統(tǒng)??梢岳斫?,這樣的系統(tǒng)和組件可以包括這些組件或規(guī)定的子組件,規(guī)定的組件或子組件中的一些、和/或附加組件,并且基于前述的各種排列和組合。子組件還可以被實現(xiàn)為通信地耦合到其他組件而不是包括在父組件(分層)內(nèi)的組件。另外,可以注意到,一個或多個組件可以組合成提供聚合功能的單個組件或被劃分為若干單獨的子組件,并且可以提供任何一個或多個中間層(例如管理層)以通信地耦合到這樣的子組件以便提供集成功能。本文中所描述的任何組件還可以與本文中未具體描述但本領(lǐng)域技術(shù)人員通常已知的一個或多個其他組件交互。

鑒于本文中所描述的示例系統(tǒng),還可以參考各個附圖的流程圖來理解可以根據(jù)所描述的主題實現(xiàn)的方法。雖然為了簡化說明的目的,將方法示出并且描述為一系列框,但是應當理解和明白的是,各種示例不受框的順序限制,因為一些框可以以與本文所描繪和描述的不同的順序發(fā)生,和/或與其它框同時發(fā)生。在通過流程圖示出非順序或分支流程的情況下,可以理解,實現(xiàn)相同或相似結(jié)果的各種其他分支、流程路徑和框的順序可以被實施。此外,一些圖示的框在實現(xiàn)下文描述的方法時是可選的。

結(jié)論

盡管本發(fā)明容許各種修改和備選構(gòu)造,但是其某些所示實施例在附圖中示出并且已經(jīng)在上面詳細描述。然而,應當理解,并非意圖將本發(fā)明限制為所公開的具體形式,相反,本發(fā)明旨在覆蓋落入本發(fā)明的精神和范圍內(nèi)的所有修改、備選構(gòu)造和等同物。

除了本文中所描述的各種實施例之外,應當理解,可以使用其他類似的實施例,或者可以對所描述的一個或多個實施例進行修改和添加,以執(zhí)行對應的一個或多個實施例的相同或等同功能。此外,多個處理芯片或多個設(shè)備可以共享本文中所描述的一個或多個功能的性能,并且類似地,可以跨多個設(shè)備實現(xiàn)存儲。因此,本發(fā)明不限于任何單個實施例,而是根據(jù)所附權(quán)利要求在寬度、精神和范圍內(nèi)進行解釋。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
民和| 张家川| 仪征市| 城口县| 永和县| 宁化县| 河北区| 无为县| 玉林市| 清水河县| 东光县| 罗定市| 阜康市| 深泽县| 达日县| 阿坝县| 汉寿县| 高碑店市| 中超| 南和县| 南雄市| 百色市| 浑源县| 星子县| 军事| 库伦旗| 潼南县| 朔州市| 桐梓县| 含山县| 盖州市| 滦南县| 江源县| 外汇| 八宿县| 邢台市| 五家渠市| 庆元县| 凌云县| 延安市| 留坝县|