基于內容的過(guò)濾器從內容上對信息進(jìn)行簡(jiǎn)化處理。舉例來(lái)說(shuō),一個(gè)顯示程序可能只關(guān)心接近機場(chǎng)的飛機位置?;趦热莸倪^(guò)濾器就會(huì )篩選出所有離機場(chǎng)很遠的飛機。本文引用地址:http://dyxdggzs.com/article/201612/330174.htm3. 性能提升技術(shù)
一輛無(wú)論構造多么合理的汽車(chē),如果沒(méi)有強力的引擎就不可能發(fā)揮出優(yōu)良的性能。同樣,消息中間件也需要一些特征與技術(shù)以獲得最佳性能。其中以下方面最為重要:組播技術(shù)、消息批處理功能、消息分段技術(shù)、異步遠程拷貝和傳送過(guò)程中的零拷貝訪(fǎng)問(wèn)。
4. 實(shí)時(shí)判定機制
實(shí)時(shí)并不是簡(jiǎn)單的速度快而已。為實(shí)現穩定的實(shí)時(shí),系統必須同時(shí)穩定而高速。實(shí)時(shí)判定機制決定了每次系統運算時(shí)的穩定性。一個(gè)實(shí)時(shí)判定系統必須在每個(gè)運算上花費同樣的時(shí)間。
然而,并不是你做的那些事決定實(shí)時(shí)操作能力,而是你不做的那些事決定了實(shí)時(shí)操作能力。因此,實(shí)時(shí)的滿(mǎn)足需要處理器、資源定位和管理上的穩定性與一致性。內存分配、等待周期、關(guān)閉中斷或者其它的任何程序操作都會(huì )引發(fā)無(wú)法預料的行為。為保證穩定性,每個(gè)操作必須以同樣的方式同樣的時(shí)間進(jìn)行。對于一個(gè)包含多個(gè)步驟的操作,每一步都必須是可靠的,因為其中可能包含不可靠的信息。如果某一步是不可靠的,那整個(gè)操作鏈都會(huì )變?yōu)椴豢煽康摹?br />因為基礎硬件設施一般都是非常穩定的,因此系統的不確定因素源一般在操作系統、中間件或應用邏輯/代碼中。實(shí)時(shí)操作系統是一項大受好評的技術(shù)。應用程序必須本著(zhù)傳送穩定結果的理念進(jìn)行設計。然而,在許多系統中,中間件是實(shí)時(shí)運算的關(guān)鍵。
這意味著(zhù)在實(shí)際應用中消息中間件必須:
- 使用異步操作技術(shù)而非阻塞操作。多線(xiàn)程技術(shù)為并發(fā)和多核架構提供了機會(huì )。
使用多線(xiàn)程技術(shù)并發(fā)處理緊急任務(wù)。仔細挑選架構與優(yōu)先技術(shù)以避免線(xiàn)程沖突,并使用看門(mén)狗(watchdogs)和延時(shí)設定(timeouts)監控和維持應用程序正常運行。
在穩定的基礎設施上執行(實(shí)時(shí)操作系統、實(shí)時(shí)Java虛擬機,實(shí)時(shí)中間件組件)。
謹慎地控制資源??刂苿?dòng)態(tài)內存的使用,限制關(guān)鍵路徑外的內存分配。
進(jìn)行任何存儲訪(fǎng)問(wèn)時(shí)盡量使用內存緩存而非直接進(jìn)行磁盤(pán)操作。
為中間件的可編程應用擴展提供“進(jìn)程內(in-process)”機制,比如加載DLL文件或Java類(lèi)。
5. 度量指標
可以認為,優(yōu)秀的度量指標是決定中間件最終性能的唯一條件。然而,定義消息中間件的特征遠比看起來(lái)復雜得多。
大多廠(chǎng)商只提供一些關(guān)于消息處理能力的信息,類(lèi)似每秒處理多少消息或字節等。還有少數廠(chǎng)商提供關(guān)于延遲的測試數據(從發(fā)送方到接收方的端對端延遲)。幾乎沒(méi)有廠(chǎng)商會(huì )提供關(guān)于可擴展性和不穩定同步的度量指標,包括隨著(zhù)系統發(fā)展性能的變化、負載增加,或者消息之間的變更。并且,這些結果很大程度上依賴(lài)于計算機和網(wǎng)絡(luò )硬件設施,以及測試方案。
比如,廠(chǎng)商可能會(huì )提供關(guān)于執行時(shí)間和處理能力的數據,聲稱(chēng)他們的產(chǎn)品可以以低于0.5毫秒的時(shí)間完成一條消息的傳送,并可以每秒傳送1000000條消息,但并不會(huì )指出是否可以用一個(gè)應用程序同時(shí)完成這兩項任務(wù)。甚至,都不會(huì )指明這個(gè)執行時(shí)間是否代表理想情況下的最佳性能,是平均時(shí)間還是可以保證大部分消息(比如99.99%)在這個(gè)時(shí)間內傳送等。消息容量和內容類(lèi)型(不透明的字節、字符串或復合類(lèi)型)都有極大的影響。比如,如果指的是沒(méi)有實(shí)際意義的四個(gè)字節的消息,“條/秒”也就沒(méi)多少參考價(jià)值。如果不考慮類(lèi)型轉換(marshaling,一種稱(chēng)為列集轉換方式),每秒多少字節的數據也沒(méi)有意義。比如,傳送raw XML字符串的低效率數據轉換方式可以每秒傳送許多字節。然而,使用經(jīng)過(guò)壓縮處理的XML語(yǔ)言或二進(jìn)制格式的高效轉換方式在傳送實(shí)際消息時(shí)要快得多。這種例子數不勝數。
既然不存在標準的實(shí)時(shí)中間件性能的測試程序,我們就只有以下選擇:依靠廠(chǎng)商給的數據,開(kāi)發(fā)自己的度量標準,以及通過(guò)使用中間件的應用程序來(lái)進(jìn)行判斷。第一個(gè)過(guò)于模糊,第二個(gè)費時(shí)且成本高,而第三個(gè)是主觀(guān)判斷。
通過(guò)上面的說(shuō)明,了解以下指標可能會(huì )有助于評估中間件的性能,并可最低限度地從提供實(shí)時(shí)SOA系統的廠(chǎng)商處獲得如下信息:基于消息容量的處理能力、基于CPU使用情況的處理能力、消息批處理能力和基于穩定性的最佳表現;基于消息內容的執行時(shí)間、基于處理能力的執行時(shí)間等。
比如,圖3到圖7顯示了兩種不同中間件架構處理能力與執行時(shí)間的比較圖:一個(gè)星型構架(JMS)和一個(gè)對等結構的網(wǎng)絡(luò )(DDS)。
可以參考由RTI Data Distribution Service(運行環(huán)境數據分發(fā)服務(wù))提供的更多詳細的數據。運行平臺是使用2GHz雙核AMD皓龍的計算機,操作系統是紅帽Linux4.0企業(yè)版。

