專利名稱:用于相似性管理的方法和系統的制作方法
技術領域:
本發明涉及相似性(affinity)管理的領域。特別地,本發明涉及包含消息通知(messaging)系統的分布式計算機系統中的相似性管理。
背景技術:
在希望以類似的方式處理多個實體的情形下需要相似性管理。可以在分布式計算機系統中的WebSphere MQ(WebSphere和MQ是國際商業機器公司的商標)消息通知環境下提供這樣的相似性的實例。可以發送這樣的消息組,其中不傳送這種組中的任何成員直到所有成員已經到達為止。然而,如果將組的每個成員傳送到不同的隊列管理器,則由于在隊列管理器見到所有的組成員之前將不傳送,所以其結果是不會傳送組成員。在這種情況下,需要利用相似性對待組的成員以保證將它們全部發送到相同的隊列管理器。
相似性必要性的另一實例為是否存在兩個應用程序,它們依賴于以問題和回答的形式在它們之間流動的一系列消息。所有的回答被送回到相同的隊列管理器可能是重要的。非常重要的是工作負載管理進程不將消息發送到碰巧掌控(host)正確隊列的副本的任何隊列管理器。類似地,可能存在要求按順序處理的消息的應用程序,例如,發送必須按順序檢索的多批消息的文件傳送應用程序或數據庫復制應用程序。
在簇隊列管理器中,可以將消息路由到掌控合適的隊列的實例(instance)任何隊列管理器。必須檢查應用程序來了解是否存在諸如需要交換相關的消息之類的消息相似性的程序。如果將消息路由到不同的隊列管理器,則具有消息相似性的應用程序的邏輯可能會混亂。
通過改變應用程序打開隊列的方式(例如,在MQQPEN調用上的BIND_ON_OPEN選項)可以處理在消息通知系統中的相似性管理。然而,這具有假設應用程序理解消息相似性的發出的缺點。
在WebSphere MQ消息通知系統的上下文中描述本發明的實施例。特別地,在簇隊列管理器的環境中。然而,本發明也可以應用到諸如其中許多相關的客戶應用程序希望使用網絡服務的相同實例的網絡服務之類的其它分布式計算系統的很廣的范圍中。另一實例是WebSphere Edge Server系統。
本發明可以應用到必須由尋址實體組保持相似性使得組中的每個成員被指向相同的服務實例的任何情形中。在WebSphere MQ的環境中,消息組可以保持相似性,并且將其都發送到相同的隊列管理器。
可以保持由尋址實體進行的事務的目的地的歷史,來確保如果在尋址實體之間存在相似性,則可以選擇相同的目的地。然而,在高容量事務系統中,保持指示已經發送了每個事務的歷史通常是不實際或不有效的。
發明內容
根據本發明的第一方面,提供用于分布式計算機系統中的相似性管理的方法,該方法包括為多個尋址實體中的每一個提供標識符,其中具有相似性的尋址實體的組的每個成員的標識符是相同的組標識符;確定可由尋址實體利用來尋址以提供服務的實例的服務提供器的數量;通過下面的方法管理尋址實體到服務提供器的分布將散列(hash)函數應用到尋址實體的標識符來獲得標準整數;將標準整數除以服務提供器的數量并獲得模數;通過參照模數選擇服務提供器;將尋址實體發送到所選擇的服務提供器提供的服務的實例。
可以周期地執行用于確定服務提供器的數量的步驟,并且在一個時間段內服務提供器的數量是恒定的。即使服務提供器是動態的,并且在該周期加入或離開,服務提供器的數量也保持恒定。
該方法還可以包括提供由模數值參考的可用服務提供器的索引。例如,對于6個可用的服務提供器,模數值將為0到5,并且每個模數值可以提供服務提供器之一的索引。
如果所選擇的服務提供器不可用,則可以以預定順序將尋址實體發送到下一服務提供器。如果服務提供器出故障,則可以激活處理來檢索先前傳送的尋址實體。如果服務提供器出故障,則可以在確保在另一服務提供器中沒有具有組相似性的尋址實體后恢復它。此外,如果服務提供器出故障,則可以重新分布發送到服務提供器的尋址實體。
在一個實施例中,分布式計算系統可以是尋址實體是消息而服務提供器是掌控一個或多個簇隊列的實例的簇隊列管理器的消息通知系統。組標識符可以是通用唯一標識符(UUID)的形式。
在另外的實施例中,尋址實體可以是客戶應用程序,并且服務提供器可以是掌控服務的實例的網絡服務。
根據本發明的第二方面,提供用于分布式計算機系統中的相似性管理的系統,該系統包括每一個具有標識符的多個尋址實體,其中具有相似性的尋址實體的組的每個成員的標識符是相同的組標識符;可由尋址實體利用來尋址以提供服務的實例的多個服務提供器的列表;通過使用具有下列步驟的算法用于管理尋址實體到服務提供器的分布的裝置將散列函數應用到尋址實體的標識符來獲得標準整數;將標準整數除以列表中的服務提供器的數量并獲得模數;通過參照模數選擇服務提供器;和用于將尋址實體發送到所選擇的服務提供器提供的服務的實例的裝置。
可以周期地更新服務提供器的列表,并且在該周期內列表上的服務提供器的數量是恒定的。可以提供一種裝置來提示列表中給出的服務提供器的工作負載管理器。該系統可以包括由模數值參照的列表中的服務提供器的索引。
如果所選擇的服務提供器不可用,則工作負載管理器可以以預定順序將尋址實體發送到下一服務提供器。如果服務提供器出故障,則可以提供裝置來檢索先前傳送的尋址實體。如果服務提供器出故障,則可以在恢復故障的服務提供器之前,確保在另一服務提供器中沒有具有組相似性的尋址實體。此外,如果服務提供器出故障,則可以提供裝置來重新分布發送到服務提供器的尋址實體。
在一個實施例中,分布式計算系統可以是尋址實體是消息而服務提供器是掌控一個或多個簇隊列的實例的簇隊列管理器的消息通知系統。組標識符可以是通用唯一標識符(UUID)的形式。
在另外的實施例中,尋址實體可以是客戶應用程序,并且服務提供器可以是掌控服務的實例的網絡服務。
根據本發明的第三方面,提供存儲在計算機可讀存儲介質上的計算機程序產品,其包括計算機可讀程序代碼方法,用于執行步驟為多個尋址實體中的每一個提供標識符,其中具有相似性的尋址實體的組的每個成員的標識符是相同的組標識符;確定可由尋址實體利用來尋址以提供服務的實例的服務提供器的數量;通過下面的方法管理尋址實體到服務提供器的分布將散列(hash)函數應用到尋址實體的標識符來獲得標準整數;將標準整數除以服務提供器的數量并獲得模數;通過參照模數選擇服務提供器;將尋址實體發送到所選擇的服務提供器提供的服務的實例。
參照附圖,僅通過示例的方式描述本發明的實施例,其中圖1是根據本發明的分布式計算系統的方框圖;圖2是根據本發明的方法的流程圖;和圖3是根據具有簇隊列管理器的本發明實施例的消息通知系統的方框圖。
具體實施例方式
圖1是分布式計算系統100的示意圖。該系統100被用于概括地說明其中需要可以由所述相似性管理方法提供的相似性管理的布置。這可以應用到不同架構的很大范圍中。描述WebSphere MQ消息通知系統的形式的一個實施例。
在分布式計算系統100中的多個尋址實體102可以尋址提供相同服務的一個以上的服務提供器104。經由提供通信基本架構的一個或多個網絡106進行系統100中的通信。
術語尋址實體被用作包含尋址服務提供器104的任何裝置的一般術語。例如,尋址實體可以是客戶應用程序,也可以是消息通知系統中的消息。
可以將多個尋址實體102以某種方式相關來形成組108,該組的成員具有相似性。組108的成員必須通過尋址來自可用的服務提供器104的服務的相同實例,保持它們的相似性。
也使用術語服務提供器104的一般含義。多個服務提供器104將相同服務的實例提供到尋址實體102,使得可以由尋址實體102均等地選擇多個服務提供器104中的任意一個。在下面描述的消息通知系統的實施例中,服務提供器104是隊列管理器,并且多個隊列管理器可以掌控消息所尋址的隊列的實例。在網絡服務環境中,多個服務提供器104中每一個都可以掌控要被客戶應用程序尋址的服務的實例。
在所描述的相似性管理的方法中,首先確定在特定時間上哪些服務提供器正在參加組分布。即,可以由尋址實體均等地選擇服務提供器來執行服務。參加的服務提供器的列表在直到修改列表時之前的時期是靜態的。該時期可以是被規則更新的周期,也可以是不規則周期,例如由列表上繼續可用的服務提供器的數量確定的時期。
如果在已經確定了列表之后服務提供器變為可用,則在修改列表之前將不添加服務提供器。類似地,如果在列表中給出了服務提供器,但是停止為可用,則服務提供器保持在列表上直到修改列表為止。在其中將尋址實體發送到不再可用的服務提供器的這樣的實例中使用在下面描述的故障轉移(failover)機構。
從服務提供器的列表計數在該時期中列表上的服務提供器的數量。該數量用在選擇和平衡算法來選擇在該時期期間用于每個尋址實體的服務提供器。建立由數字0到n參考的服務提供器的索引,其中n是列表上的服務提供器的數量。
當尋址實體希望尋址服務提供器時使用選擇算法。尋址實體具有標識符,該標識符可以是名稱、ID參考、通用唯一標識符(UUID)等。需要保持相似性的尋址實體的組的成員具有相同的組標識符。通過任何合適的散列操作來散列標識符,以獲得標準整數。
將標準整數除以在當前時期中從列表計數的服務提供器的數量n,并且獲得模數。該模數用于參考索引來確定尋址實體應該尋址哪個服務提供器。由于作為相似性組的成員的尋址實體具有相同的標識符(如,組ID),所以組的每個成員將發送到相同的服務提供器。如果尋址實體具有不同的標識符,則根據選擇算法的結果,它們將被發送到服務提供器中的任意一個,這導致尋址實體在列表中的、所參加的服務提供器間的隨機分布。
圖2是圖解以上方法的流程圖。在第一步驟201,創建參加的服務提供器的列表。在步驟202確定基于服務提供器的數量n的除數。在步驟203創建用于每個模數的服務提供器的索引。
在步驟204處理尋址實體。在步驟205執行尋址實體的標識符的散列來獲得標準整數。在步驟206將標準整數除以除數n來獲得模數。在步驟207查找服務提供器的索引來找出所獲得的模數值。在步驟208將尋址實體發送到以關于該模數的索引標識的服務提供器。
然后在步驟209確定是否存在等待處理的另一尋址實體,如果存在,則在步驟210為下一尋址實體執行方法中的循環。如果沒有更多的尋址實體,則在步驟211將處理放入待命狀態來等待要被處理的下一尋址實體。
在要被處理的尋址實體是消息的消息通知環境中,通過消息的到達觸發步驟204,并且為消息而執行步驟205到208。因此,不需要循環步驟210。
該方法通過相似性組的成員具有相同的標識符,由此將其發送到相同的服務提供器來使尋址實體保持相似性。
提供故障轉移機構來處理將尋址實體發送到不再可用的服務提供器的實例。如果服務提供器不可用,則將尋址實體發送到故障轉移列表中的下一服務提供器。以這種方式,將被發送到不可用的服務提供器的所有尋址實體發送到相同的回退(fallback)服務提供器,由此保持尋址實體的相似性。
如果服務提供器出故障,則可能需要考慮相似性,同時將不具有相似性的尋址實體平衡在有效的資源間,將其尋址實體送回服務提供器來進行重新處理和重新導向。需要檢索所有被先前導向的尋址實體的處理。
在WebSphere MQ消息通知系統的環境下描述實施例。在網絡內不同計算機或節點上運行的應用程序能夠使用消息和排隊(queuing)進行通信。通過消息通知和排隊進行的通信使應用程序在網絡中通信,而不需要具有專門的、專用邏輯連接來鏈接它們。通過將消息放入消息隊列并從消息隊列獲得消息來進行通信。
網絡中每個節點都具有隊列管理器。隊列管理器通過由應用程序調用的消息隊列接口與應用程序進行接口。消息隊列接口支持許多不同的操作系統平臺。
在分布式排隊系統中,隊列管理器是獨立的,并且使用分布式排隊進行通信。向另一個隊列管理器發送消息的一個隊列管理器必須已經定義了發送隊列、到達遠端隊列管理器的信道和用于希望將消息發送到的每個隊列的遠端隊列定義。
當以簇分組隊列管理器時,隊列管理器可以使其掌控的隊列對于簇中的每個其它的隊列管理器都是可用的。任意隊列管理器可以將消息發送到同一簇中的任意其它的隊列管理器,而不需要明確的信道定義、遠端隊列定義或用于每個目的地的發送隊列。簇中每個隊列管理器具有單獨的發送隊列,每個隊列管理器可以從該隊列將消息發送到簇中的任意其它的隊列管理器。簇中的每個隊列管理器僅需要定義一個在其上接收消息的簇接收機信道和使用來介紹自己并了解簇的一個簇發送器信道。
圖3顯示消息通知系統中的隊列管理器300的簇。顯示了四個隊列管理器QM301、QM302、QM303、QM304。每個隊列管理器服務一個或多個應用程序311、312、313、314和315。
每個隊列管理器可以具有僅能由該隊列管理器服務的應用程序訪問的本地隊列305。簇中的每個隊列管理器還可以具有簇隊列306。簇隊列306能夠訪問簇中的任意其它的隊列管理器。一個或多個隊列管理器還可以掌控關于簇中的隊列管理器的信息的庫(repository)307。
應用程序311使用MQPUT調用來將消息放入任意隊列管理器301、302、303和304上的簇隊列306。應用程序311使用MQGET呼叫來從本地隊列管理器301上的簇隊列306檢索消息。
通過用于平衡工作負載的分布隊列管理中的工作負載管理器將發送到簇300的消息分散在有效的隊列管理器301、302、303、304中的簇隊列的實例中。
WebSphere MQ消息通知系統提供發送消息組的能力,其中不傳送組的成員直到所有成員到達為止。這是要求將所有消息發送到簇中的相同隊列管理器的組的示例。如果將組中的消息發送到不同的隊列管理器,則由于任意一個隊列管理器沒有見到所有消息已經到達,所以消息將不傳送。需要確保到簇中的相同隊列管理器的、屬于給定組的消息具有相似性。然而,必須不影響沒有被分組的消息,以使在簇中的隊列管理器間仍在存在平衡。
通過表現為24位通用唯一標識符(UUID)的組ID表示組成員。每個組的成員還具有序列號,并且組的最后一個成員同樣標識自己。
在所述的方法中,在簇中的分布隊列管理器的工作負載管理器執行平衡算法來確定將消息發送到哪個隊列管理器的簇隊列。該平衡算法通過確保組的成員被發送到簇中的相同隊列管理器來保持組成員的相似性。
平衡算法對組ID執行散列函數來獲得標準整數。通過將標準整數除以隊列管理器的數量獲得標準整數的模數,以確定目標隊列管理器的索引。
以配置文件或其它機構為形式的列表被用于通知分布隊列管理器簇隊列參加組分布。該列表確定除數來獲得用在平衡算法中的模數。該除數是隊列管理器的數量,因而是可以將消息發送到的簇隊列的實例的數量。無論隊列是進入或離開簇,允許平衡算法一致地尋址正確的隊列,該列表都不改變。
這允許分布隊列管理器將消息的相同組的所有成員發送到相同的隊列管理器,而不需要保持狀態或招致檢查歷史產生的大量開銷等等。
隊列管理器的簇是動態的,使得隊列管理器可以在任意時間加入或離開。如果除數基于隊列管理器的當前數量,則平衡算法將更容易出錯。因此,向平衡算法給定隊列管理器的列表(靜態的)來進行選擇,并且允許平衡算法在選擇隊列管理器方面是一致的。
此外,隊列管理器落入多米諾形式。例如,如果如圖3所示在組中存在四個隊列管理器,則隊列管理器具有預定的順序QM1、QM2、QM3和QM4。如果一個隊列管理器QM1故障,則將其消息送回工作負載管理器。如果由平衡算法選擇了隊列管理器QM1,并且它不可用,則按順序地(in line)選擇下一個,即QM2。
結合用于檢索所有先前傳送的組成員來使能該多米諾故障轉移技術。恢復的隊列管理器的重新建立需要類似的控制。
一旦表明隊列管理器故障,則在沒有確保不存在屬于在另外的隊列管理器中等待的組的任何消息的情況下,不能恢復該隊列管理器。
此外,如果新檢測出隊列管理器故障,則必須以普通的WebSphere系統方式存儲消息用于發送,直到提示隊列管理器已經被關閉,并且將重新分布已經被發送的消息為止。
以這種方式,可以恢復故障的隊列管理器的工作負載,同時考慮相似性并在有效的資源間平衡不具有相似性的消息。
示例在圖3所示的示例中,有四個可用的隊列管理器。將隊列管理器以及因此簇隊列的有效實例的列表編譯為索引,并且每個隊列管理器具有索引號QM1=0,QM2=1,QM3=2,QM4=3。
由于在表中有四個隊列管理器,因此用在平衡算法中的除數是4。保持除數恒定直到修改列表并確定新除數為止。
在該示例中,存在具有組標識符的一些消息組。為說明的目的將組標識符選為合適的名稱。在實踐中,組標識符可以是例如以24字節UUID為形式的組ID。
在該示例中,散列函數向字母表的字母順序分配號碼,并且將號碼相加來獲得標準整數。
下面的表顯示對組的名稱進行處理的散列函數的操作。
通過關于具有標識符“HAMPSHIRE”的組的成員的平衡算法獲得的索引號是1。因此,組的成員被發送到QM2。下面的表顯示每個組的成員的目的地。
以這種方式,具有相似性的組的成員被發送到相同的隊列管理器,同時平衡隊列管理器的工作負載。
可以將本發明實現為計算機程序產品,包括用于控制計算機或類似裝置的程序指令集。可以通過預裝載在系統或記錄在諸如CD-ROM之類的存儲介質來提供這些指令,或者通過諸如因特網或移動電話網之類的網絡下載來實現。
可以對上述實施例進行改進和修改而不背離本發明的范圍。
權利要求
1.一種用于分布式計算機系統(100)中的相似性管理的方法,該方法包括為多個尋址實體(311-315)中的每一個提供標識符,其中具有相似性的尋址實體的組的每個成員的標識符是相同的組標識符;確定可由尋址實體利用來尋址以提供服務的實例的服務提供器(301-304)的數量;通過下面的方法管理尋址實體到服務提供器的分布將散列函數應用到尋址實體的標識符來獲得標準整數(205),將標準整數除以服務提供器的數量并獲得模數(206),以及通過參照模數選擇服務提供器(207),和將尋址實體發送到由所選擇的服務提供器提供的服務的實例(208)。
2.如權利要求1所述的方法,其中,周期地執行用于確定服務提供器的數量的步驟,并且在一段時間內服務提供器的數量是恒定的。
3.如權利要求1或2所述的方法,其中,該方法還包括提供由模數值參考的可用服務提供器的索引(203)。
4.如權利要求1到3中任意一個所述的方法,其中,如果所選擇的服務提供器不可用,則以預定順序將尋址實體發送到下一服務提供器。
5.如前述權利要求中任意一個所述的方法,其中,如果服務提供器出故障,則激活處理來檢索先前傳送的尋址實體。
6.如前述權利要求中任意一個所述的方法,其中,如果服務提供器出故障,則在確保在另一服務提供器中沒有具有組相似性的尋址實體后恢復它。
7.如前述權利要求中任意一個所述的方法,其中,如果服務提供器出故障,則重新分布發送到服務提供器的尋址實體。
8.如前述權利要求中任意一個所述的方法,其中,分布式計算系統是消息通知系統,尋址實體是消息而服務提供器是掌控一個或多個簇隊列的實例的簇隊列管理器。
9.一種用于分布式計算機系統中的相似性管理的系統,該系統包括每一個都具有標識符的多個尋址實體(311-315),其中具有相似性的尋址實體的組的每個成員的標識符是相同的組標識符;可由尋址實體利用來尋址以提供服務的實例的多個服務提供器(301-304)的列表;通過使用具有下列步驟的算法用于管理尋址實體到服務提供器的分布的裝置將散列函數應用到尋址實體的標識符來獲得標準整數(205),將標準整數除以列表中的服務提供器的數量并獲得模數(206),以及通過參照模數選擇服務提供器(207),和用于將尋址實體發送到所選擇的服務提供器提供的服務的實例(208)的裝置。
10.如權利要求9所述的系統,其中,周期地更新服務提供器的列表,并且在一個時間段內列表上的服務提供器的數量是恒定的。
11.如權利要求9或10所述的系統,其中,提供一種裝置來提示列表中給出的服務提供器的工作負載管理器。
12.如權利要求9到11中任意一個所述的系統,其中,該系統包括由模數值參照的列表中的服務提供器的索引。
13.如權利要求9到12中任意一個所述的系統,其中,如果所選擇的服務提供器不可用,則工作負載管理器以預定順序將尋址實體發送到下一服務提供器。
14.如權利要求9到13中任意一個所述的系統,其中,如果服務提供器出故障,則提供裝置來獲取先前傳送的尋址實體。
15.如權利要求9到14中任意一個所述的系統,其中,如果服務提供器出故障,則提供裝置來在恢復故障的服務提供器之前,確保在另一服務提供器中沒有具有組相似性的尋址實體。
16.如權利要求9到15中任意一個所述的系統,其中,如果服務提供器出故障,則提供裝置來重新分布發送到服務提供器的尋址實體。
17.如權利要求9到16中任意一個所述的系統,其中,分布式計算系統是消息通知系統,尋址實體是消息而服務提供器是掌控一個或多個簇隊列的實例的簇隊列管理器。
18.一種可裝入數字計算機的內部存儲器的計算機程序產品,包括用于當在計算機上運行所述產品時執行權利要求1到10的計算機代碼部分。
全文摘要
提供用于分布式計算機系統(100)中的相似性管理的方法和系統,其中需要在多個服務提供器(301-304)之間平衡多個尋址實體(311-315),同時保持尋址實體中的組相似性。為多個尋址實體中的每一個提供標識符,其中具有相似性的尋址實體的組的每個成員的標識符是同一組標識符。提供可由尋址實體利用來尋址以提供服務的實例的服務提供器列表。由一種算法管理尋址實體到服務提供器的分布。該算法包括將散列(hash)函數應用到尋址實體的標識符來獲得標準整數(205);將標準整數除以服務提供器的數量并獲得模數(206);以及通過參照模數選擇服務提供器(207)。將尋址實體發送到所選擇的服務提供器提供的服務的實例(306)。
文檔編號G06F9/46GK1926517SQ200580006397
公開日2007年3月7日 申請日期2005年3月1日 優先權日2004年3月12日
發明者安德魯·A·皮珀, 馬爾科姆·M·沃維克, 詹姆斯·R·H·懷特 申請人:國際商業機器公司