消息通信
2012年01月13日 點擊數(shù): 19637 字體: 大 中 小
1.1消息中間件
中間件(middleware)是基礎軟件的一大類,屬于可復用的軟件范疇。中間件在操作系統(tǒng)軟件,網(wǎng)絡和數(shù)據(jù)庫之上,應用軟件之下,總的作用是為處于自己上層的應用軟件提供運行于開發(fā)的環(huán)境,幫助用戶靈活、高效的開發(fā)和集成復雜的應用軟件。中間件是位于平臺(硬件和操作系統(tǒng))和應用之間的通用服務,這些服務具有標準的程序接口和協(xié)議。針對不同的操作系統(tǒng)和硬件平臺,它們可以有符合接口和協(xié)議規(guī)范的多種實現(xiàn)。也許很難給中間件一個嚴格的定義,但中間件應具有如下的一些特點:
滿足大量應用的需要Ø
運行于多種硬件和OSØ平臺
支持分布計算,提供跨網(wǎng)絡、硬件和OS 平臺的透明性的應用或服務的交互支持標準的協(xié)議Ø
支持標準的接口Ø
IDC 對中間件的定義為:中間件是一種獨立的系統(tǒng)軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源,中間件定位于客戶機服務器的操作系統(tǒng)之上,管理計算機資源和網(wǎng)絡通信。因而中間件是指一類軟件,是基于分布式處理的軟件,最突出的特點是其網(wǎng)絡通信功能。也可認為中間件是位于平臺和應用之間的通用服務,這些服務具有標準的程序接口和協(xié)議。針對不同的操作系統(tǒng)和硬件平臺,可以有符合接口和協(xié)議的多種實現(xiàn)。
面向消息的中間件:
MOM 指的是利用高效可靠的消息傳遞機制進行平臺無關的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。通過提供消息傳遞和消息排隊模型,它可在分布環(huán)境下擴展進程間的通信,并支持多通訊協(xié)議、語言、應用程序、硬件和軟件平臺。目前流行的MOM 中間件產(chǎn)品有IBM 的MQSeries、BEA 的MessageQ 等。
主要特點:
通訊程序可在不同的時間運行程序不在網(wǎng)絡上直接相互通話,而是間接地將消息放入消息隊列,因為程序間沒有直接的聯(lián)系。所以它們不必同時運行。消息放入適當?shù)年犃袝r,目標程序甚至根本不需要正在運行;即使目標程序在運行,也不意味著要立即處理該消息。對應用程序的結構沒有約束在復雜的應用場合中,通訊程序之間不僅可以是一對一的關系,還可以進行一對多和多對一方式,甚至是上述多種方式的組合。多種通訊方式的構造并沒有增加應用程序的復雜性。程序?qū)⑾⒎湃胂㈥犃谢驈南㈥犃兄腥〕鱿磉M行通訊,與此關聯(lián)的全部活動,比如維護消息隊列、維護程序和隊列之間的關系、處理網(wǎng)絡的重新啟動和在網(wǎng)絡中移動消息等是MOM 的任務,程序不直接與其它程序通話,并且它們不涉及網(wǎng)絡通訊的復雜性
1.2 消息中間件的傳遞模型
消息中間件一般有兩種傳遞模型:點對點模型(PTP)和發(fā)布-訂閱模型(Pub/Sub)。
1.2.1 點對點模型(PTP)
點對點模型用于消息生產(chǎn)者和消息消費者之間點到點的通信。消息生產(chǎn)者將消息發(fā)動到由某個名字標識的特定消費者。這個名字實際上對應于消息服務中的一個隊列(Queue),在消息傳動給消費者之前它被存儲在這個隊列中。隊列可以是持久的,以保證在消息服務出現(xiàn)故障時仍然能夠傳遞消息。
1.2.2 發(fā)布-訂閱模型(Pub/Sub)
發(fā)布-訂閱模型用稱為主題(topic)的內(nèi)容分層結構代替了PTP 模型中的惟一目的地,發(fā)送應用程序發(fā)布自己的消息,指出消息描述的是有關分層結構中的一個主題的信息。希望接收這些消息的應用程序訂閱了這個主題。訂閱包含子主題的分層結構中的主題的訂閱者可以接收該主題和其子主題發(fā)表的所有消息。
1.3 海量用戶支撐
系統(tǒng)軟集群
為了使得多臺系統(tǒng)能表現(xiàn)的如同一臺服務器系統(tǒng)一樣,那么就必須具備一個基本條件,就是這么多臺服務器系統(tǒng),每臺單獨運行,都能提供完全一致的服務,否則,不同的服務器提供不一致的服務,又如何對外表現(xiàn)出完全一致的表現(xiàn)呢?這里,最簡單的例子是Web服務器,我們可以設置Web服務器,使多個Web服務器中保存的網(wǎng)頁文件內(nèi)容完全一致,這樣,無論訪問哪個服務器,只要使用同樣的URL就能得到同樣的結果。
因此,在這個階段要保證內(nèi)容的一致性,就需要使用諸如服務器之間的同步鏡像、網(wǎng)絡存儲系統(tǒng)NAS或SAN,數(shù)據(jù)庫的同步復制等等技術。
1.3.1 實現(xiàn):任務調(diào)度
當所有的服務器都具備一致性的表現(xiàn),接下來的任務就是將任務按照一定的方式分配給這
些服務器,這就是任務調(diào)度。
實現(xiàn)任務調(diào)度首先需要要將任務盡可能的按照小粒度分割,每個粒度應該是能夠在不同服務器部分上單獨執(zhí)行的最小單位。粒度劃分的越小,任務分割得越平均,因而整體效果就越好。但粒度的劃分是有一定條件的,粒度越小,粒度之間的關聯(lián)就越緊密,例如在SMP多處理器的計算機系統(tǒng)中,任意一個線程都可以在任一個處理器上執(zhí)行,因此執(zhí)行粒度可以劃分為線程,但是線程之間是共享內(nèi)存的,這已經(jīng)在理論上提出,并在并行計算機上實現(xiàn),但在不同服務器之間目前還是不現(xiàn)實的。
由于大多數(shù)網(wǎng)絡服務都是基于TCP網(wǎng)絡連接的,因此最簡單的考慮,可以按照TCP連接劃分任務粒度,這適合包括Web服務,數(shù)據(jù)庫連接等絕大多數(shù)情況。實現(xiàn)任務調(diào)度的方式有很多種,一種方法是在系統(tǒng)內(nèi)部完成,所有的服務器能夠自我協(xié)調(diào),完成任務調(diào)度,這種方法要涉及所有的服務器,依賴于具體的應用系統(tǒng),因而更為復雜。另一種方法是不在服務器之間實現(xiàn)調(diào)度,而依賴于外部的任務調(diào)度設備執(zhí)行調(diào)度。
無論那種任務調(diào)度方式,最大的問題就是害怕任務調(diào)度本身帶來的額外消耗或性能瓶頸,因此使用硬件設備和單一的高效率系統(tǒng),作為外部任務調(diào)度設備,成為了集群的首選方案。
1.3.2 外部任務調(diào)度:負載平衡和虛擬服務器
使用外部任務調(diào)度設備對任務按照網(wǎng)絡連接進行分配,這種情況通常被稱為網(wǎng)絡服務器的負載平衡。外部的任務調(diào)度設備有很多種,例如基于BSD/OS的F5,CISCO的LocalDirector,以及一些七層交換機,例如Foundry的交換機等等。目前,除了一些基于硬件交換機設備之外,完全軟件的實現(xiàn)中最為流行的就是LVS,Linux Virtual Server,作為一個開放源代碼的項目,他得到了Linux社區(qū)的大力支持,并用于大部分Linux集群設備中。LVS是由國防科技大學的章文松提出的一個開放源代碼項目,事實上這也是國內(nèi)Linux開發(fā)工作中最被國際認可的一個工作,這也標志著國內(nèi)在這個方向上的研究并不次于國際同行。
LVS中最為優(yōu)秀的特點是實現(xiàn)了策略路由的觀念,它允許一個TCP連接由任務分配設備分配給后端服務器中之后,后端服務器使用不同的路由,不再經(jīng)過任務分配器,而是直接返回給客戶,這種方式需要后端服務器也是Linux設備,因此不是簡單的任務調(diào)度。
1.3.3 服務器負擔:容錯與監(jiān)
任務調(diào)度的關鍵是將所有的任務平均的分配給所有的服務器,如果不能做到合理的分配,就能出現(xiàn)部分服務器上的擁塞現(xiàn)象,此時還可能有后臺服務器類型差異造成的處理能力的不一致等情況。
為了達到這個任務分配的目的,必須使用一種方法來獲得服務器狀態(tài),這里就有不同的幾種方法。最簡單的方法是按照當前服務器的任務數(shù)量來衡量服務器負荷,通常就是按照網(wǎng)絡連接的數(shù)量來衡量,這種方法應該是比較模糊的,因此不同的連接對服務器造成的壓力是不同的,例如一個靜態(tài)網(wǎng)頁的處理和一個后臺CGI程序的處理,服務器負擔就絕對不同。
一些負載均衡設備通過測量設備對網(wǎng)絡連接響應時間來判斷服務器的負荷,這基本上能夠反映一些情況,但也并非絕對如此,因為優(yōu)秀的服務器對于基本的網(wǎng)絡響應是迅速的,但對于后面的處理過程則受系統(tǒng)負荷的影響。因此,一些系統(tǒng)甚至引入了客戶/服務器機制,在后臺服務器中安裝代理來完成探測系統(tǒng)性能的任務。
當任務調(diào)度設備能夠精確的了解服務器負荷的時候,它顯然就能夠達到了解后臺服務器的可用性,就是說任務調(diào)度設備能夠檢測出某些后臺服務器不能正確運行,從而避開這個服務器,將任務分配給其他設備,達到容錯的目的。
1.3.4 共享數(shù)據(jù):會話管理
還是以Web訪問為例,對于普通的網(wǎng)頁,不同的HTTP連接就可以認為是不同的任務。但是,對于更復雜的應用,例如需要用戶登錄,并根據(jù)不同用戶提供不同服務的情況呢?此時,如果仍然還是要把不同的HTTP連接看作不同的任務,那么這些連接之間實際上還是有一定關系的,事實上每個用戶從登錄到退出,可以被看作一個完整的HTTP會話。
由于這些會話必須保存的數(shù)據(jù)比較少,例如僅僅是用戶名和簡單的一些秘密設置,任務調(diào)度的時候可以不考慮這些會話,那么就可能發(fā)生這樣的情況,同一個會話的不同HTTP連接可能在不同的后臺服務器上進行處理,因此這就需要進行這些服務器之間的數(shù)據(jù)共享。數(shù)據(jù)共享可以通過多種方式,通過共享的存儲空間,通過獨立的服務程序,通過數(shù)據(jù)庫,甚至通過共享網(wǎng)絡間內(nèi)存等等。
雖然任務調(diào)度程序可以不理會這種會話,不同服務器之間可以共享,但如果能夠支持會話功能,使得同一個會話可以被同一個服務器所處理,這樣會帶來效率上的提高。因此,一些任務調(diào)度設備提出了“粘滯”的概念,能夠根據(jù)Cookie或其他標記判斷會話,并導向同一個服務器。
1.3.5 相關技術
雖然目前用于解決網(wǎng)絡服務的集群技術,在技術層次上比較簡單,事實上只是應用了此前并行計算技術研究的一些簡單方面,但在實用化方面的作用還是很明顯的。但在理論上,目前所使用網(wǎng)絡服務器集群技術還是有很大的挖掘之處,例如,目前的任務調(diào)度的粒度是基于TCP連接的,如何更細化。目前,在并行計算領域,人們使用PVM和MPI,允許運行在不同計算機上的多個進程進行協(xié)同,在進程之內(nèi)可以進行任務調(diào)度,粒度被切割到更細致的計算單元,如果能將這些概念應用于集群系統(tǒng),必然能更好的解決對大負載任務的處理任務,縮減處理時間。
此外,目前一旦任務調(diào)度設備將任務分配給一個服務器,那么這個任務就一定在這個服務器上運行,直到完成。有時,人們需要將一個任務從一個服務器透明的遷移到另一個服務器正常執(zhí)行,目前,在Linux上的Mosix能達到這個目標。事實上,PVM、MPI、Mosix等等技術,都是構建用于計算目的的Linux集群計算機的有效工具。用于處理計算的Linux集群計算機是由多臺Linux節(jié)點構成的超級計算機,主要用來處理計算任務,他們處理的任務通常要比用于網(wǎng)絡服務的集群計算機更為復雜,使得節(jié)點之間的I/O非常頻繁,造成了相當多的額外負荷(例如一個進程從一個節(jié)點遷移到另一個節(jié)點上的網(wǎng)絡負荷)。
1.4 網(wǎng)絡適應性
計算機連接的方式叫做“網(wǎng)絡拓撲結構”(Topology)。網(wǎng)絡拓撲是指用傳輸媒體互連各種設備的物理布局,特別是計算機分布的位置以及電纜如何通過它們。設計一個網(wǎng)絡的時候,應根據(jù)自己的實際情況選擇正確的拓撲方式。每種拓撲都有它自己的優(yōu)點和缺點。
網(wǎng)絡拓撲的分類如下:
1.4.1 星型結構
星型結構是指各工作站以星型方式連接成網(wǎng)。網(wǎng)絡有中央節(jié)點,其他節(jié)點(工作站、服務器)都與中央節(jié)點直接相連,這種結構以中央節(jié)點為中心,因此又稱為集中式網(wǎng)絡。它具有如下特點:結構簡單,便于管理;控制簡單,便于建網(wǎng);網(wǎng)絡延遲時間較小,傳輸誤差較低。但缺點也是明顯的:成本高、可靠性較低、資源共享能力也較差。
1.4.2 環(huán)型結構
環(huán)型結構由網(wǎng)絡中若干節(jié)點通過點到點的鏈路首尾相連形成一個閉合的環(huán),這種結構使公共傳輸電纜組成環(huán)型連接,數(shù)據(jù)在環(huán)路中沿著一個方向在各個節(jié)點間傳輸,信息從一個節(jié)點傳到另一個節(jié)點。
環(huán)型結構具有如下特點:信息流在網(wǎng)中是沿著固定方向流動的,兩個節(jié)點僅有一條道路,故簡化了路徑選擇的控制;環(huán)路上各節(jié)點都是自舉控制,故控制軟件簡單;由于信息源在環(huán)路中是串行地穿過各個節(jié)點,當環(huán)中節(jié)點過多時,勢必影響信息傳輸速率,使網(wǎng)絡的響應時間延長;環(huán)路是封閉的,不便于擴充;可靠性低,一個節(jié)點故障,將會造成全網(wǎng)癱瘓;維護難,對分支節(jié)點故障定位較難。
1.4.3 總線型結構
總線結構是指各工作站和服務器均掛在一條總線上,各工作站地位平等,無中心節(jié)點控制,公用總線上的信息多以基帶形式串行傳遞,其傳遞方向總是從發(fā)送信息的節(jié)點開始向兩端擴散,如同廣播電臺發(fā)射的信息一樣,因此又稱廣播式計算機網(wǎng)絡。各節(jié)點在接受信息時都進行地址檢查,看是否與自己的工作站地址相符,相符則接收網(wǎng)上的信息。
總線型結構的網(wǎng)絡特點如下:結構簡單,可擴充性好。當需要增加節(jié)點時,只需要在總線上增加一個分支接口便可與分支節(jié)點相連,當總線負載不允許時還可以擴充總線;使用的電纜少,且安裝容易;使用的設備相對簡單,可靠性高;維護難,分支節(jié)點故障查找難。
1.4.4 分布式結構
分布式結構的網(wǎng)絡是將分布在不同地點的計算機通過線路互連起來的一種網(wǎng)絡形式,分布式結構的網(wǎng)絡具有如下特點:由于采用分散控制,即使整個網(wǎng)絡中的某個局部出現(xiàn)故障,也不會影響全網(wǎng)的操作,因而具有很高的可靠性;網(wǎng)中的路徑選擇最短路徑算法,故網(wǎng)上延遲時間少,傳輸速率高,但控制復雜;各個節(jié)點間均可以直接建立數(shù)據(jù)鏈路,信息流程最短;便于全網(wǎng)范圍內(nèi)的資源共享。缺點為連接線路用電纜長,造價高;網(wǎng)絡管理軟件復雜;報文分組交換、路徑選擇、流向控制復雜;在一般局域網(wǎng)中不采用這種結構。
1.4.5 樹型結構
樹型結構是分級的集中控制式網(wǎng)絡,與星型相比,它的通信線路總長度短,成本較低,節(jié)點易于擴充,尋找路徑比較方便,但除了葉節(jié)點及其相連的線路外,任一節(jié)點或其相連的線路故障都會使系統(tǒng)受到影響。
1.4.6網(wǎng)狀拓撲結構
在網(wǎng)狀拓撲結構中,網(wǎng)絡的每臺設備之間均有點到點的鏈路連接,這種連接不經(jīng)濟,只有每個站點都要頻繁發(fā)送信息時才使用這種方法。它的安裝也復雜,但系統(tǒng)可靠性高,容錯能力強。有時也稱為分布式結構。
1.4.7 蜂窩拓撲結構
蜂窩拓撲結構是無線局域網(wǎng)中常用的結構。它以無線傳輸介質(zhì)(微波、衛(wèi)星、紅外等)點到點和多點傳輸為特征,是一種無線網(wǎng),適用于城市網(wǎng)、校園網(wǎng)、企業(yè)網(wǎng)。
在計算機網(wǎng)絡中還有其他類型的拓撲結構,如總線型與星型混合。總線型與環(huán)型混合連接的網(wǎng)絡。在局域網(wǎng)中,使用最多的是總線型和星型結構。