引言要了解關(guān)于消息中間件 MQ 企業(yè)級方案設(shè)計(jì)的系列文章,,請?jiān)L問以下鏈接: Websphere MQ 是 IBM 功能強(qiáng)大的消息傳送中間件產(chǎn)品,它以其成熟的技術(shù)和世界領(lǐng)先的產(chǎn)品向我們提供了的功能豐富,、可靠易用的異構(gòu)平臺間實(shí)現(xiàn)可靠信息傳遞的成熟解決方案,。使用 MQ 消息傳遞產(chǎn)品可以幫助業(yè)務(wù)應(yīng)用在不同種類平臺上交換信息,以消息的方式接收,、發(fā)送數(shù)據(jù),,從而實(shí)現(xiàn)企業(yè)應(yīng)用集成。MQ 屏蔽了異構(gòu)軟硬件平臺和網(wǎng)絡(luò)協(xié)議的復(fù)雜性,,確?!跋⒌竭_(dá)并且僅到達(dá)一次”的可靠的消息傳遞,滿足高可靠性的,、高性能的,、安全可靠的穩(wěn)定信息數(shù)據(jù)傳輸要求,并具有開放性,、擴(kuò)展性,、先進(jìn)性、安全性,、可管理性和易于維護(hù)開發(fā)等特性,。依靠這些優(yōu)勢,MQ 在消息類中間件市場上占有統(tǒng)治地位,,已經(jīng)成為事實(shí)上的行業(yè)標(biāo)準(zhǔn),,在企業(yè)的各類應(yīng)用中承擔(dān)了可靠的信息數(shù)據(jù)傳輸?shù)幕A(chǔ)支撐。MQ 是為能夠支撐大型企業(yè)的海量信息傳輸而設(shè)計(jì)的,,它設(shè)計(jì)了很多應(yīng)用特性,,為企業(yè)級應(yīng)用提供支持,這些特性分散在系統(tǒng)設(shè)計(jì)和應(yīng)用編程的各種細(xì)節(jié)之處,。本系列以使用 IBM 大型機(jī)服務(wù)器的客戶為主要對象,,對異步通信與同步通信、MQ 高可用性及負(fù)載均衡方案,、MQ 的安全性實(shí)現(xiàn),、MQ 與傳統(tǒng) CICS 應(yīng)用的連接,、使用 MQ 實(shí)現(xiàn) SOA 服務(wù)、MQ 應(yīng)用性能監(jiān)控和企業(yè)級應(yīng)用設(shè)計(jì)構(gòu)架等幾個方面探討如何應(yīng)用 MQ 的特性實(shí)現(xiàn)企業(yè)級應(yīng)用的業(yè)務(wù)需求,。本文是本系列的第 1 部分,,將為大家介紹異步通信與同步通信的特點(diǎn)與設(shè)計(jì)考慮以及 MQ 高可用性及負(fù)載均衡方案。 異步通信與同步通信異步通信與同步通信的特點(diǎn)MQ 在支持同步通訊的同時,,提供了基于消息隊(duì)列存儲 - 轉(zhuǎn)發(fā)機(jī)制的異步通訊模式,,應(yīng)用程序只需將消息交給 MQ,就由 MQ 負(fù)責(zé)將消息安全,、可靠地發(fā)送出去,,不再需要應(yīng)用和人工的干預(yù),真正實(shí)現(xiàn)了數(shù)據(jù)傳輸自動化,,這一特點(diǎn)能夠使應(yīng)用程序獨(dú)立于通信對方和網(wǎng)絡(luò)的可用性,。與我們常見的同步通信相比,異步通信模式有以下特點(diǎn):
與異步通信相比,,同步通信想法更為簡單而且更容易實(shí)現(xiàn)――發(fā)起方在系統(tǒng)中等待直到對方響應(yīng),這樣可以避免復(fù)雜的發(fā)送 / 確認(rèn) / 重傳機(jī)制的設(shè)計(jì),,但同時也造成了低效率和對資源占用大的缺點(diǎn),,同步通信目前是一種常見的廉價通信實(shí)現(xiàn)方式。 需要說明的是這里談?wù)摰耐?/ 異步是底層消息傳輸?shù)哪J?,與其最終提供的服務(wù)模式無關(guān):同步業(yè)務(wù)服務(wù)可以通過同步通信實(shí)現(xiàn),,也可以通過異步通信實(shí)現(xiàn)。比如我們常見的電話業(yè)務(wù),,一般我們都認(rèn)為是一種同步的服務(wù),,但電信公司實(shí)際實(shí)施時,如果是通過交換機(jī),,在通話雙方之間建立一個電路連接,,那就是一種同步通信實(shí)現(xiàn);如果電信公司采用的是 IP 電話,,通過網(wǎng)絡(luò)把聲音打成若干數(shù)據(jù)包在 Internet 上發(fā)送,,在收話方?jīng)]有感覺到的時間內(nèi)再按順序組合把語音還原出來,,那就是使用的異步底層通信實(shí)現(xiàn)。我們進(jìn)行應(yīng)用方案設(shè)計(jì)時要充分意識到兩種通信模式的特點(diǎn),,考慮各種選擇的可能性和優(yōu)劣。 異步通信實(shí)現(xiàn)同步應(yīng)用設(shè)計(jì)由于同步 / 異步通信有各自的特點(diǎn),,所以通過異步通信來實(shí)現(xiàn)同步應(yīng)用時,,有一些特殊的方法需要考慮。異步通信基礎(chǔ)上實(shí)現(xiàn)同步應(yīng)用,,是通過若干異步消息分段實(shí)現(xiàn)的,,以最簡單的雙方模式為例,A 發(fā)送給 B 一個異步消息,,B 接收后完成特定處理,,再返回給 B 一個異步消息,如果這個處理過程足夠快,,就能夠?qū)崿F(xiàn)一個請求 / 應(yīng)答模式的同步應(yīng)用,。這種模式下,應(yīng)用中 UOW 的范圍,,和同步應(yīng)用下是有很大不同的,,應(yīng)用設(shè)計(jì)中要充分考慮到這種區(qū)別。 在同步模式下,,在 A 和 B 的所有操作都可以放在一個 UOW 中,,通過兩階段提交協(xié)議實(shí)現(xiàn)數(shù)據(jù)一致;在異步模式,,應(yīng)用會分成幾個 UOW,,第一個是應(yīng)用程序在本地隊(duì)列管理器中的操作,第二個是兩個隊(duì)列管理器間的數(shù)據(jù)傳輸,,這個 UOW 是系統(tǒng)完成的,,對于應(yīng)用是透明的,第三個 UOW 是遠(yuǎn)程應(yīng)用在遠(yuǎn)程隊(duì)列管理器中的操作,。應(yīng)用設(shè)計(jì)時要充分意識到這些區(qū)別,。 由于交易一致性控制,一個 MQ 應(yīng)用中在隊(duì)列中進(jìn)行的改變,,只在它 COMMIT 后,,其他應(yīng)用程序才能看到,所以在進(jìn)行請求 / 應(yīng)答模式的 MQ 應(yīng)用程序中,,請求程序發(fā)送請求消息后,,要在適當(dāng)?shù)奈恢孟?COMMIT,完成這個 UOW,,然后在到應(yīng)答隊(duì)列里去等待對方完成 UOW 后的返回,。應(yīng)答程序也要與請求程序類似,,也要合理地控制 UOW 的范圍,使得返回消息能夠恰當(dāng)?shù)乇徽埱蟪绦虻玫健?/p> 在使用 MQ 進(jìn)行要求同步通訊的程序設(shè)計(jì)時,,會碰到原來可能會做單一 UOW 的應(yīng)用,,在 MQ 下的異步應(yīng)用設(shè)計(jì)下要劃分成若干個 UOW,這就涉及到如何在多 UOW 下保證數(shù)據(jù)整體的一致性,。這種需求,,一般可以通過合理的沖正設(shè)計(jì)來實(shí)現(xiàn)。 MQ Server 與 ClientMQ 產(chǎn)品分為 Server 和 Client 兩種版本,,在 MQ Server 的運(yùn)行環(huán)境下,,有隊(duì)列管理器、隊(duì)列,、消息通道等對象,,它提供全面的消息服務(wù);MQ Client 本身沒有隊(duì)列管理器,、隊(duì)列等對象,,它通過 MQI 通道與服務(wù)器之間建立通訊,并將消息從客戶端發(fā)往服務(wù)器端的隊(duì)列,,或從 Server 端的隊(duì)列中取得消息,,其他功能也比 Server 有限。MQ Client 與 Server 之間的通信是同步模式完成的,,它必須在 Server 正在工作并且可以通過網(wǎng)絡(luò)訪問的情況下才能完成任務(wù),。MQ Client 通常在有大量末端環(huán)境的應(yīng)用系統(tǒng)中采用,可以通過這種方式來節(jié)省成本,,但要求在 Client 到 Server 之間要有比較可靠的網(wǎng)絡(luò)連接,。 MQ 高可用性及負(fù)載均衡方案大型企業(yè)應(yīng)用方案,在功能性要求之外系統(tǒng)高可靠性能力與負(fù)載均衡能力是一個十分重要的衡量指標(biāo),。MQ 在這方案提供了很強(qiáng)的特性,,主要通過兩種主要技術(shù)實(shí)現(xiàn):MQ Cluster 技術(shù)和 Queue Sharing Group 技術(shù)。Cluster 技術(shù)可以在各種系統(tǒng)平臺上甚至跨平臺實(shí)施,,能夠提供基本的高可用性能力,,Queue Sharing Group 只能在 IBM System z 主機(jī)平臺上實(shí)現(xiàn),能夠提供最高級的高可用性能力,。 MQ Cluster 方案MQ Cluster 結(jié)構(gòu)與特點(diǎn) 使用 Queue Manager Cluster 技術(shù),,可以把安裝在不同平臺(如 AIX,LINUX,,WINDOW,,z/OS)上的若干個 Queue Manager 設(shè)計(jì)為一個集群,每個 Queue Manager 都創(chuàng)建成集群中的一員,。集群中有一個或多個 Queue Manager 可以定義成擁有整個集群的對象定義信息,,稱作 Repository queue manager,。當(dāng)用戶在集群中創(chuàng)建一個接收通道或隊(duì)列時,系統(tǒng)會自動在其他隊(duì)列管理器中創(chuàng)建相應(yīng)的發(fā)送通道和遠(yuǎn)程隊(duì)列定義,。不論整個集群中有多少 Queue Manager,,每個 Queue Manager 只要建立一個接收通道,和一個指向 Repository queue manager 的發(fā)送通道就可以完成消息連通,,而不必要針對每個 queue manager 分別定義通道,;同時每個 Queue Manager 也不必要定義遠(yuǎn)程所有用到的遠(yuǎn)程 Queue. 圖1 MQ Cluster 集群通過 Cluster 技術(shù),可以有效地減少系統(tǒng)的管理工作,,更快地建立應(yīng)用同時可以提高系統(tǒng)的可用性并可以在集群 MQ 管理器間實(shí)現(xiàn)負(fù)載均衡。 減少系統(tǒng)的管理工作主要體現(xiàn)在 :
使用 Cluster 技術(shù)提高系統(tǒng)的可用性和實(shí)現(xiàn)負(fù)載均衡,,是通過在 Cluster 內(nèi)的不同 QMGR 上建立同名的 Queue(同一個 Queue 的多個實(shí)例)來實(shí)現(xiàn)的。每個 Queue 的實(shí)例都能作為消息的目的地,,MQ 能夠在依照一定的算法決定實(shí)際消息應(yīng)當(dāng)傳給哪個 QMGR,。這樣當(dāng)集群里某個 QMGR 失效時,消息會自動路由到其他活動的 QMGR 管理的實(shí)例上去,。 典型部署模式 在實(shí)際應(yīng)用 Cluster 技術(shù)時,,一般采取如下的部署方案: 圖2 MQ Cluster 的典型部署模式在 Cluster 中首先設(shè)計(jì)一臺 MQ 服務(wù)器作為整個 Cluster 的網(wǎng)關(guān),作為對外的連接點(diǎn),,它本地并不定義任何輸入(Inbound)隊(duì)列(如上例中的 Q1),,只定義輸出(Outbound)隊(duì)列(如上例中的 Q2)。另外設(shè)置若干消息處理服務(wù)器,,其中定義本地的輸入隊(duì)列,,同時有消息處理程序在運(yùn)行。在外部交易進(jìn)入 Cluster 時首先發(fā)送到網(wǎng)關(guān)機(jī)上,,由網(wǎng)關(guān)動態(tài)地發(fā)送到 Cluster 里定義了輸入隊(duì)列的 MQ 服務(wù)器上去,。MQ 網(wǎng)關(guān)可以根據(jù)設(shè)置,按照輪循或權(quán)重的方式對進(jìn)入的消息進(jìn)行分發(fā),,還可以通過出口程序(User Exit)實(shí)現(xiàn)更加復(fù)雜的分發(fā)機(jī)制,。 在每個消息處理服務(wù)器都部署有完全相同的應(yīng)用處理程序,它們讀取輸入隊(duì)列里的消息,,經(jīng)過處理后把結(jié)果寫入輸出隊(duì)列,。輸出隊(duì)列只定義在 MQ 網(wǎng)關(guān)機(jī)器上,任何消息處理服務(wù)器寫出的消息都回最終傳送到網(wǎng)關(guān)上,。前臺程序連接網(wǎng)關(guān),,讀取返回結(jié)果,。 為了獲得更高可用性,這個方案中有兩點(diǎn)需要注意:1. 可以看到 MQ 網(wǎng)關(guān)是個單點(diǎn)隱患,,為了更高可用性,,要使用 HACMP 等方案實(shí)現(xiàn)備份。2. 如果消息處理服務(wù)器上的應(yīng)用程序意外停止運(yùn)行,,數(shù)據(jù)會在隊(duì)列中堆積起來,,為了避免這種情況,需要自動腳本在應(yīng)用程序停止時自動把 MQ 停止,,這樣后來的消息會發(fā)給其他服務(wù)器處理,。 網(wǎng)絡(luò)層負(fù)載均衡器與 MQ 一些企業(yè)中,經(jīng)常使用 F5 之只類的網(wǎng)絡(luò)層負(fù)載均衡器來實(shí)現(xiàn)一種高可靠性 / 負(fù)載均衡解決方案,。很多應(yīng)用可以依靠 F5 實(shí)現(xiàn)的動態(tài) IP 地址功能,,在不改變應(yīng)用程序的情況下實(shí)現(xiàn)高可用性,這為無狀態(tài)的網(wǎng)絡(luò)應(yīng)用提供了方便的均衡手段,。但是 MQ 產(chǎn)品為實(shí)現(xiàn)消息到并且只到一次,,在收發(fā)雙方的發(fā)送通道和接收通道上要傳遞記數(shù)和確認(rèn)信息,這樣以來發(fā)送和接收方必須有固定的一對一關(guān)系,,如果在中間網(wǎng)絡(luò)上配置了網(wǎng)絡(luò)層的負(fù)載均衡器,,由于它不知道這種機(jī)制的存在,必然造成通信的錯亂,,所以在使用 MQ 的網(wǎng)絡(luò)環(huán)境中不能夠同時使用網(wǎng)絡(luò)層的負(fù)載均衡設(shè)備,。 主機(jī) MQ 特有高可用性技術(shù) -Queue Sharing Group 設(shè)計(jì)Queue-Sharing Group 技術(shù)介紹 Shared Queue Group 是 MQ 依托 System z 主機(jī)的 Parallel Sysplex 技術(shù)而實(shí)現(xiàn)的高級特性。Shared queue 是一種本地隊(duì)列,,shared queue 里存儲的數(shù)據(jù)可以被同一個 Sysplex 里的若干個 QMGR 共同訪問,。能夠訪問同一個 shared queue 的所有 QMGR 稱為一個 queue-sharing group,它們可以訪問同一組 shared queues,。 Shared queue 的數(shù)據(jù)存儲在 Coupling Facility 的 list structures 里面,,一個 Group 里的所有隊(duì)列管理器都能夠從這個隊(duì)列里讀取數(shù)據(jù)和發(fā)送數(shù)據(jù)。 圖3MQ Queue Share GroupShared queue 的定義被所有 QMGR 共享,,共享的隊(duì)列定義是存放在 DB2 的表里,,在一個群里,隊(duì)列只要定義一次,,就能被所有的 QMGR 共享,。Queue-sharing group 里的每個 QMGR 都有與一個 DB2 系統(tǒng)相連,這些 DB2 系統(tǒng)必須在一個 data-sharing group 里,,這樣 QMGR 才能夠訪問相同的共享隊(duì)列定義,。 在主機(jī)上使用 Queue Share Group 技術(shù),結(jié)合 Sysplex 提供的系統(tǒng)功能(如 SYSPLEX Distributor 和 VTAM generic resources),MQ 除了可以實(shí)現(xiàn)應(yīng)用處理上的高可用性,,還能夠提供網(wǎng)絡(luò)接入和送出的高可用性,,這是通過 MQ 的 Shared channel 來實(shí)現(xiàn)的。 圖4 MQ 共享通道共享的接入通道 : Queue-sharing group 里的每個 MQ Server 的 channel initiator 都在同一個 IP 端口監(jiān)聽消息,,這個端口通過 Sysplex 提供的網(wǎng)絡(luò)技術(shù)對外做成一個 generic port,。這樣分布式系統(tǒng) MQ Channel 的連接請求會被分發(fā)到任意一個 MQ Server 上,只要 Group 里還有一個 Server 能夠響應(yīng),,就能夠完成消息向 Shared Queue 里的發(fā)送,。 共享的外傳通道 :如果一個發(fā)送通道的 transmission queue 定義為共享的 Shared Queue,那么這個通道就是共享的外傳通道,。Group 里的任意一個 QueueManger 都可以從共享的 transmission queue 里取得數(shù)據(jù)向外傳輸,,這樣只要還有一個 QM 有響應(yīng),這個通道對外就是暢通的,。 Shared queue 技術(shù)使 MQ 在應(yīng)用上具有以下優(yōu)點(diǎn):
應(yīng)用處理能力能夠很方便地進(jìn)行擴(kuò)展,,只要新增一個 QMGR,甚至新增一個 z/OS image 并在上面建立 QMGR 和應(yīng)用程序,,就能很好地?cái)U(kuò)大系統(tǒng)處理能力。
多個 QMGR 可以訪問同一個 Queue,,單個 QMGR 的故障不影響 Shared queue 的應(yīng)用,。MQ 通過 peer recovery 技術(shù),可以監(jiān)控 QMGR 的非正常中斷,,能夠自動回滾未完成的 ULW,。
利用 SYSPLEX 的負(fù)載均衡功能,可以在多個 QMGR 間平衡處理量,。 Queue Share Group 技術(shù)的優(yōu)勢 Cluster 技術(shù)和 Share Queue 技術(shù)為實(shí)現(xiàn)可靠性,、擴(kuò)展性和均衡,使用的基本手段是不同的:
Queue Manager Cluster 使用的是同名隊(duì)列的多個實(shí)例,,就是在 Cluster 里的多個 QMGR 上建立相同的 Queue,。進(jìn)入這個隊(duì)列的數(shù)據(jù)會轉(zhuǎn)發(fā)給某個 QMGR,一旦數(shù)據(jù)進(jìn)入這個 QMGR,,就只能由這個 QMGR 訪問,。
Queue-Sharing Group 使用的是一個共享的隊(duì)列,隊(duì)列的數(shù)據(jù)存儲只有一份,,可以由多個 QMGR 共同訪問,。 拋開 zSeries 對其他開放平臺的系統(tǒng)優(yōu)勢不談,由于這個基本手段本質(zhì)的不同,,使得兩種技術(shù)提供的服務(wù)水平有很大不同:
結(jié)束語本文是本系列的第 1 部分,,為大家介紹了異步通信與同步通信的特點(diǎn)與設(shè)計(jì)考慮以及 MQ 高可用性及負(fù)載均衡方案,,下面幾節(jié)將繼續(xù)為大家介紹 MQ 的安全性實(shí)現(xiàn) ,MQ 與傳統(tǒng) CICS 應(yīng)用的連接 , 使用 MQ 實(shí)現(xiàn) SOA 服務(wù) ,MQ 應(yīng)用監(jiān)控以及企業(yè)級應(yīng)用設(shè)計(jì)構(gòu)架技術(shù)方案。 |
|