專利名稱:路由針對雙工應用的請求的制作方法
路由針對雙工應用的請求
背景技術(shù):
I.背景和相關(guān)技術(shù)計算機系統(tǒng)和相關(guān)技術(shù)影響社會的許多方面。的確,計算機系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式。計算機系統(tǒng)現(xiàn)在通常執(zhí)行在計算機系統(tǒng)出現(xiàn)以前手動執(zhí)行的許多任務(wù)(例如,文字處理、日程安排和會計等)。最近,計算機系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成計算機系統(tǒng)和其他電子設(shè)備可以在其上傳輸電子數(shù)據(jù)的有線和無線計算機網(wǎng)絡(luò)。因此,許多計算任務(wù)的執(zhí)行分布在多個不同的計算機系統(tǒng)和/或多個不同的計算環(huán)境中。在諸如因特網(wǎng)之類的許多網(wǎng)絡(luò)上,超文本傳輸協(xié)議(“HTTP”)是用于交換電子數(shù)據(jù)的流行通信介質(zhì)。大量網(wǎng)絡(luò)連接的個人計算機例如具有通用庫和諸如web瀏覽器之類的客 戶端程序以用于執(zhí)行HTTP應用。因此,網(wǎng)絡(luò)和系統(tǒng)管理員通常以遠大于大多數(shù)其他協(xié)議的程度在帶有極少或沒有過濾限制的情況下允許HTTP通信量。該近乎全球的兼容性與增加的訪問的組合使HTTP極大地實現(xiàn)了兩個系統(tǒng)之間的連接建立和信息交換。然而,HTTP被束縛于特定的請求一回復消息交換模式,該模式將消息交換的發(fā)起限制在一方,并且僅僅允許由另一方對任何給定消息進行一次回復。頻繁地,有限制條件被施加到同時的HTTP連接的數(shù)目以及在應用開發(fā)者控制之外使用HTTP連接的長度。存在需要以不受限制的雙向方式交換消息的許多常見應用模式,其中有時在消息交換之間存在長的間隙并且在客戶端與服務(wù)器之間存在不平衡的交換次數(shù)。為了圍繞HTTP的各種限制展開工作,一些技術(shù)依靠客戶端作出到服務(wù)器的周期性后臺“輪詢”HTTP連接。然后,服務(wù)器可以使用這些連接的HTTP響應將數(shù)據(jù)傳送回該客戶端。由于輪詢在應用的后臺進行,因此這些技術(shù)創(chuàng)建了服務(wù)器將消息異步地發(fā)送給客戶端的這一能力的功能等價物。然而,當實現(xiàn)服務(wù)器側(cè)邏輯來處理基于輪詢的HTTP消息模式時,服務(wù)器可能由于大量同時連接的客戶端可能生成的HTTP輪詢的數(shù)目和頻率而耗盡物理資源。因此,盡管輪詢技術(shù)允許雙向連通性,但是輪詢技術(shù)還生成了比常規(guī)請求/回復模式顯著更多的同時連接。盡管可以一定程度地增加單獨的計算機系統(tǒng)處的資源以進行補償,但是能夠?qū)蝹€服務(wù)器的硬件規(guī)范進行的改進是有限的。因此,當客戶端負載顯著增加時,該客戶端負載將需要使用網(wǎng)絡(luò)負載平衡器在多個服務(wù)器間分布。
發(fā)明內(nèi)容
本發(fā)明延及用于路由針對雙工應用的請求的方法、系統(tǒng)和計算機程序產(chǎn)品。在一些實施例中,消息被存儲以供指定的服務(wù)實例進行訪問。雙工服務(wù)組件從雙工客戶端組件接收消息。該消息是從與雙工客戶端組件進行雙工通信的客戶端發(fā)送的,并且使用請求/回復協(xié)議從該雙工客戶端組件路由到雙工服務(wù)組件。該消息具有與該雙工客戶端組件相對應的會話ID并且具有與該客戶端相對應的終端ID。雙工服務(wù)組件確定該消息的所指定的服務(wù)實例在該雙工服務(wù)組件處不可用。雙工服務(wù)組件響應于該確定將該消息存儲在讀取數(shù)據(jù)存儲中。因此,通過訪問讀取數(shù)據(jù)存儲使該消息對另一雙工服務(wù)組件處的所指定的服務(wù)例程可用。該消息按照會話ID和端點ID與其他消息編組在一起,使得來自相同客戶端的消息在讀取數(shù)據(jù)存儲內(nèi)被編組在一起。第二雙工服務(wù)組件處的所指定的服務(wù)實例使用雙工通信來從該客戶端訪問該消息。所指定的服務(wù)實例基于消息具有分別與該雙工客戶端組件和該客戶端相對應的會話ID和端點ID來訪問該消息。在其他實施例中,一個或多個應用消息被遞送給客戶端。雙工服務(wù)組件從雙工客戶端組件接收輪詢消息。該雙工服務(wù)組件是一個或多個雙工服務(wù)組件之一。輪詢消息包括被分配給雙工客戶端組件的會話ID并且請求針對與雙工客戶端組件進行雙工通信的一個 或多個客戶端的應用消息。該輪詢消息使用請求/回復協(xié)議從雙工客戶端組件路由到雙工服務(wù)組件。雙工服務(wù)組件在寫入數(shù)據(jù)存儲中檢查具有被分配給雙工客戶端組件的會話ID的任何應用消息。雙工服務(wù)組件在寫入數(shù)據(jù)存儲中對具有被分配給雙工客戶端組件的會話ID的至少一個應用消息進行定位。所述至少一個消息是由第一服務(wù)實例使用雙工通信寫入到寫入數(shù)據(jù)存儲中的。在第一雙工服務(wù)組件處可用的第一服務(wù)實例還被包括在所述一個或多個雙工服務(wù)組件中。雙工服務(wù)組件使用請求/回復協(xié)議將應用消息發(fā)送給雙工客戶端組件。提供本發(fā)明內(nèi)容以便以簡化的形式介紹將在以下的具體實施方式
中進一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標識所要求保護的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護的主題的范圍。本發(fā)明的附加特征和優(yōu)點將在以下描述中敘述,且其一部分根據(jù)本描述將是顯而易見的,或可通過對本發(fā)明的實踐來獲知。本發(fā)明的特征和優(yōu)點可通過在所附權(quán)利要求書中特別指出的工具和組合來實現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過以下描述和所附權(quán)利要求書變得更加顯而易見,或可通過對下文中所述的本發(fā)明的實踐來領(lǐng)會。
為了描述可獲得本發(fā)明的上述和其他優(yōu)點和特征的方式,將通過參考附圖中示出的本發(fā)明的具體實施例來呈現(xiàn)以上簡要描述的本發(fā)明的更具體描述??梢岳斫?,這些附圖僅描述本發(fā)明的典型實施例,從而不被認為是對其范圍的限制,本發(fā)明將通過使用附圖用附加特征和細節(jié)來描述和說明,在附圖中圖IA和IB示出了促進客戶端與所指定的服務(wù)實例之間的消息路由的示例性計算機架構(gòu)。圖2示出用于存儲消息以供所指定的服務(wù)實例訪問的示例性方法的流程圖。圖3示出了用于將應用消息遞送給客戶端的示例性方法的流程圖。圖4示出了用于在客戶端與所指定的服務(wù)實例之間路由消息的示例性消息流模式。
具體實施例方式本發(fā)明延及用于路由針對雙工應用的請求的方法、系統(tǒng)和計算機程序產(chǎn)品。在一些實施例中,消息被存儲以供指定的服務(wù)實例進行訪問。雙工服務(wù)組件從雙工客戶端組件接收消息。該消息是從與雙工客戶端組件進行雙工通信的客戶端發(fā)送的,并且使用請求/回復協(xié)議從該雙工客戶端組件路由到雙工服務(wù)組件。該消息具有與該雙工客戶端組件相對應的會話ID并且具有與該客戶端相對應的端點ID。雙工服務(wù)組件確定該消息的所指定的服務(wù)實例在該雙工服務(wù)組件處不可用。雙工服務(wù)組件響應于該確定將該消息存儲在讀取數(shù)據(jù)存儲中。因此,通過訪問讀取數(shù)據(jù)存儲使該消息對另一雙工服務(wù)組件處的所指定的服務(wù)例程可用。該消息按照會話ID和端點ID與其他消息編組在一起,使得來自相同客戶端的消息在讀取數(shù)據(jù)存儲內(nèi)被編組在一起。第二雙工服務(wù)組件處的所指定的服務(wù)實例使用雙工通信來從該客戶端訪問該消息。所指定的服務(wù)實例基于消息具有分別與該雙工客戶端組件和該客戶端相對應的會話ID和端點ID來訪問該消息。在其他實施例中,一個或多個應用消息被遞送給客戶端。雙工服務(wù)組件從雙工客戶端組件接收輪詢消息。該雙工服務(wù)組件是一個或多個雙工服務(wù)組件之一。輪詢消息包括 被分配給雙工客戶端組件的會話ID并且請求針對與雙工客戶端組件進行雙工通信的一個或多個客戶端的應用消息。該輪詢消息使用請求/回復協(xié)議從雙工客戶端組件路由到雙工服務(wù)組件。雙工服務(wù)組件在寫入數(shù)據(jù)存儲中檢查具有被分配給雙工客戶端組件的會話ID的任何應用消息。雙工服務(wù)組件在寫入數(shù)據(jù)存儲中對具有被分配給雙工客戶端組件的會話ID的至少一個應用消息進行定位。所述至少一個消息是由第一服務(wù)實例使用雙工通信寫入到寫入數(shù)據(jù)存儲中的。在第一雙工服務(wù)組件處可用的第一服務(wù)實例還被包括在所述一個或多個雙工服務(wù)組件中。雙工服務(wù)組件使用請求/回復協(xié)議將應用消息發(fā)送給雙工客戶端組件。本發(fā)明的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸如例如一個或多個處理器和系統(tǒng)存儲器等計算機硬件,如以下更詳細討論的。本發(fā)明范圍內(nèi)的各實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這樣的計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。承載計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種顯著不同的計算機可讀介質(zhì)計算機存儲介質(zhì)和傳輸介質(zhì)。計算機存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計算機系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應被包括在計算機可讀介質(zhì)的范圍內(nèi)。此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C存儲介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳輸?shù)接嬎銠C系統(tǒng)RAM和/或計算機系統(tǒng)處的較不易失性的計算機存儲介質(zhì)。因而,應當理解,計算機存儲介質(zhì)可被包括在還利用(或甚至主要利用)傳輸介質(zhì)的計算機系統(tǒng)組件中。計算機可執(zhí)行指令例如包括,當在處理器處執(zhí)行時使通用計算機、專用計算機、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計算機可執(zhí)行指令可以是例如二進制代碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡(luò)計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明也可在其中通過 網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠程計算機系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實施。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠程存儲器存儲設(shè)備中。在該說明書和下面的權(quán)利要求書中,“雙工通信介質(zhì)”被定義成所連接的兩方之間的通信介質(zhì),該通信介質(zhì)允許所述各方之間的雙向通信并且其中任一方可以獨立地發(fā)起通過該通信介質(zhì)的到另一方的通信。雙工通信介質(zhì)被定義為包括半雙工通信介質(zhì)(在一次中,一方發(fā)送并且另一方接收)和全雙工通信介質(zhì)(雙方都被允許同時發(fā)送和接收)二者。在該說明書和在下面的權(quán)利要求書中,“請求/回復通信介質(zhì)”被定義成所連接的兩方之間的通信介質(zhì),該通信介質(zhì)允許所述各方之間的配對(可能精確配對)的通信。請求者(例如客戶端)將請求消息發(fā)送給回復者系統(tǒng)(例如服務(wù)器),該回復者系統(tǒng)接收并處理該請求,最終作為響應返回消息。請求/回復可以以同步或異步方式實現(xiàn)。超文本傳輸協(xié)議(“HTTP”)是請求/回復通信介質(zhì)的示例。圖IA和IB示出了促進客戶端與所指定的服務(wù)實例之間的消息路由的示例性計算機架構(gòu)100。如所描繪那樣,計算機架構(gòu)100包括客戶端101、102、103、104和106、雙工客戶端組件111和112、消息分發(fā)組件113、機器121和131、讀取數(shù)據(jù)存儲144和寫入數(shù)據(jù)存儲146。所描繪的計算機架構(gòu)100中的組件和機器中的每一個都通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)或甚至因特網(wǎng)之類的網(wǎng)絡(luò)(或作其一部分)彼此連接。因此,所描繪的組件和機器中的每個以及任何其他連接的計算機系統(tǒng)及其組件都可以創(chuàng)建消息相關(guān)數(shù)據(jù)并通過網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報和利用IP數(shù)據(jù)報的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“ TCP ”)、超文本傳輸協(xié)議(“HTTP ”)、簡單郵件傳輸協(xié)議(“SMTP”)等)。計算機架構(gòu)100內(nèi)的不同組件可以通過包括雙工通信介質(zhì)和請求/回復通信介質(zhì)在內(nèi)的不同類型的通信介質(zhì)彼此連接。例如,雙工通信介質(zhì)114將客戶端101、102和103連接到雙工客戶端組件111并且將所連接的客戶端104和106連接到雙工客戶端組件112。雙工通信介質(zhì)114可以包括網(wǎng)絡(luò)通信介質(zhì)以及系統(tǒng)總線通信介質(zhì)。請求/回復通信介質(zhì)116 (例如HTTP)將雙工客戶端組件111和112連接到機器121和131 (并且因此分別連接到雙工服務(wù)組件122和132)。在機器121內(nèi),雙工通信介質(zhì)(未示出)將雙工服務(wù)組件實例122連接到服務(wù)實例141A和142A。類似地,在機器131內(nèi),雙工通信介質(zhì)(未示出)將雙工服務(wù)組件實例132連接到服務(wù)實例142B。不同的通信介質(zhì)可以位于不同網(wǎng)路的部分上。例如,雙工通信介質(zhì)114可以位于處于一個或多個不同公司的控制下的公司LAN或WAN上。請求/回復通信介質(zhì)116例如可以位于公共WAN上,比如因特網(wǎng)。機器121和131處的雙工通信可以位于處于一個或多個不同服務(wù)提供者的控制下的服務(wù)提供者LAN或WAN上。因此,客戶端101、102、103、104和106可以是不時地向機器121和131處的服務(wù)實例發(fā)送請求的計算機系統(tǒng)??蛻舳?01、102、103、104和106以及計算機架構(gòu)100中的省略號標識的其他客戶端中的每個(在此有時稱為“客戶端”)都可以處于相同或不同實體的控制下。客戶端例如是客戶端應用,比如web瀏覽器或web服務(wù)組件。一般而言,雙工通信介質(zhì)114將客戶端連接到相應的雙工客戶端組件,這些雙工客戶端組件中的每個都處于相同或不同實體的控制 下。因此,客戶端可以通過雙工通信介質(zhì)114將消息發(fā)送到雙工客戶端組件(例如111和112)以及從其接收消息。包括雙工客戶端組件111和雙工客戶端組件112在內(nèi)的每個雙工客戶端組件都被配置為通過雙工通信介質(zhì)114從客戶端接收消息或向客戶端發(fā)送消息。所述雙工客戶端組件的每個還被配置為通過請求/回復通信介質(zhì)116向雙工服務(wù)組件實例(例如122和132)發(fā)送請求、以及通過請求/回復通信介質(zhì)116從雙工服務(wù)組件接收相應的回復。因此,雙工客戶端組件一般還被配置為合適地在雙工通信與請求/回復通信之間轉(zhuǎn)換。類似于客戶端,雙工客戶端組件還可以處于相同或不同實體的控制下。在一些實施例中,一個或多個客戶端和雙工客戶端組件處于相同實體的控制下。例如,客戶端101、102和103以及雙工客戶端組件111可以處于相同第一實體的控制下。例如,雙工客戶端組件111可以在web瀏覽器進程中被托管,并且客戶端101、102和103可以是該web瀏覽器所顯示的網(wǎng)頁中托管的控件。類似地,客戶端104和106以及雙工客戶端組件112可以處于相同的第二實體(其不同于第一實體)的控制下。可替代地,雙工客戶端組件可以處于一個實體的控制下,該實體被配置為處理針對一個或多個不同的其他實體的客戶端的消息。例如,客戶端101、102和103以及雙工客戶端組件111每個都可以處于不同實體的控制下。消息分發(fā)組件113提供了用于將消息從雙工客戶端組件分發(fā)給雙工服務(wù)組件實例的機制。消息分發(fā)組件113例如可以包括負載平衡器、域名系統(tǒng)(“DNS”)解析組件、路由器等等。消息分發(fā)組件113可以使用在沒有任何會話親和力的情況下分發(fā)消息的算法(例如循環(huán))。因此,消息分發(fā)組件113可以將不同消息從相同客戶端分發(fā)給不同的雙工客戶端服務(wù)實例。例如,消息分發(fā)組件113可以將第一消息從客戶端101路由到雙工服務(wù)組件實例122并且將第二消息從客戶端101路由到雙工服務(wù)組件實例132 (或者到其他某個機器處的雙工服務(wù)組件實例)。因此,消息分發(fā)組件113可以將消息從不同客戶端分發(fā)給相同的雙工服務(wù)組件實例。例如,消息分發(fā)組件113可以將來自客戶端103的消息和來自客戶端106的消息路由到雙工服務(wù)組件實例132。一般而言,雙工服務(wù)組件實例被配置為通過請求/回復通信介質(zhì)從雙工客戶端組件接收請求、以及通過請求/回復通信介質(zhì)將回復發(fā)送給雙工客戶端組件。例如,雙工服務(wù)實例122和132可以通過請求/回復通信介質(zhì)116從客戶端101、102、103、104和106中的任何客戶端接收請求并向其發(fā)送回復。雙工服務(wù)組件實例還被配置為通過雙工通信介質(zhì)從服務(wù)實例接收消息以及向其發(fā)送消息。例如,雙工服務(wù)組件實例122可以在機器121處通過雙工通信從服務(wù)實例141A和142A (以及機器121處的其他服務(wù)實例)接收消息以及向其發(fā)送消息。例如,雙工服務(wù)組件實例132可以在機器131處通過雙工通信從服務(wù)實例142B(以及機器131處的其他服務(wù)實例)接收消息以及向其發(fā)送消息。因此,雙工服務(wù)組件實例一般還被配置為合適地在雙工通信與請求/回復通信之間轉(zhuǎn)換。一般而言,服務(wù)實例是在機器處運行的服務(wù)的實例。例如,(服務(wù)141的)服務(wù)實例141A在機器121處運行。服務(wù)的不同服務(wù)實例還可以在不同機器處運行。例如,(服務(wù)142的)服務(wù)實例142A和142B分別在機器121和131處運行。不同的服務(wù)實例可以處于相同或不同實體的控制下。服務(wù)實例可以例如是服務(wù)應用,比如web服務(wù)器或web服務(wù)組件。服務(wù)實例與機器之間的雙工通信介質(zhì)也可以處于相同或不同實體的控制下。因此,月艮 務(wù)實例141AU42A和142B (以及機器121和131處的任何其他服務(wù)實例、以及其他機器處的服務(wù)實例)可以通過雙工通信介質(zhì)向相應的雙工服務(wù)組件發(fā)送消息并從其接收消息。當交換消息時,雙工客戶端組件可以附加標識出雙工客戶端組件的會話ID。例如,當發(fā)送消息151時,雙工客戶端組件111可以將會話ID 161附加到消息151。會話ID 161可以將雙工客戶端組件111標識為消息151的發(fā)送者。雙工服務(wù)組件實例和服務(wù)實例可以使用會話ID來為所接收的消息標識出起源雙工客戶端組件。例如,雙工服務(wù)組件實例122可以使用會話ID 161將雙工客戶端組件111標識為消息151的發(fā)送者。當雙工客戶端組件發(fā)送消息時,雙工客戶端組件還附加標識出客戶端的端點ID。例如,當發(fā)送消息152時,雙工客戶端組件111還可以將端點ID 163附加到消息152。端點ID 163可以將客戶端102標識為將消息152發(fā)送給雙工客戶端組件111的客戶端。在一些實施例中,雙工客戶端組件在發(fā)送前批量處理消息。例如,雙工客戶端組件111可以在批次154中批量處理消息151、152等等。然后,雙工客戶端組件111可以將包括消息151、152等等的批次154發(fā)送給雙工服務(wù)組件實例。相對于單獨地發(fā)送消息而言,發(fā)送批次節(jié)省了資源。端點ID可以與消息一起行進,并且被傳輸給任何相應的響應消息以供返回給雙工客戶端組件。短時參考圖1B,雙工服務(wù)組件132可以將消息154與會話ID 161和端點ID 163 一起發(fā)送給雙工客戶端組件111。當雙工客戶端組件111接收消息156時,雙工客戶端組件111使用端點ID 163來確定消息156將被遞送給客戶端102。在一些實施例中,雙工服務(wù)組件實例在發(fā)送前一并批量處理針對相同雙工客戶端的消息。雙工服務(wù)組件實例可以包括讀取邏輯和寫入邏輯,所述邏輯有助于將傳入請求消息路由到合適的服務(wù)實例以及將傳出回復消息路由到合適的雙工客戶端組件。例如,回到圖1A,雙工服務(wù)實例122包括讀取邏輯123和寫入邏輯124。類似地,雙工服務(wù)實例132包括讀取邏輯133和寫入邏輯134。一般而言,讀取數(shù)據(jù)存儲144被配置為保持請求(應用)消息,直到負責的服務(wù)實例請求該請求(應用)消息。讀取數(shù)據(jù)存儲144可以是某種類型的持久性存儲,從而允許更持久地保存請求(應用)消息,直到被負責的服務(wù)實例請求。讀取數(shù)據(jù)存儲144可以由雙工服務(wù)組件實例和服務(wù)實例全局地訪問。因此,一個機器處的雙工服務(wù)組件實例可以在讀取數(shù)據(jù)存儲144中存儲請求(應用)消息以使該請求(應用)消息對其他機器處的服務(wù)實例可用。因此,當雙工服務(wù)組件實例接收到應用消息(或者應用消息的批次)時,讀取邏輯可以分析所述消息(或每個單獨的消息)以確定相同機器處的服務(wù)實例是否負責該消息。該分析可以包括確定相同機器處的服務(wù)實例是否正在處理針對所附加的相同會話ID的其他消息。當相同機器處的服務(wù)實例正在處理針對所附加的相同會話ID的其他消息時,讀取邏輯可以將該消息路由到該服務(wù)實例。另一方面,當相同機器處的服務(wù)實例未正在處理針對所附加的相同會話ID的其他消息時,讀取邏輯可以將該消息路由到讀取數(shù)據(jù)存儲144。當服務(wù)實例負責會話ID時,該服務(wù)實例可以(例如不時地或者響應于接收到針對該會話ID的其他消息)在讀取數(shù)據(jù)存儲144中查詢具有所附加的會話ID的消息。因此,在一個機器處的雙工組件服務(wù)實例處接收的消息可被存儲在讀取數(shù)據(jù)存儲144處并且隨后由另一機器處的負責的服務(wù)實例訪問。 一般而言,讀取數(shù)據(jù)存儲146被配置為保持從服務(wù)實例接收到的回復(應用)消息,直到從雙工客戶端組件接收到針對回復(應用)消息的請求(輪詢)。讀取數(shù)據(jù)存儲146可以是某種類型的持久性存儲,從而允許更持久地保存回復(應用)消息,直到(例如響應于輪詢消息)被返回給合適的雙工客戶端組件。讀取數(shù)據(jù)存儲146可以由雙工服務(wù)組件實例和服務(wù)實例全局地訪問。因此,一個機器處的服務(wù)實例可以在讀取數(shù)據(jù)存儲146中存儲回復(應用)消息以使該回復(應用)消息對其他機器處的雙工服務(wù)組件實例可用。圖2示出用于存儲消息以供所指定的服務(wù)實例訪問的示例性方法200的流程圖。方法200將參考圖IA所描繪的組件和數(shù)據(jù)來描述。方法200包括雙工服務(wù)組件從雙工客戶端組件接收消息的動作,該消息是從與雙工客戶端組件進行雙工通信的客戶端發(fā)送的,該消息已經(jīng)使用請求/回復協(xié)議從雙工客戶端組件路由到雙工服務(wù)組件,該消息具有對應于雙工客戶端組件的會話ID并且具有對應于客戶端的端點ID (動作201)。例如,雙工服務(wù)組件實例122可以從雙工客戶端組件111接收消息152。如圖IA中所示,消息152通過雙工通信介質(zhì)114從客戶端102發(fā)送給雙工客戶端組件111。消息152是通過請求/回復通信介質(zhì)116 (例如HTTP)從雙工客戶端組件111路由到雙工服務(wù)組件實例122的。消息分發(fā)組件113可以將消息152路由到雙工服務(wù)組件實例122而不考慮會話親和力。因此,消息152同樣可以已經(jīng)被路由到雙工服務(wù)組件實例132或其他某個雙工服務(wù)組件實例(例如其處于其他某個機器處)。消息152包括對應于雙工客戶端組件111的會話ID 161以及對應于客戶端102的端點ID 163。如所描繪的那樣,消息152可以與其他消息(例如消息151)—起被包括在批次154中。批次154中的每個消息都可以包括會話ID 161和與同雙工客戶端組件111進行雙工通信的客戶端相對應的端點ID。因此,可能的是,雙工服務(wù)組件實例122接收批次154并且隨后從批次154內(nèi)訪問各個消息。來自其他雙工客戶端組件和客戶端的其他請求(應用)消息還可以按會話ID和端點ID被編組,并且被存儲在讀取數(shù)據(jù)存儲144中以供所指定的服務(wù)實例訪問。當所指定的服務(wù)實例在接收到請求(應用)消息的雙工服務(wù)組件實例處不可用時,可以編組和存儲來自其他雙工客戶端組件和客戶端的消息。例如,當所指定的服務(wù)實例在相同機器處不可用于處理該請求(應用)消息時,針對雙工客戶端組件112和所連接的客戶端(例如104和106)的請求(應用)消息還可被存儲在寫入數(shù)據(jù)存儲146中。方法200包括雙工服務(wù)組件確定針對該消息的所指定的服務(wù)實例在該雙工服務(wù)組件處不可用的動作(動作202)。例如,讀取邏輯123可以確定針對消息152的所指定的服務(wù)實例在機器121處不可用。對不可用性的確定可以包括確定負責與會話ID和/或端點ID的組合相對應的消息的服務(wù)實例在雙工服務(wù)組件處不可用。例如,讀取邏輯123可以確定負責與會話ID 161和端點ID163的組合相對應的消息的服務(wù)實例在機器121處不可用。讀取邏輯123還可以確定針對消息的所指定的服務(wù)實 例在機器121處可用。例如,讀取邏輯123可以確定服務(wù)實例141A是針對消息151的所指定的服務(wù)實例。對可用性的確定可以包括確定負責與會話ID和/或端點ID的組合相對應的消息的服務(wù)實例在雙工服務(wù)組件處可用。例如,讀取邏輯123可以確定服務(wù)實例141A負責與會話ID 161和端點ID 162的組合相對應的消息。方法200包括雙工服務(wù)組件響應于該確定將消息存儲在讀取數(shù)據(jù)存儲中以便使該消息對另一雙工服務(wù)組件處的所指定的服務(wù)實例可用的動作,該消息按照會話ID和端點ID與其他消息編組在一起,使得來自相同客戶端的消息在讀取數(shù)據(jù)存儲內(nèi)被編組在一起(動作203)。例如,響應于確定針對消息152的所指定的服務(wù)實例在機器121處不可用,讀取邏輯123可以將消息152 (與會話ID 161和端點ID 163—起)存儲在讀取數(shù)據(jù)存儲144中。在讀取數(shù)據(jù)存儲144內(nèi),消息152與具有會話ID 161和端點ID 162的其他消息(即來自客戶端102的其他消息)編組在一起。將消息152存儲在讀取數(shù)據(jù)存儲144中使消息152對另一雙工服務(wù)組件實例處(即在機器131處)的服務(wù)實例可用。方法200包括第二雙工服務(wù)組件處的所指定的服務(wù)實例使用雙工通信來從客戶端訪問該消息的動作,所述所指定的服務(wù)實例基于消息具有分別與該雙工客戶端組件和該客戶端相對應的會話ID和端點ID來訪問該消息(動作204)。例如,服務(wù)實例142B可以使用雙工通信從讀取數(shù)據(jù)存儲144訪問消息152 (連同會話ID 161和端點ID 163)。也就是說,服務(wù)實例142B基于被指定給從雙工客戶端組件111和客戶端102的組合發(fā)送的進程應用消息來訪問消息152。在處理消息152以后,可能的是,服務(wù)實例142B已經(jīng)具有要返回給客戶端102的結(jié)果。服務(wù)實例142B可以將消息中的結(jié)果存儲在寫入數(shù)據(jù)存儲146中。例如,服務(wù)實例142B可以使用雙工通信把包含處理消息152的結(jié)果(連同會話ID 161和端點ID 163)的消息156存儲在寫入數(shù)據(jù)存儲146。響應于針對雙工客戶端組件111的回復(應用)消息的請求(輪詢)消息,雙工服務(wù)組件實例處的寫入邏輯可以訪問消息156并且將消息156返回給雙工客戶端組件111。其他服務(wù)實例也可以使用雙工通信將消息存儲在寫入數(shù)據(jù)存儲146中。例如,響應于處理來自客戶端103的請求(應用)消息,服務(wù)實例142A可以將消息157與會話ID 161和端點ID 164—起存儲。端點ID 164可以是雙工客戶端組件111向客戶端103分配的端點ID。供返回給其他雙工客戶端組件和客戶端的其他回復(應用)消息也可以按照會話ID和端點ID被編組在一起并且存儲在寫入存儲146中。例如,針對雙工客戶端組件112和客戶端(例如104和106)的回復(應用)消息也可被存儲在寫入數(shù)據(jù)存儲146中。圖3示出了用于將應用消息遞送給客戶端的示例性方法300的流程圖。方法300將參考圖IB所描繪的組件和數(shù)據(jù)來描述。方法300包括雙工服務(wù)組件從雙工客戶端組件接收輪詢消息的動作,該輪詢消息請求針對與該雙工客戶端組件進行雙工通信的一個或多個客戶端的應用消息,該輪詢消息已經(jīng)使用請求/回復協(xié)議從該雙工客戶端組件路由到該雙工服務(wù)組件,該輪詢消息包括被分配給該雙工客戶端組件的會話ID (動作301)。例如,雙工組件實例132可以從雙工客戶端組件111 一并接收輪詢消息158和會話ID 161。因此,輪詢消息158請求針對與雙工客戶端組件111進行雙工通信的客戶端(包括101、102和103)的回復(應用)消息。輪詢消息158是通過請求/回復通信介質(zhì)116 (例如HTTP)從雙工客戶端組件111路由到雙工服務(wù)組件實例132的。消息分發(fā)組件113可以將輪詢消息158路由到雙工服務(wù)組件實例132而不考慮會話親和力。
方法300包括雙工服務(wù)組件在寫入數(shù)據(jù)存儲中檢查具有被分配給雙工客戶端組件的會話ID的任何應用消息的動作(動作302)。例如,雙工組件實例132可以在數(shù)據(jù)存儲146中檢查按照會話ID 161被編組在一起的任何回復(應用)消息。方法300包括雙工服務(wù)組件在寫入數(shù)據(jù)存儲中定位具有被分配給雙工客戶端組件的會話ID的至少一個應用消息的動作,所述至少一個消息已經(jīng)由第一服務(wù)實例使用雙工通信寫入到寫入數(shù)據(jù)存儲中,所述第一服務(wù)實例在第一雙工服務(wù)組件處可用(動作303)。例如,在檢查寫入數(shù)據(jù)存儲146以后,雙工服務(wù)組件實例132可以定位具有會話ID 161的至少一個消息157,所述消息157已經(jīng)由服務(wù)實例142A使用雙工通信寫入到寫入數(shù)據(jù)存儲146中。雙工組件服務(wù)組件實例132還可以定位消息156,該消息156已經(jīng)由服務(wù)實例142B使用雙工通信寫入到寫入數(shù)據(jù)存儲146中。方法300包括雙工服務(wù)組件使用請求/回復協(xié)議將應用消息發(fā)送給雙工客戶端組件的動作(動作304)。例如,寫入邏輯134可以使用請求/回復通信介質(zhì)116 (例如HTTP)將消息157與端點ID 164—起發(fā)送給雙工客戶端組件111。寫入邏輯134還可以使用請求/回復通信介質(zhì)116將消息156與端點ID 163 一起發(fā)送給雙工客戶端組件111。在一些實施例中,消息156和157與供遞送給雙工客戶端組件111的其他消息一起被批處理。然后,寫入邏輯134將該批次的消息發(fā)送給雙工客戶端組件111。寫入邏輯134可以在返回消息156和157中包括或不包括會話ID 161,因為其已經(jīng)從輪詢消息158中得知了會話ID 161。在接收到(例如批次)一個或多個消息,雙工客戶端組件111可以使用端點ID來將各個消息遞送給合適的客戶端。例如,基于會話ID 163和164,雙工客戶端組件111可以分別將消息156和157遞送給客戶端102和103。圖4示出了用于在客戶端與所指定的服務(wù)實例之間路由消息的示例性消息流模式400。箭頭411表示客戶端401建立輪詢,該輪詢基于在沒有會話親和力的情況下(可能隨機地)路由消息的算法被路由到雙工服務(wù)實例402A。該輪詢允許雙工服務(wù)實例402A在任何時候在寫入數(shù)據(jù)存儲406中查詢并且遞送針對客戶端401的消息。箭頭412表示客戶端401發(fā)送請求(應用)消息A,該請求(應用)消息A也基于在沒有會話親和力的情況下(可能隨機地)路由消息的算法被路由到雙工服務(wù)實例402A。箭頭413表示雙工服務(wù)實例402A將消息A寫入到讀取數(shù)據(jù)存儲404中。雙工服務(wù)實例402A可以響應于所指定的服務(wù)實例(例如403)在與雙工服務(wù)實例402A相同的機器處不可用而將消息A寫入到讀取數(shù)據(jù)存儲404。箭頭414表示服務(wù)實例403 (針對客戶端401的所指定的服務(wù)實例)檢查讀取數(shù)據(jù)存儲404并且定位消息A。服務(wù)實例403讀取觸發(fā)服務(wù)實例403的激活的消息A,該服務(wù)實例執(zhí)行一些處理。箭頭415表示服務(wù)實例403 (在消息A的處理期間)選擇通過將消息B存儲在寫入數(shù)據(jù)存儲406中將消息B發(fā)送給客戶端401。箭頭416表示客戶端401發(fā)送請求(應用)消息C,該請求(應用)消息C也基于在沒有會話親和力的情況下(可能隨機地)路由消息的算法被路由到雙工服務(wù)實例402B。箭頭417表示雙工服務(wù)實例402B將消息C寫入到讀取數(shù)據(jù)存儲404中。雙工服務(wù)實例402B可以響應于所指定的服務(wù)實例(例如403)在與雙工服務(wù)實例402B相同的機器處不可用而將消息C寫入到讀取數(shù)據(jù)存儲404。箭頭418表示服務(wù)實例403仍然為活動的,檢查讀取數(shù)據(jù)存儲404并且定位消息C。服務(wù)實例403從讀取數(shù)據(jù)存儲404讀取消息C并且繼續(xù)處理。箭頭419表示服務(wù)實例 403完成處理并且通過在寫入數(shù)據(jù)存儲406中存儲消息D和E將消息D和E發(fā)送給客戶端401。箭頭420表示雙工服務(wù)實例402A基于一些傳輸特有的邏輯判定從寫入數(shù)據(jù)存儲406中訪問消息B和D以及將消息B和D發(fā)送給客戶端401。雙工服務(wù)實例402A能夠發(fā)送消息B和D,因為其仍然具有以箭頭411表示的輪詢。箭頭421表示雙工服務(wù)實例402A響應于以箭頭411表示的輪詢將消息B和D發(fā)送給客戶端401。箭頭422表示雙工服務(wù)實例402B從客戶端401接收隨后的輪詢。隨后的輪詢基于在沒有會話親和力的情況下(可能隨機地)路由消息的算法被路由到雙工服務(wù)實例402B。該輪詢允許雙工服務(wù)實例402B在任何時候在寫入數(shù)據(jù)存儲406中查詢并且遞送針對客戶端401的消息。箭頭423表示雙工服務(wù)實例402B基于一些傳輸特有的邏輯判定將剩余的消息、消息E從寫入數(shù)據(jù)存儲406中發(fā)送給客戶端401。雙工服務(wù)實例402B能夠發(fā)送消息E,因為雙工客戶端402B仍然具有以箭頭422表示的輪詢。箭頭423表示雙工服務(wù)實例402B響應于以箭頭422表示的輪詢將消息E發(fā)送給客戶端401。因此,本發(fā)明的實施例提供了用于基于輪詢機制的雙工消息模式的多機器縮放能力機制。客戶端請求和輪詢可以由不感知會話的負載平衡器分發(fā)給運行在機器群集內(nèi)的服務(wù)實例。去往和來自給定客戶端的消息可以由群集服務(wù)實例中的任何服務(wù)實例來訪問,這允許服務(wù)實例之間的容量橫向擴展和無縫的故障轉(zhuǎn)移。實施例包括通過非本機雙工通信介質(zhì)對復用雙工通信的支持,其中客戶端和服務(wù)期系統(tǒng)通過不感知會話的負載平衡被分開。協(xié)調(diào)的入站消息存儲(例如讀取數(shù)據(jù)存儲144)被用于使應用請求對特定服務(wù)實例親和。協(xié)調(diào)的出站消息存儲(例如寫入數(shù)據(jù)存儲146)被用于將應用響應從運行該應用的機器路由到輪詢所到達的機器。另外,服務(wù)實例的壽命同入站或出站消息存儲去耦合,從而允許客戶端一服務(wù)器對話可能跨越服務(wù)的許多實例。本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實施例在所有方面都應被認為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種在計算機架構(gòu)處用于存儲消息以供所指定的服務(wù)實例訪問的方法,所述計算機架構(gòu)包括一個或多個雙工客戶端組件、多個雙工服務(wù)組件以及讀取數(shù)據(jù)存儲,所述一個或多個雙工客戶端組件包括雙工客戶端組件,所述多個雙工服務(wù)組件包括雙工服務(wù)組件和第二雙工服務(wù)組件,所述一個或多個雙工客戶端組件中的每個都使用雙工通信與一個或多個客戶端通信,所述多個雙工服務(wù)組件中的每個都使用雙工通信與一個或多個服務(wù)實例通信,來自所述一個或多個客戶端雙工組件的消息在沒有任何固有的會話親和力的情況下在所述多個雙工服務(wù)組件間分發(fā),所述讀取數(shù)據(jù)存儲能夠由所述多個雙工服務(wù)客戶端中的任何雙工服務(wù)客戶端處的服務(wù)實例全局地訪問,該方法包括 所述雙工服務(wù)組件從所述雙工客戶端組件接收消息的動作,所述消息是從與所述雙工客戶端組件進行雙工通信的客戶端發(fā)送的,所述消息已經(jīng)使用請求/回復協(xié)議從所述雙工客戶端組件路由到所述雙工服務(wù)組件,所述消息具有對應于所述雙工客戶端組件的會話ID并且具有對應于所述客戶端的端點ID ; 所述雙工服務(wù)組件確定針對所述消息的所指定的服務(wù)實例在所述雙工服務(wù)組件處不可用的動作; 所述雙工服務(wù)組件響應于該確定將所述消息存儲在所述讀取數(shù)據(jù)存儲中以便使所述消息對另一雙工服務(wù)組件處的所指定的服務(wù)實例可用的動作,所述消息按照會話ID和端點ID與其他消息編組在一起,使得來自相同客戶端的消息在所述讀取數(shù)據(jù)存儲內(nèi)被編組在一起;以及 第二雙工服務(wù)組件處的所指定的服務(wù)實例使用雙工通信來訪問所述客戶端的所述消息的動作,所述所指定的服務(wù)實例基于消息具有分別與所述雙工客戶端組件和所述客戶端相對應的會話ID和端點ID來訪問所述消息。
2.如權(quán)利要求I所述的方法,其特征在于,還包括 所述雙工服務(wù)組件從所述雙工客戶端組件接收第二消息的動作,第二消息是從與所述雙工客戶端組件進行雙工通信的第二客戶端發(fā)送的,第二消息已經(jīng)使用請求/回復協(xié)議從所述雙工客戶端組件路由到所述雙工服務(wù)組件,所述消息具有對應于所述雙工客戶端組件的會話ID并且具有對應于第二客戶端的第二端點ID ;
3.如權(quán)利要求2所述的方法,其特征在于,所述雙工服務(wù)組件從所述雙工客戶端組件接收消息的動作以及所述雙工服務(wù)組件從所述雙工客戶端組件接收第二消息的動作包括所述雙工服務(wù)組件從所述雙工客戶端組件接收消息的批次的動作,所述消息的批次包括包括所述消息和第二消息在內(nèi)的多個單獨的消息,所述多個單獨的消息是從與所述雙工客戶端組件進行雙工通信的包括所述客戶端和第二客戶端在內(nèi)的一個或多個客戶端發(fā)送的,包括所述消息在內(nèi)的所述多個消息中的每個消息都具有對應于所述雙工客戶端組件的會話ID0
4.如權(quán)利要求3所述的方法,其特征在于,還包括 所述雙工服務(wù)組件將所述消息的批次分解成多個單獨的消息的動作。
5.如權(quán)利要求4所述的方法,其特征在于,所述雙工服務(wù)組件確定針對所述消息的所指定的服務(wù)實例在所述雙工服務(wù)組件處不可用的動作包括所述雙工服務(wù)組件確定針對所述多個單獨的消息中的至少一些單獨的消息的所指定的服務(wù)實例在所述雙工服務(wù)組件處不可用的動作。
6.如權(quán)利要求5所述的方法,其特征在于,所述雙工服務(wù)組件將所述消息存儲在所述讀取數(shù)據(jù)存儲中的動作包括所述雙工服務(wù)組件響應于該確定將所述一個或多個單獨的消息中的至少一些單獨的消息存儲在所述讀取數(shù)據(jù)存儲中,以便使所述一個或多個單獨的消息中的所述至少一些單獨的消息對其他雙工服務(wù)組件處的所指定的服務(wù)實例可用,所述單獨的消息按照會話ID和端點ID被編組,使得來自相同客戶端的消息在所述讀取數(shù)據(jù)存儲中被編組在一起。
7.如權(quán)利要求2所述的方法,其特征在于,還包括 所述雙工服務(wù)組件確定針對第二消息的所指定的服務(wù)實例在所述雙工服務(wù)組件處可用的動作;以及 所述雙工服務(wù)組件響應于該確定將第二消息提供給所述雙工服務(wù)組件處的所指定的服務(wù)實例而不將第二消息存儲在所述讀取數(shù)據(jù)存儲的動作。
8.如權(quán)利要求I所述的方法,其特征在于,所述計算機架構(gòu)包括寫入數(shù)據(jù)存儲并且還包括 第二雙工服務(wù)組件處的所指定的服務(wù)實例在第二雙工服務(wù)組件處的所指定的服務(wù)實例訪問所述消息以后處理所述消息的動作;以及 所指定的服務(wù)實例在處理所述消息期間生成回復消息以返回給所述客戶端的動作,所述回復消息具有所述會話ID和端點ID ;以及 所指定的服務(wù)實例將所述回復消息存儲在所述寫入數(shù)據(jù)存儲中,所述回復消息與具有所述會話ID的其他消息編組在一起,使得針對所述雙工客戶端組件的消息在所述寫入數(shù)據(jù)存儲中被編組在一起。
9.如權(quán)利要求8所述的方法,其特征在于,還包括 第三雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中查詢具有所述會話ID的消息的動作,第三雙工服務(wù)組件響應于來自所述雙工客戶端組件的所接收到的輪詢消息查詢所述寫入數(shù)據(jù)存儲,所述所接收到輪詢消息具有所述會話ID ; 所述寫入數(shù)據(jù)存儲把按照所述會話ID被編組在一起的一個或多個消息返回給第三雙工服務(wù)組件,所述一個或多個消息包括所述回復消息;以及 第三雙工服務(wù)組件響應于所述輪詢將按照所述會話ID被編組在一起的所述一個或多個消息發(fā)送給所述雙工客戶端組件。
10.如權(quán)利要求9所述的方法,其特征在于,第一雙工服務(wù)組件和第三雙工服務(wù)組件是同一雙工服務(wù)組件。
11.如權(quán)利要求9所述的方法,其特征在于,還包括在第三雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中查詢消息的動作以后將具有所述會話ID的一個或多個消息寫入到所述寫入數(shù)據(jù)存儲中的動作,并且其中發(fā)送按照所述會話ID被編組在一起的所述一個或多個消息的動作包括發(fā)送所述一個或多個消息至少之一的動作。
12.—種在計算機架構(gòu)處用于將應用消息遞送給客戶端的方法,所述計算機架構(gòu)包括一個或多個雙工客戶端組件、多個雙工服務(wù)組件以及寫入數(shù)據(jù)存儲,所述一個或多個雙工客戶端組件包括雙工客戶端組件,所述多個雙工服務(wù)組件至少包括雙工服務(wù)組件和第一雙工服務(wù)組件,所述一個或多個雙工客戶端組件中的每個都使用雙工通信與一個或多個客戶端通信,所述多個雙工服務(wù)組件中的每個都使用雙工通信與一個或多個服務(wù)實例通信,來自所述一個或多個雙工客戶端組件的消息在沒有任何固有的會話親和力的情況下在所述多個雙工服務(wù)組件間分發(fā),所述寫入數(shù)據(jù)存儲能夠由所述多個雙工服務(wù)客戶端中的任何雙工服務(wù)客戶端處的服務(wù)實例全局地訪問,該方法包括 所述雙工服務(wù)組件從所述雙工客戶端組件接收輪詢消息的動作,所述輪詢消息請求針對與所述雙工客戶端組件進行雙工通信的一個或多個客戶端的應用消息,所述輪詢消息已經(jīng)使用請求/回復協(xié)議從所述雙工客戶端組件路由到所述雙工服務(wù)組件,所述輪詢消息包括被分配給所述雙工客戶端組件的會話ID ; 所述雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中檢查具有被分配給所述雙工客戶端組件的會話ID的任何應用消息的動作; 所述雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中定位具有被分配給所述雙工客戶端組件的會話ID的至少一個應用消息的動作,所述至少一個消息已經(jīng)由第一服務(wù)實例使用雙工通信寫入到所述寫入數(shù)據(jù)存儲中,所述第一服務(wù)實例在第一雙工服務(wù)組件處可用;以及 所述雙工服務(wù)組件使用所述請求/回復協(xié)議將所述應用消息發(fā)送給雙工客戶端組件的動作。
13.如權(quán)利要求12所述的方法,其特征在于,所述雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中定位具有被分配給所述雙工客戶端組件的會話ID的至少一個應用消息的動作包括所述雙工服務(wù)組件在所述寫入數(shù)據(jù)存儲中定位具有被分配給所述雙工客戶端組件的會話ID的多個應用消息的動作。
14.如權(quán)利要求12所述的方法,其特征在于,所述雙工服務(wù)組件和第一雙工服務(wù)組件是同一雙工服務(wù)組件。
15.一種網(wǎng)絡(luò)計算機系統(tǒng),所述網(wǎng)絡(luò)計算機系統(tǒng)包括 一個或多個處理器; 多個雙工客戶端組件,每個雙工客戶端組件都與一個或多個客戶端進行雙工通信;多個雙工服務(wù)組件,每個雙工服務(wù)組件都與一個或多個服務(wù)實例進行雙工通信;消息分發(fā)組件,所述消息分發(fā)組件使用請求/回復通信在沒有任何會話親和力的情況下在所述多個雙工客戶端組件與所述多個雙工服務(wù)組件之間路由消息; 讀取數(shù)據(jù)存儲,所述讀取數(shù)據(jù)存儲用于在所指定的服務(wù)實例在原先接收到來自客戶端的請求應用消息的雙工服務(wù)組件處不可用時持久地存儲所述請求應用消息,所述讀取數(shù)據(jù)存儲能夠由所述多個雙工服務(wù)客戶端中的任何雙工服務(wù)客戶端處的一個或多個服務(wù)實例全局地訪問,使得另一不同的雙工服務(wù)組件處的所指定的服務(wù)實例能夠從所述讀取數(shù)據(jù)存儲訪問請求應用消息; 寫入數(shù)據(jù)存儲,所述寫入數(shù)據(jù)存儲用于持久地存儲針對客戶端的回復應用消息,所述回復應用消息是從處理請求應用消息的服務(wù)實例中生成的,所述寫入數(shù)據(jù)存儲能夠由所述多個雙工服務(wù)組件全局地訪問,使得所述多個雙工服務(wù)組件中的任何雙工服務(wù)組件都能夠響應于從客戶端接收到的輪詢消息將回復應用消息返回給所述客戶端。
全文摘要
本發(fā)明延及用于路由針對雙工應用的請求的方法、系統(tǒng)和計算機程序產(chǎn)品。本發(fā)明的實施例提供了用于基于輪詢機制的雙工消息模式的多機器縮放能力機制。客戶端請求和輪詢可以由不感知會話的負載平衡器分發(fā)給運行在機器群集內(nèi)的服務(wù)實例。去往和來自給定客戶端的消息可以由群集服務(wù)實例中的任何服務(wù)實例來訪問,這允許服務(wù)實例之間的容量橫向擴展和無縫的故障轉(zhuǎn)移。協(xié)調(diào)的入站消息存儲被用于使應用請求對特定服務(wù)實例親和。協(xié)調(diào)的出站消息存儲被用于將應用響應從運行該應用的機器路由到輪詢請求所到達的機器。另外,服務(wù)實例的壽命同入站或出站消息存儲去耦合,從而允許客戶端-服務(wù)器對話可能跨越服務(wù)的許多實例。
文檔編號G06F9/06GK102792264SQ201180012930
公開日2012年11月21日 申請日期2011年3月4日 優(yōu)先權(quán)日2010年3月10日
發(fā)明者J·M·科爾, N·A·艾倫, T·揚丘克, Y·格奧爾吉維 申請人:微軟公司