專利名稱:存儲區(qū)域網中的異步消息傳送的制作方法
技術領域:
本發(fā)明涉及一種異步消息傳送和排隊(asynchronous messaging-and-queuing)系統(tǒng),特別涉及用于消息存儲的控制。
背景技術:
異步消息傳送和排隊系統(tǒng)是現(xiàn)有技術中熟知的。IBM的MQSeries消息傳送和排隊產品就是這樣一種系統(tǒng)。(IBM和MQSeries為IBM公司的商標)。為了方便,使用MQSeries系統(tǒng)進行下面的描述,但是本發(fā)明的背景技術包括很多其它的消息傳送和排隊系統(tǒng),這對本領域的技術人員來說是顯而易見的。
在MQSeries消息排隊系統(tǒng)中,已知叫“隊列管理器”的系統(tǒng)程序向一組使用該隊列管理器在網絡上發(fā)送和接收消息的應用程序提供消息排隊服務。在網絡中可以提供多個隊列管理器,每個隊列管理器服務于一個或更多對于該隊列管理器來說是局域的應用程序。從一個應用程序發(fā)送到另一個應用程序的消息被存儲在由對于該接收應用程序來說是局域的隊列管理器來維護的消息隊列中,直到該接收應用程序準備好了取出(retrieve)它。應用程序能夠從由它們的局域隊列管理器維護的隊列中取出消息,并且能夠經由它們的局域隊列管理器為中介,把消息放置在由整個網絡系統(tǒng)中的隊列管理器維護的隊列中。應用程序經由稱作MQI(消息隊列接口)的接口與其局域隊列管理器通信。這定義了應用程序用來調用該隊列管理器的服務的一組請求或“呼叫”。根據MQI,應用程序首先請求用于執(zhí)行服務所需的資源,并且,當從隊列管理器接收到這些資源后,該應用程序隨后請求執(zhí)行指定了將要使用這些資源的服務。具體來說,為了調用任何隊列管理器服務,應用程序首先請求連接到該隊列管理器。于是該應用程序首先發(fā)出請求連接到該隊列管理器的呼叫,而響應于這個呼叫,所述隊列管理器返回用于標識將要由該應用程序使用的連接的連接句柄(handle)。該應用程序隨即將把這個連接句柄作為在此連接期間執(zhí)行其它呼叫時的輸入參數。該應用程序還為諸如隊列等每個對象請求對象句柄,以便用于執(zhí)行所請求的服務。于是,該應用程序為每個要使用的對象提交一個或更多請求對象句柄的呼叫,并且該隊列管理器將分配合適的對象句柄。由隊列管理器提供的所有對象句柄與特定的連接句柄相關,給定的對象句柄被提供給特定連接所使用,從而該給定的對象句柄與相關的連接句柄一起使用。在接收到要使用的資源后,該應用程序可以發(fā)出請求該執(zhí)行服務的服務請求呼叫。這個呼叫將包括連接句柄以及將要使用的每個對象的對象句柄。例如,在從隊列中取出消息的情況下,該應用程序發(fā)出“取消息”呼叫,該呼叫包括連接句柄和分配給該應用程序的適當的隊列句柄,以標識對于該隊列管理器的連接和隊列。
使用目前可用的異步消息傳送系統(tǒng),當消息到達服務器時,它只對該服務器可用,但是如果該服務器發(fā)生故障,該消息將被“困”在該服務器中,直到該服務器能被重新啟動。
在高容量或高性能的應用程序體系結構中,把消息存儲在單一服務器中也是一種限制,這是由于通常在發(fā)送消息之前,需要判斷預期的目的服務器是否能夠適時地處理該消息以及任何隨后必需的處理。
很明顯,在這種系統(tǒng)中存在著對于更穩(wěn)健且更靈活的異步消息存儲方法和系統(tǒng)的需求。
發(fā)明內容
因而,在第一方面,本發(fā)明提供了一種計算機系統(tǒng),包括異步消息傳送和排隊系統(tǒng);以及具有存儲區(qū)域網控制器的存儲區(qū)域網;并且其中,所述存儲區(qū)域網控制器包括代表一個或更多隊列管理器來控制消息隊列的控制裝置。
最好,所述一個或更多隊列管理器包括兩個或更多隊列管理器,并且所述兩個或更多的隊列管理器中的至少兩個是異質的。
最好,在所述消息隊列中的消息是持久的(persistent),并且其中所述存儲區(qū)域網控制器包括用于控制所述消息的持久性的裝置。
最好,所述消息是事務(transactional)消息,并且其中所述存儲區(qū)域網控制器包括事務控制裝置。
最好,所述事務控制裝置包括同步點(syncpoint)協(xié)調器。
最好,所述存儲區(qū)域網控制器包括數據完整性控制裝置。
最好,所述數據完整性控制裝置包括鎖定管理器。
在第二方面,本發(fā)明提供了一種用于控制計算機系統(tǒng)的方法,該計算機系統(tǒng)具有異步消息傳送和排隊系統(tǒng)以及具有存儲區(qū)域網控制器的存儲區(qū)域網,包括下列步驟在隊列管理器中接收消息請求;并且把所述消息請求傳遞給所述存儲區(qū)域網控制器;其中所述存儲區(qū)域網控制器包括代表一個或更多隊列管理器來控制消息隊列的控制裝置。
第二方面的方法的優(yōu)選方法特征對應于由第一方面的優(yōu)選特征所提供的裝置。
在第三方面,本發(fā)明提供了一種計算機程序,該計算機程序使得計算機系統(tǒng)執(zhí)行對應于第二方面的方法步驟的計算機程序步驟。
由于沒有單一的故障點,使用存儲區(qū)域網(SAN)來存儲消息數據不僅使數據存儲集中,而且提供了更穩(wěn)健的全面解決方案。
與LAN相比較,SAN的一種定義是允許在存儲設備和處理器(服務器)之間建立直接連接的高速網絡。SAN可以被視為存儲總線概念的一種延伸,它使得存儲設備和服務器能夠使用與局域網(LAN)和廣域網(WAN)中類似的下列元件相互連接路由器、集線器、交換器和網關。SAN能夠在服務器之間共享,并且/或者專用于一個服務器。它能夠是局域的,或者能夠在地理距離上延伸。
在本發(fā)明的實施例中,有可能僅僅滿足用于各種協(xié)作組件之間的數據完整性、事務性(transactionality)以及其它服務質量的一組協(xié)議。在這種情況下,將由中間件層來處理(conduct)和控制數據完整性、同步點協(xié)調等。所述中間件層將向SAN控制器以及向應用程序和隊列管理器提供適當的一組原語(primitive)。
通過對比,本發(fā)明當前最優(yōu)選的實施例不僅在SAN中取消了單個服務器上的消息存儲而在網絡級上對它們進行存儲,而且在SAN中提供了支持基礎結構以提供所有所需的數據完整性功能,從而允許多個隊列管理器充分放心地(with complete confidence)同時訪問隊列(用于讀取和寫入操作)。
傳統(tǒng)上,隊列是由特定的隊列管理器擁有的,所述隊列管理器負責保證以有序和正確的方式來維持對于該隊列的多線程訪問。通過把隊列移到SAN中,該隊列的所有權被從該隊列管理去除,并且被賦予給SAN控制器。隊列管理器顯然能夠訪問和操縱該隊列中的消息,如同它們是局域擁有的隊列一樣,但是對于該操作的真正、底層的管理是在SAN控制器中維護的。
為了使其能夠運行,SAN控制器可以提供對它所擁有的隊列上的消息的鎖定和事務完整性進行控制所需的原語。
本發(fā)明的優(yōu)選實施例具有幾個益處。首先是把消息(數據)從較脆弱的應用程序服務器環(huán)境去除而轉移到較穩(wěn)健的SAN中,其中,代替僅僅能夠由一個服務器訪問,任何能夠連接到SAN的服務器都潛在地能夠訪問這些消息。
僅僅通過安裝用于存儲該隊列數據的文件系統(tǒng)不能夠獲得相同的好處,在這種文件系統(tǒng)中多個服務器都能夠潛在地安裝和使用這些文件。如果這被允許,沖突情形會很快出現(xiàn),例如,由一個隊列管理器鎖定的消息被另一個隊列管理器刪除,而且這些沖突情形將導致任何這種系統(tǒng)完全不能工作。
通過向SAN控制器添加鎖定和兩步提交(two phase commit)原語,本發(fā)明的優(yōu)選實施例允許多個服務器連接到SAN,從而同時訪問隊列中的消息(用于讀取、刪除、鎖定和事務操作),同時具有與對單一隊列的多線程訪問進行控制的單一隊列管理器所提供的相同級別的數據完整性。
第二個益處在于能夠將入站到特定應用程序中的全部消息數據過濾到維持在SAN中的一個隊列。它們能夠以對于該應用程序的完全透明度,從這里被分發(fā)到任何數量的所連接的服務器,以便由該應用程序進行隨后的處理。
最后的主要益處在于因為全部的消息數據都已被集中放置,大大簡化了對于備份和災難恢復的提供,由于所有的相關數據都位于一個位置上,從而能夠利用基本SAN服務來確保進行安全復制。
消息能夠具有“持久”的屬性-即在發(fā)生任何隨后處理之前它們必須由隊列管理器來注冊和記錄日志-或者它們能夠是“非持久的”,在這種情況下,如果隊列管理器發(fā)生故障,則該消息被丟棄。本發(fā)明的優(yōu)選實施例特別適用于對可以放置持久消息的隊列進行控制。
在由SAN控制的隊列中,對于保護數據安全的要求與由隊列管理器進行局域控制的隊列中相同-即創(chuàng)建和刪除隊列、以及從隊列讀取消息和向隊列寫入消息都需要授權。用于向多個隊列管理器公布隊列定義、以及用于提供訪問控制(局域隊列管理器將確定訪問是否有效)的機制(隊列群集(queueclustering))已經存在。
SAN控制器最好監(jiān)控隊列管理器到SAN的連接,并且此后假定對于由所連接的隊列管理器發(fā)送的對于隊列操縱的請求已被驗證。
由于消息數據將要在整個網絡中流動,在SAN和隊列管理器之間對數據進行加密的選項也是優(yōu)選的特征。
在其他優(yōu)點中,當前的優(yōu)選實施例涉及把通常與分布在連網系統(tǒng)中的中間件層相關的屬性和活動轉移到SAN控制器中,以便實現(xiàn)改進的穩(wěn)健性、可縮放性(scalability)、控制的集中化和維護的簡易化,這對于本領域的技術人員來說是清楚的。與中間件相關的屬性和活動通常被稱為“服務質量”定義。如上所述,有可能簡單地把隊列數據結構從隊列管理器的局域存儲轉換到SAN,并且使隊列管理器來協(xié)商它們自身之間的協(xié)議以便管理鎖定和點同步,而這些有可能利用傳統(tǒng)的中間件供給來進行。然而,如上所述,本發(fā)明當前最優(yōu)選的實施例所提供的優(yōu)點超越了這種解決方案所具有的優(yōu)點。
對于本領域的技術人員來說,很多其它的“服務質量”定義能夠以與事務性、同步點協(xié)調、可恢復性等相同的方式被包含到SAN控制器中。這種“服務質量”定義的一個例子是長期運行事務的子事務的“可補償性”。
現(xiàn)在將參照附圖以舉例的方式來說明本發(fā)明的優(yōu)選實施例,其中圖1是表示根據本發(fā)明優(yōu)選實施例的系統(tǒng)的組成部件的方框圖;和圖2示意性地說明了根據本發(fā)明優(yōu)選實施例的系統(tǒng)的負載平衡能力。
具體實施例方式
現(xiàn)在轉到圖1,其中有本發(fā)明的當前優(yōu)選實施例的3個相互作用的主要部件。第一個是SAN(102),其由SAN控制器(104)控制,第二個是隊列管理器(114),其向存儲在SAN中的隊列(108)中寫入消息;而第三個是隊列管理器(122),其要從SAN存儲的隊列(108)中讀取該消息。每個隊列管理器(114,122)代表應用程序(112,120)進行活動,該應用程序發(fā)出必須由隊列管理器(144,122)來滿足的請求。隊列管理器(144,122)和發(fā)出請求的應用程序(112,120)可以位于網絡中的任何位置。即,系統(tǒng)或系統(tǒng)部件(110,118)能夠是系統(tǒng)中的區(qū)域或分區(qū)、分離的物理計算機系統(tǒng)、網絡中的分布式系統(tǒng)、或者系統(tǒng)或系統(tǒng)部件的任何其它組合。
具體來說,為了調用任何隊列管理器服務,應用程序(112,120)首先請求連接到隊列管理器(144,122)。于是,應用程序(112,120)首先發(fā)出請求連接到隊列管理器(144,122)的呼叫,并且,響應于這個呼叫,所述隊列管理器返回用于標識將要由該應用程序使用的連接的連接句柄。隨后,應用程序(112,120)將在該連接期間執(zhí)行其它呼叫時,傳遞這個連接句柄作為輸入參數。應用程序(112,120)還要求諸如隊列(108)等每個對象的對象句柄,以便在執(zhí)行該請求的服務時使用。于是,應用程序(112,120)將提交用于請求每一個將要使用對象的對象句柄的一個或更多呼叫,并且將由隊列管理器(144,122)來分配適當的對象句柄。使由隊列管理器(144,122)提供的全部對象句柄與特定的連接句柄相關,使得給定的對象句柄被提供給特定的連接使用,因此與相關的連接句柄一起使用。在接收到將要使用的資源后,應用程序(112,120)可以發(fā)出請求執(zhí)行服務的服務請求呼叫。這個呼叫將包括連接句柄和對于每個將被使用的對象的對象句柄。例如,在從隊列(108)取出消息的情況下,該應用程序發(fā)出“取消息”呼叫,該呼叫包括其連接句柄和分配給該應用程序的適當的隊列管理器,以標識對于該隊列管理器的連接和隊列(108)。
最好,向本發(fā)明優(yōu)選實施例的SAN控制器(104)提供同步點協(xié)調器(124)、持久性管理器(126)以及鎖定管理器(128)。這樣就能夠實現(xiàn)功能的集中化,否則就要將這些功能轉移給隊列管理器,從而引起在傳統(tǒng)的消息傳送和排隊系統(tǒng)中可能出現(xiàn)的潛在問題。
本發(fā)明的優(yōu)選實施例是高度適用于高吞吐量系統(tǒng)的體系結構,不可能發(fā)生消息被“困”在障礙服務器中的情況,而且通過簡單地把較多服務器連接到SAN,也能夠“按比例提高”該應用程序吞吐量。相反,如果對于該應用程序的需求下降,可以動態(tài)地斷開服務器,并且減少最大可能的吞吐量。如圖2所示,如果對隊列(208)中的消息的處理需求上升到超過一個或更多應用程序服務器(210)的能力,一個或更多擴展服務器(212)可以被連接到SAN,從而被添加到可用的處理資源中。
下面說明可以在本發(fā)明的當前優(yōu)選實施例中提供的交互。
交互1-連接100 隊列管理器發(fā)送連接請求到SAN控制器105 SAN控制器接受連接請求110 SAN控制器驗證隊列管理器的身份115 如果確認了身份,SAN控制器確認連接請求,否則拒絕連接交互2-定義隊列200 管理員發(fā)送請求來定義SAN上的隊列205 SAN控制器進行驗證,并且如果適當則接受請求210 SAN控制器在所管理的存儲器上給該隊列分配空間215 SAN控制器建立必需的控制結構220 SAN控制器確認隊列創(chuàng)建的完成交互3-打開到隊列的句柄300 隊列管理器發(fā)送請求以打開到隊列的句柄305 SAN控制器確認隊列的存在并授權打開句柄310 如果隊列不存在或授權不正確,請求失敗315 SAN控制器打開句柄并將句柄返回到發(fā)出請求的隊列管理器320 SAN控制器更新用于該隊列的使用計數器交互4-將消息放置在隊列上400 隊列管理器發(fā)送消息以放置在隊列上405 SAN控制器驗證授權以將消息放置在隊列上410 SAN控制器把消息數據寫入所分配的被管理的存儲器中415 SAN控制器檢查寫入是否是部分同步點420 如果是部分同步點,SAN控制器鎖定消息,向應用程序確認425 如果不在同步點中,SAN控制器確認被寫入隊列中的消息交互5-確認同步點(簡化的)(讀取和寫入操作)500 隊列管理器向SAN控制器發(fā)送同步點確認505 SAN控制器確認隊列操作(讀取或寫入)510 SAN控制器解鎖消息,并且在讀取操作的情況下從隊列中刪除消息交互6-退出同步點(簡化的)(讀取和寫入操作)600 隊列管理器向SAN控制器發(fā)送同步點退出605 SAN控制器確認退出的隊列操作(讀取或寫入)610 SAN控制器解鎖消息,并在寫入操作情況下從隊列中刪除消息注意,任何同步點操作一般都是兩步提交類型,但是在本說明中不需要這種程度的細節(jié)。在SAN控制器和附加的隊列管理器之間,完全的兩步提交可以不是必需的。
交互7-從隊列中讀取消息700 隊列管理器向SAN控制器發(fā)送讀取請求消息705 SAN控制器檢查請求是否針對特定消息。如果是,則進行交互8-讀取特定消息710 SAN控制器確定將要讀取的下一個可用的消息715 如果不是瀏覽,SAN控制器鎖定消息,并檢查讀取是否在同步點內720 如果需要,SAN控制器發(fā)送消息并且標記同步點725 如果讀取不是瀏覽并且在同步點之外,則從所管理的存儲器中刪除消息交互8-從隊列中讀取特定消息800 SAN控制器檢查消息是否存在以及是否未被其它隊列管理器鎖定805 如果消息被鎖定或者不存在,則拒絕讀取請求810 如果不是瀏覽,SAN控制器鎖定消息,并檢查讀取是否在同步點內815 如果需要,SAN控制器發(fā)送消息并且標記同步點820 如果讀取不是瀏覽并且在同步點之外,則從所管理的存儲器中刪除消息交互9-關閉到隊列的句柄900 隊列管理器發(fā)送請求以關閉隊列句柄905 SAN控制器驗證請求并且將使用計數器遞減910 SAN控制器檢查該隊列的使用計數器912 SAN控制器查找任何未提交(uncommitted)的同步點,如果找到,則拒絕關閉句柄請求915 如果使用計數為0,則SAN控制器刪除隊列句柄920 如果使用計數不是0,則SAN控制器拒絕關閉請求交互10-刪除隊列1000 管理員發(fā)送請求以刪除隊列1005 如果請求是“強制刪除”,則刪除隊列,并釋放所分配的被管理的存儲器1015 SAN控制器驗證在同步點內沒有消息被鎖定1020 SAN控制器驗證沒有其它隊列管理器打開句柄1025 如果上述測試為真,則刪除隊列,并釋放所分配的被管理的存儲器1030 如果上述任何測試為假,則拒絕關閉請求交互11-對擁有的隊列列表1100 隊列管理器或系統(tǒng)管理API發(fā)送請求以對擁有的隊列列表1105 SAN控制器發(fā)送細節(jié)交互12-修改隊列定義1200 隊列管理器或系統(tǒng)管理API發(fā)送請求以修改隊列定義1205 SAN控制器驗證請求是可能的,并執(zhí)行修改交互13-隊列管理器健康檢查1300 SAN控制器將健康檢查發(fā)送到每一個連接的隊列管理器1305 如果沒有來自健康檢查的響應,SAN控制器斷開故障隊列管理器交互14-斷開故障隊列管理器1400 SAN控制器終止由故障隊列管理器擁有的每個句柄1405 SAN控制器檢查全部未提交的同步點,并且將它們退出1410 SAN控制器關閉到隊列的所有打開的句柄1415 SAN控制器關閉到障礙隊列管理器的連接句柄1420 SAN控制器報告故障事件
權利要求
1.一種計算機系統(tǒng),包括異步消息傳送和排隊系統(tǒng);和存儲區(qū)域網,具有存儲區(qū)域網控制器;并且其中,所述存儲區(qū)域網控制器包括代表一個或更多隊列管理器來控制消息隊列的控制裝置。
2.如權利要求1所述的計算機系統(tǒng),其中,所述一個或更多隊列管理器包括兩個或更多隊列管理器,而且所述兩個或更多隊列管理器中的至少兩個是異質的。
3.如權利要求1或2所述的計算機系統(tǒng),其中,在所述消息隊列中的消息是持久的,并且其中,所述存儲區(qū)域網控制器包括用于控制所述消息的持久性的裝置。
4.如前面任何一項權利要求所述的計算機系統(tǒng),其中,所述消息是事務消息,并且其中,所述存儲區(qū)域網控制器包括事務控制裝置。
5.如權利要求4所述的計算機系統(tǒng),其中,所述事務控制裝置包括同步點協(xié)調器。
6.一種用于控制計算機系統(tǒng)的方法,所述計算機系統(tǒng)具有異步消息傳送和排隊系統(tǒng)和具有存儲區(qū)域網控制器的存儲區(qū)域網,所述方法包括下列步驟在隊列管理器中接收消息請求;和把所述消息請求傳遞給所述存儲區(qū)域網控制器;其中,所述存儲區(qū)域網控制器包括用于代表一個或更多隊列管理器來控制消息隊列的控制裝置。
7.如權利要求6所述的方法,其中,所述一個或更多隊列管理器包括兩個或更多隊列管理器,并且所述兩個或更多隊列管理器是異質的。
8.如權利要求6或7所述的方法,其中,在所述消息隊列中的消息是持久的,并且其中,所述存儲區(qū)域網控制器包括用于控制所述消息的持久性的控制裝置。
9.如權利要求6至8中任何一項所述的方法,其中,所述消息是事務消息,并且其中,所述存儲區(qū)域網控制器包括事務控制裝置。
10.一種包括計算機程序代碼的計算機程序,在被載入計算機系統(tǒng)并被執(zhí)行時,引起所述計算機系統(tǒng)執(zhí)行如權利要求7至9中任何一項所述的方法的全部步驟。
全文摘要
本發(fā)明的計算機系統(tǒng)包括異步消息傳送和排隊系統(tǒng);以及具有存儲區(qū)域網控制器的存儲區(qū)域網;并且存儲區(qū)域網控制器包括用于代表一個或更多隊列管理器來控制消息隊列的控制裝置,而該控制裝置可以是異質的。存儲區(qū)域網控制器還可以包括用于控制消息持久性的裝置,諸如同步點協(xié)調器的事務控制裝置,以及諸如鎖定管理器的數據完整性控制裝置。
文檔編號G06F9/46GK1701527SQ03817449
公開日2005年11月23日 申請日期2003年7月11日 優(yōu)先權日2002年7月24日
發(fā)明者艾丹·C·彭寧頓 申請人:國際商業(yè)機器公司