林碧霞, 尹治本
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院, 成都 610031)
隨著Internet的高速發(fā)展,網(wǎng)絡(luò)規(guī)模不斷擴大,存儲系統(tǒng)成為Internet背后的功臣,也促成了存儲行業(yè)的高速發(fā)展。存儲業(yè)的發(fā)展,面臨著如何有效地對存儲陣列的性能情況進行評價與分析的問題。因為存儲陣列在不同的業(yè)務(wù)場景下,可能體現(xiàn)出不同的性能,所以如何在不同的業(yè)務(wù)場景下對存儲陣列進行性能測試,從而分析出存儲陣列的性能,成為各廠家在測試過程中的重點與難點。
本文基于某公司的需求構(gòu)建了一個新的網(wǎng)絡(luò)仿真平臺。通過JMX結(jié)合J-Sim,利用模擬各種業(yè)務(wù)場景,對存儲陣列進行性能測試。平臺開發(fā)目的是創(chuàng)建一個可能快速實現(xiàn)上層應(yīng)用模擬的環(huán)境。
JMX[1](Java managem ent Extension)是J2EE中的通用管理規(guī)范,它定義了一套標準的代理和服務(wù),可為應(yīng)用程序植入管理功能的輕型框架。JMX 可以跨越異構(gòu)操作系統(tǒng)平臺、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,從而對網(wǎng)絡(luò)上多種資源(包括應(yīng)用程序、設(shè)備、服務(wù)等)統(tǒng)一進行管理,提供一致的管理視圖。因此逐漸成為管理復(fù)雜軟件系統(tǒng)的優(yōu)秀解決方案[2]。JBoss、IBM 的TivoliJMX和BEA 的Weblogic等商業(yè)軟件已成功的應(yīng)用了JMX,有效地提高了系統(tǒng)的動態(tài)配置和管理能力。
JMX 是一個用來管理網(wǎng)絡(luò)、設(shè)備、應(yīng)用程序等資源的管理體系結(jié)構(gòu)。JMX 采用三級分而治之的體系和結(jié)構(gòu)化方法來降低網(wǎng)絡(luò)管理的復(fù)雜性,每層都是高度組件化的并由良好定義的接口進行劃分。
(1)工具層:可管理端點(設(shè)備、軟件服務(wù)等), 可通過JMX指定的接口被訪問。這是通過創(chuàng)建公開可配置屬性、可訪問操作和事件的Java 對象實現(xiàn)的。這些對象稱為managed Bean(簡稱MBean)。在規(guī)范中將可通過這些對象管理的端點稱為JMX 可管理的資源。
(2)代理層:JMX 代理是軟件組件, 它向遠程管理組件公開一組標準化代理服務(wù), 并通過JMX 可管理資源的MBean 接口直接控制這些資源。實際上, 在JMX 代理內(nèi)可通過能夠動態(tài)地裝入和卸裝MBean的MBean 服務(wù)器來管理MBean。
(3)分布式服務(wù)層:本層定義JMX 管理平臺對代理層進行操作的接口和組件。應(yīng)用程序可以訪問代理或代理組來管理由代理公開的JMX 可管理資源。
為了讓業(yè)務(wù)仿真平臺可以動態(tài)管理,本文提出一種基于JMX 的性能業(yè)務(wù)仿真平臺設(shè)計方案,具有動態(tài)的配置管理能力、動態(tài)的調(diào)度策略選擇機制和可動態(tài)配置的可視化管理視圖。
性能仿真平臺主要用于對存儲設(shè)備進行性能的測試,這些網(wǎng)絡(luò)設(shè)備分布在Internet和Intranet網(wǎng)絡(luò)的環(huán)境中,一般通過HTTP、TCP/IP協(xié)議通信,所以將仿真平臺分為服務(wù)端與測試機端(1對多的關(guān)系)。
系統(tǒng)分為服務(wù)端和測試機端。圖1為仿真圖。
2.2.1 服務(wù)端
在功能上負責(zé)用戶與測試機的圖形界面接口,包括每臺測試機的用例配置、待測試存儲的指定、性能測試的項目、性能分析數(shù)據(jù)、報表的查詢與顯示,并對各測試機的相關(guān)系統(tǒng)故障和告警的查詢與顯示。與一般JMX的應(yīng)用不同,將JMX的MBean Server與HTTP瀏覽服務(wù)器放在這一層,通過多臺測試機同時對存儲進行IO的下發(fā),增加對存儲的壓力。在服務(wù)端采用被動接收來自各測試機的數(shù)據(jù)信息,對每臺測試機發(fā)來的信息進行存儲,顯示瞬時的各臺測試機的統(tǒng)計性能數(shù)據(jù),并打印出相關(guān)性能數(shù)據(jù)曲線,同時對應(yīng)CPU占用過大、系統(tǒng)崩潰等進行告警。
2.2.2 測試機端
仿真平臺的測試機端是核心系統(tǒng)。每臺測試機需要在Server中注冊,通過適配器invoke方法實現(xiàn)對MBean進行調(diào)用,將性能數(shù)據(jù)根據(jù)服務(wù)端設(shè)置的時間段發(fā)給服務(wù)端。測試機端注冊了信息發(fā)送模塊、告警管理、日志管理。根據(jù)需要定義了2種適配器:(1)本地調(diào)用的適配器;(2)基于HTTP的遠程調(diào)用的適配器。每臺測試機根據(jù)分配的用例運行一個核心系統(tǒng),對存儲陣列進行IO的下發(fā)操作,并在納秒級別對信息進行統(tǒng)計匯總,發(fā)送給服務(wù)端。
每個測試機端都運行著一個核心子系統(tǒng),這個子系統(tǒng)使用J-SIM設(shè)計開發(fā)。
J-Sim[3](以前也被稱作JavaSim)是用純Java語言開發(fā)的一種開源的、基于組件合成的網(wǎng)絡(luò)模擬環(huán)境,該環(huán)境建立在組件自治體系結(jié)構(gòu)(Autonomous Component A rchitecture,ACA)和可擴張Internet 網(wǎng)絡(luò)框架(Extensible Interne-tworking Framework,INET)之上。在不同的網(wǎng)絡(luò)場景之下采用“即插即用”的組件疊加方式就可以構(gòu)建出所需要的仿真環(huán)境和網(wǎng)絡(luò)協(xié)議棧,如無線傳感器網(wǎng)絡(luò)。
J-Sim是一個層次化、可擴展的網(wǎng)絡(luò)仿真平臺。在J-Sim平臺下,組件是一個基本的單位。從網(wǎng)絡(luò)環(huán)境的角度看,主機、路由器、TCP / IP協(xié)議等網(wǎng)絡(luò)實體都是組件。而整個平臺是以自治組件框架(ACA)為基礎(chǔ)的,所謂的自治組件架構(gòu)是指它的架構(gòu)思想仿效數(shù)字電路中IC芯片的設(shè)計和制造,一個組件與另一個組件相互獨立。軟件系統(tǒng)由組件有機地組合起來類似于一塊印刷電路板上焊接芯片,甚至在系統(tǒng)運行時還可以添加組件。J- Sim對網(wǎng)絡(luò)環(huán)境的模擬是通過在ACA的基礎(chǔ)上建立可擴展網(wǎng)絡(luò)模擬(INET)來實現(xiàn)的。這個模型采用了基于包的通訊機制。此外,它定義了節(jié)點(主機或路由器)的結(jié)構(gòu)和基本網(wǎng)絡(luò)組件。根據(jù)需要,新定義的網(wǎng)絡(luò)組件都是它們的子類,這些網(wǎng)絡(luò)組件以TCP / IP模型為依據(jù),進行層次化地編寫。對于編寫之后的組件代碼,需要時可以直接調(diào)用,也可以在它的基礎(chǔ)上擴展新的網(wǎng)絡(luò)組件。
J-Sim仿真通過執(zhí)行線程表來實現(xiàn)。仿真運行開始,先構(gòu)建各節(jié)點,隨后目標節(jié)點開始生成監(jiān)測數(shù)據(jù),目標節(jié)點將監(jiān)測數(shù)據(jù)選擇發(fā)送給最佳的傳感器節(jié)點,傳感器節(jié)點獲得數(shù)據(jù)后在匯聚節(jié)點分配的時隙內(nèi)將數(shù)據(jù)上傳。
本仿真平臺的核心子系統(tǒng)包括業(yè)務(wù)場景的抽象,子系統(tǒng)模擬業(yè)務(wù)開發(fā)。目前存儲所涉及的業(yè)務(wù)場景有文件系統(tǒng)業(yè)務(wù)、流媒體業(yè)務(wù)(包括VOD、視頻監(jiān)控等)、數(shù)據(jù)庫業(yè)務(wù)(支持O racle、SQL、My-SQL等)等業(yè)務(wù)場景。比如移動公司所涉及到的業(yè)務(wù)場景。
本平臺業(yè)務(wù)模擬是在對實際測試的具體業(yè)務(wù)進行抽象后,在本仿真平臺上通過在服務(wù)端更改業(yè)務(wù)配置文件(對應(yīng)于測試用例)來實現(xiàn)。
子系統(tǒng)模擬業(yè)務(wù)開發(fā)模塊包括虛擬用戶組(Virtual User G roup)、虛擬機(Virtual Machine)、虛擬資源池(Virtual Resource Poo l)、 監(jiān)視器(Monitor)等。
(1)虛擬用戶組:用戶組是用戶群體行為的發(fā)起源,負責(zé)調(diào)試用戶群體行為、收集用戶的反饋信息,并傳遞給監(jiān)控器。用戶組是由多個用戶組成,并根據(jù)具體用戶是否在進行業(yè)務(wù)操作分為Active user 和 Idle user。通過對存儲陣列所涉及較多的文件系統(tǒng)業(yè)務(wù)、流媒體業(yè)務(wù)、數(shù)據(jù)庫業(yè)務(wù)進行模擬。根據(jù)實際對存儲進行的IO操作,將用戶抽象出來,并將用戶分為用戶群體與單個用戶。通過用戶數(shù)目與用戶行為來模擬真實業(yè)務(wù)。用戶組有一個端口,用于把用戶反饋傳遞給監(jiān)視器。
(2)虛擬機:虛擬機是用于模擬用戶請求的緊急度進行排序和發(fā)送相關(guān)的請求。它負責(zé)任務(wù)的調(diào)試和用戶與資源之間的通信,VM(虛擬機)包括線程池及任務(wù)調(diào)度。用戶與資源之間的任何通信都是以任務(wù)的方式提交給VM調(diào)試。VM主要用于模擬存儲系統(tǒng)的上層業(yè)務(wù)的離散事件模型。
(3)虛擬資源池:對用戶請求的各種資源進行存儲陣列的訪問,并根據(jù)對存儲陣列的資源請求進行相關(guān)性能數(shù)據(jù)的統(tǒng)計與分析。根據(jù)實際業(yè)務(wù)分為:文件系統(tǒng)資源池、多媒體資源池、數(shù)據(jù)庫資源池。資源池端有一個資源代理(Resou rce Agent),用于接受用戶端(User)發(fā)來的創(chuàng)建的資源的類型和數(shù)量,并轉(zhuǎn)發(fā)用戶的具體請求。
(4)監(jiān)視器:根據(jù)多線程調(diào)度,對資源池進行的納秒級別的數(shù)據(jù)進行匯總,并對數(shù)據(jù)進行分類匯總、顯示。
(5)資源代理(Resource Agent):主要功能是根據(jù)用戶請求生成不同的資源池,分發(fā)user請求到不同的資源池里,并控制 user的并發(fā)數(shù)。
(6)資源池(Resource pool):由一系列同類的資源組成,資源池是一個Parent Component,它有兩個控制端口(a.把用戶請求轉(zhuǎn)發(fā)給資源;b. 控制用戶對某個資源的最大連接數(shù))。當(dāng)用戶要操作資源時,必須先與Pool Component取得聯(lián)系,然后Pool Component在資源池里隨機選取一個資源給用戶,增加一個端口,端口數(shù)至少為1,這個默認端口是接受pool Component發(fā)來的有用戶要進行操作的信息,向資源池專門收集統(tǒng)計信息的端口(statistic port)發(fā)送信息。
Resource Port是在用戶和資源池通信的過程中動態(tài)生成的一組端口,用來與資源進行通信。
Fork Port用來接收Link發(fā)送給自己的fork事件,從而產(chǎn)生不同的用戶。
本文利用JMX的動態(tài)配置管理能力、動態(tài)調(diào)度策略選擇機制開發(fā)了服務(wù)端與測試機端,測試機端利用J-Sim模擬業(yè)務(wù)框架進行開發(fā),從而讓本業(yè)務(wù)仿真系統(tǒng)具有動態(tài)配置、更高的可維護性和擴展性。本業(yè)務(wù)仿真平臺已實現(xiàn),在某公司的性能測試工作中投入使用,節(jié)約了人力、物力和財力,并且達到了較高的置信度。
[1]廖 淵,王保進,李明樹,等. 智能應(yīng)用服務(wù)協(xié)議iASP 的設(shè)計和實現(xiàn)[J]. 計算機工程與設(shè)計,2003,24(12):13-17.
[2] 廖 淵,李明樹,王 青. 基于Linux 的網(wǎng)絡(luò)計算機服務(wù)器的設(shè)計與實現(xiàn)[J]. 計算機工程與應(yīng)用, 2003,39(14):12-16.
[3]ACA:The autonomous component architecture[EB/OL].http://www.j-sim.org/whitepapers/aca.html,2003.