圖3

圖4

圖5

圖6

圖7
總結
要想贏(yíng),就必須給賽車(chē)安裝最好的組件。同樣,性能關(guān)鍵的SOA系統也必須建立在消息處理、事件處理引擎和數據庫的最佳組合上。在這些SOA基礎組件中,消息中間件是最重要的,因為它是所有其它組件的交互中介。
如何確定最好的中間件呢?
首先,考慮架構。選擇最符合需求的架構。架構不合適,系統就不可能有優(yōu)良的表現性能。
其次,選擇滿(mǎn)足需求的服務(wù)質(zhì)量控制。對網(wǎng)絡(luò )和數據傳送的有效控制將極大地影響到所有組件的工作效率。
第三,選擇適合應用程序的、包含性能提升技術(shù)的中間件。比如組播技術(shù),就可以在同等負載下極大地提高網(wǎng)絡(luò )的“扇出(fan out)”能力。
第四,如果系統必須在一定狀況下保持性能穩定,那就在設計方案中保證至少關(guān)鍵組件可以在這些實(shí)時(shí)環(huán)境中穩定運行。沒(méi)有其它可以保證系統穩定響應的途徑。
最后,基于以上了解,選擇包含對應用程序最為重要的指標的中間件。
明白了以上所有因素,你就離建立最佳性能的SOA系統更接近了一步。
評論