林碧霞, 尹治本
(西南交通大學 信息科學與技術學院, 成都 610031)
隨著Internet的高速發展,網絡規模不斷擴大,存儲系統成為Internet背后的功臣,也促成了存儲行業的高速發展。存儲業的發展,面臨著如何有效地對存儲陣列的性能情況進行評價與分析的問題。因為存儲陣列在不同的業務場景下,可能體現出不同的性能,所以如何在不同的業務場景下對存儲陣列進行性能測試,從而分析出存儲陣列的性能,成為各廠家在測試過程中的重點與難點。
本文基于某公司的需求構建了一個新的網絡仿真平臺。通過JMX結合J-Sim,利用模擬各種業務場景,對存儲陣列進行性能測試。平臺開發目的是創建一個可能快速實現上層應用模擬的環境。
JMX[1](Java managem ent Extension)是J2EE中的通用管理規范,它定義了一套標準的代理和服務,可為應用程序植入管理功能的輕型框架。JMX 可以跨越異構操作系統平臺、系統體系結構和網絡傳輸協議,從而對網絡上多種資源(包括應用程序、設備、服務等)統一進行管理,提供一致的管理視圖。因此逐漸成為管理復雜軟件系統的優秀解決方案[2]。JBoss、IBM 的TivoliJMX和BEA 的Weblogic等商業軟件已成功的應用了JMX,有效地提高了系統的動態配置和管理能力。
JMX 是一個用來管理網絡、設備、應用程序等資源的管理體系結構。JMX 采用三級分而治之的體系和結構化方法來降低網絡管理的復雜性,每層都是高度組件化的并由良好定義的接口進行劃分。
(1)工具層:可管理端點(設備、軟件服務等), 可通過JMX指定的接口被訪問。這是通過創建公開可配置屬性、可訪問操作和事件的Java 對象實現的。這些對象稱為managed Bean(簡稱MBean)。在規范中將可通過這些對象管理的端點稱為JMX 可管理的資源。
(2)代理層:JMX 代理是軟件組件, 它向遠程管理組件公開一組標準化代理服務, 并通過JMX 可管理資源的MBean 接口直接控制這些資源。實際上, 在JMX 代理內可通過能夠動態地裝入和卸裝MBean的MBean 服務器來管理MBean。
(3)分布式服務層:本層定義JMX 管理平臺對代理層進行操作的接口和組件。應用程序可以訪問代理或代理組來管理由代理公開的JMX 可管理資源。
為了讓業務仿真平臺可以動態管理,本文提出一種基于JMX 的性能業務仿真平臺設計方案,具有動態的配置管理能力、動態的調度策略選擇機制和可動態配置的可視化管理視圖。
性能仿真平臺主要用于對存儲設備進行性能的測試,這些網絡設備分布在Internet和Intranet網絡的環境中,一般通過HTTP、TCP/IP協議通信,所以將仿真平臺分為服務端與測試機端(1對多的關系)。
系統分為服務端和測試機端。圖1為仿真圖。
2.2.1 服務端

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