夏秀峰,張 羽
(1.沈陽航空航天大學 遼寧省通用航空重點實驗室,遼寧 沈陽110136;2.沈陽航空航天大學 計算機學院,遼寧 沈陽110136)
目前,PDM (product data management)系統均采用基于RDB (relational database)實現,且采用獨立文件服務器存儲產品數據。隨著制造企業產品數據的不斷積累,面對海量數據高效存儲與訪問要求,傳統存儲方式成為制約PDM 系統性能的瓶頸之一。另一方面,RDB 橫向擴展性差,且隨MBD (model based definition)/MBE (model based enterprise)技術的實施,PDM 數據的結構特征越來越弱,因此使用NOSQL 數據庫存儲文件元數據信息,將云存儲技術應用于PDM,構建企業私有云環境下的PDM文件系統,在提升PDM 文件讀寫性能的同時,使PDM 文件系統具有更好的健壯性和擴展性。
Hadoop[1,2]是一個優秀的開源云計算平臺,以HDFS(Hadoop distributed file system)和MapReduce分布式計算框架為核心。其中,HDFS作為GFS (Google file system)的開源實現是Hadoop數據存儲的基礎。針對HDFS負載均衡的研究已經取得一些成果?,F有研究多是基于數據節點存儲空間的負載均衡,通過合理的數據塊分布實現數據節點的負載均衡。在PDM 中,由于用戶對歷史產品數據的訪問大大少于對新產品數據的訪問,因此可能會出現數據節點存儲數據量相同,但數據節點用戶請求量相差較大的現象,使某些數據節點處于過載狀態,而其它數據節點處于低載或空載狀態。
本文提出一種基于負載信息的文件讀取均衡算法,算法使用動態負載均衡技術,即客戶端根據數據節點負載信息動態創建文件讀取請求,避免用戶請求過度集中于某些數據節點,較好實現數據節點負載均衡,并使用戶等待時間明顯縮短。
通常,集群負載均衡可分為靜態和動態兩種方式。靜態負載均衡算法無需根據集群運行狀態進行任務的調整;動態負載均衡在系統運行過程中根據各節點的資源利用情況,動態調整分配給各節點的任務。文獻 [3]對集群文件服務系統中常見的負載均衡算法進行了詳細介紹。
靜態負載均衡不考慮當前所有連接狀態及各節點之間當前的負載情況。由于無需額外獲取服務器負載信息,任務分配與系統當前狀態無關,造成任務分配具有盲目性的特點,因而導致負載均衡效果不理想。文獻 [4]對負載均衡算法進行了詳細介紹并對比優缺點。
動態負載均衡根據集群各節點當前狀態進行任務的動態分配,負載均衡效果明顯優于靜態負載均衡方式,但如果算法設計不合理容易導致負載均衡失敗并增加集群的額外開銷。文獻 [5]利用自適應的反饋機制,有效降低獲取負載信息的額外開銷。文獻 [6]提出一種改進的基于反饋的負載均衡算法,在考慮服務節點真實負載,處理能力的基礎上,盡量簡化負載均衡器的任務分配算法。
文獻 [7,8]分別對Hadoop默認負載均衡算法進行改進,經實驗對比數據節點存儲空間使用更加平均,實現了數據節點存儲空間的負載均衡。文獻 [9]建立基于控制變量的數據負載均衡數學模型,通過控制變量動態分配網絡帶寬以實現數據負載均衡。文獻 [10]提出基于結點網絡距離與數據負載計算每個結點的調度評價值,實現數據放置負載均衡的同時保證了良好的數據傳輸性能。
本文選用動態負載均衡方式進行請求分配,為確定某一時刻數據節點的負載大小,需要對數據節點負載情況進行計算。而負載評價因素的選取則直接影響動態負載均衡性能的好壞。①由于本文以企業私有云環境下PDM 文件系統動態負載均衡為研究背景,對數據節點的壓力負載主要是數據I/O 操作,所以將硬盤使用率作為第一個評價因素;②由于數據節點需要執行MapReduce任務,因此將CPU做為第二個評價因素;③分布式文件系統通過網絡為用戶提供服務,網絡帶寬的使用率影響著數據節點響應時間,因此將網絡帶寬作為最后一個評價因素。由此得出數據節點負載評價函數如式 (1)所示

式中:U(Disk)——硬盤使用率,U(CPU)——CPU 使用率,U(Net)——上行網絡帶寬使用率。U(Node)——負載大小,U(Node)數值越大代表數據節點負載越重。其中λ1、λ2、λ3為各評價因素的權重因子,且λ1+λ2+λ3=1。
HDFS自帶的讀取算法 (以下簡稱默認算法)中,選擇某個數據節點提供服務需要通過排序與選擇兩個階段完成。通過循環執行排序算法和選擇算法,為文件的每個數據塊選擇合適的數據節點向用戶提供服務。默認排序算法沒有考慮數據節點的實際負載情況,僅能隨機選擇某個數據節點提供服務,因而負載均衡效果較差。同時默認算法使用順序讀取方式限制了數據節點的選擇范圍,導致用戶請求的過度集中造成數據節點過載現象的出現。
針對上述問題,提出一種基于負載信息的文件讀取均衡算法。該算法采用動態負載均衡方式,使用數據節點負載評價函數為動態分配請求提供依據,并且通過非順序請求方式打破對數據節點選擇的限制,擴大數據節點選擇范圍。算法將動態負載均衡技術與非順序請求相結合,最終實現集群的動態負載均衡。
面對用戶大量并發請求,順序讀取方式限制了數據節點選擇范圍,導致請求集中于保存某些數據塊副本的節點上。而非順序請求方式可以擴大數據節點的選擇范圍,存儲文件數據塊副本的所有節點均是選擇對象。PDM 系統中,用戶的一次訪問要求獲得文件的整體,并不關心文件數據塊的讀取順序,這種特點使非順序讀取成為可能。
算法的基本思想是,通過非順序請求方式增加數據節點的選擇對象之后,使用負載評價函數確定各數據節點負載大小,根據負載信息優先選擇低負載數據節點提供服務,從而實現集群的負載均衡。
根據算法的基本思想,下面給出基于負載信息的文件讀取均衡算法描述:
(1)根據用戶請求獲取請求文件信息,信息包括文件數據塊與數據節點存儲關系、文件長度。
(2)根據文件系統元信息為保存有請求文件數據塊的節點建立臨時映射,映射記錄數據節點自身與存儲請求文件數據塊的關系。
(3)使用集合結構記錄文件數據塊,用于判斷文件所有數據塊是否讀取完成。
(4)判斷文件數據塊是否全部讀取,如果是則轉(11)。
(5)獲取保存有文件數據塊節點的負載信息,使用集合記錄節點負載信息。
(6)計算節點平均負載,從負載信息集合中刪除大于平均負載的數據節點。
(7)從負載信息集合中選擇一個數據節點提供服務。
(8)通過數據節點與數據塊的臨時映射,選擇一個數據塊為目標進行數據讀取。
(9)將讀取數據塊從所在數據節點的臨時映射中刪除。
(10)從數據塊讀取記錄中刪除讀取完成的數據塊,跳至 (4)。
(11)文件讀取結束。
算法的偽代碼如下。
輸入:文件路徑src
初始化:


為驗證算法的有效性,實驗使用一臺曙光A620r-G 服務器、兩臺曙光A840r-G 高性能服務器搭建分布式環境,存儲設備為曙光DS200-N10 磁盤陣列,Hadoop 版本為1.2.1。利用虛擬化技術創建8個數據節點,各數據節點網絡帶寬為100 Mbps。使用PC 作為客戶端模擬用戶并發請求文件,每個用戶網絡帶寬為10 Mbps,請求文件大小為271 MB。
圖1為用戶平均等待時間的對比,不難看出,隨著用戶并發訪問數量的不斷增加,所提算法的性能優勢逐漸體現出來。模擬20 個用戶并發請求時,集群處于低負載狀態。此時兩種算法的用戶平均等待時間區別較小。當模擬80個用戶并發請求時,集群處于高負載狀態。由于默認算法負載均衡效果不理想,未能充分利用集群中數據節點資源,與所提算法相比用戶平均等待時間明顯增加。

圖1 用戶平均等待時間對比
模擬20個用戶并發請求文件時默認算法數據節點負載信息如圖2所示。由于默認算法順序請求文件數據塊,用戶請求集中在存儲數據塊副本的3個數據節點上。由于用戶請求數量較少集群各數據節點處于低負載狀態,因此并未出現數據節點過載現象。
模擬20個用戶并發請求時所提算法數據節點負載信息如圖3所示。所提算法根據數據節點負載信息動態分配用戶請求,從而提高集群數據節點利用率。與默認算法相比新算法能夠充分利用多個數據節點,因此降低了數據節點的負載,但低負載情況下兩種算法用戶平均等待時間差別較小。

圖2 默認算法數據節點負載信息

圖3 所提算法數據節點負載信息
模擬80個用戶并發請求時默認算法數據節點負載信息如圖4所示。集群處于高負載狀態下數據節點負載相差較大,集群數據節點多處于空載狀態。由于數據節點系統資源嚴重浪費,因此用戶平均等待時間大幅增加。

圖4 默認算法數據節點負載信息
模擬80個用戶并發請求時新算法數據節點負載信息如圖5所示。集群處于高負載狀態下,所提算法充分利用集群數據節點資源實現了集群的負載均衡。與默認算法相比用戶平均等待時間明顯縮短。
由于PDM 是裝備制造企業的核心軟件,在每個時刻,往往有幾百個用戶同時訪問,此時,所提算法的優勢將更加明顯。

圖5 所提算法數據節點負載信息
本文分析了PDM 文件請求的特點,并提出一種基于負載信息的文件讀取均衡算法。該算法將動態負載均衡技術與非順序請求方式有效結合,增加了用戶請求節點的數量,避免因用戶請求集中而導致的數據節點過載問題的發生,從而實現集群的負載均衡。通過實驗對比,在低負載和中度負載情況下負載均衡效果比默認算法有所提高,在高負載情況下負載均衡效果提升明顯,解決了PDM 數據高并發條件下存儲與訪問效率低下的問題。
[1]Borthaur D.The Hadoop distributed file system:Architecture and design [EB/OL].[2013-04-08].http://hadoop.apche.org/docs/r1.2.1/hdfs_design.html.
[2]Jeffrey Shafer,Scott Rixner,Alan L Cox.The Hadoop distributed filesystem:Balancing portability and performance [C]//Proc of ISPASS.Piscataway,NJ:IEEE,2010:122-133.
[3]LIU Enhai,LI Wei,ZHANG Suqi,et al.Research of load balancing algorithm in cluster file service system [J].Computer Engineering and Design,2013,34 (8):2755-2758(in Chinese).[劉恩海,李偉,張素琪,等.集群文件服務系統中的負載均衡算法的研究[J].計算機工程與設計,2013,34 (8):2755-2758.]
[4]LI Kun,WANG Baijie.Research on load balancing of web server system and comparison of algorithms[J].Computer and Modernization,2009,25 (8):7-10 (in Chinese).[李坤,王百杰.服務器集群負載均衡技術研究及算法比較 [J].計算機與現代化,2009,25 (8):7-10.]
[5]ZHANG Congping,YIN Jianwei.Dynamic load balancing algorithm of distributed file system [J].Journal of Chinese Computer Systems,2011,32 (7):1424-1426 (in Chinese). [張聰萍,尹建偉.分布式文件系統的動態負載均衡算法 [J].小型微型計算機系統,2011,32 (7):1424-1426.]
[6]TIAN Shaoliang,ZUO Ming,WU Shaowei.Improved dynamic load balancing algorithm based on feed_back [J].Computer Engineering and Design,2007,28 (3):572-574 (in Chinese).[田紹亮,左明,吳紹偉.一種改進的基于動態反饋的負載均衡算法 [J].計算機工程與設計,2007,28 (3):572-574.]
[7]LIU Kun,XIAO Lin,ZHAO Haiyan.Research and optimize of cloud data load balancing in Hadoop [J].Microelectronics&Computer,2012,29 (9):18-21 (in Chinese). [劉琨,肖琳,趙海燕.Hadoop中云數據負載均衡算法的研究及優化[J].微電子學與計算機,2012,29 (9):18-21.]
[8]LIU Kun,NIU Wenliang.An improved data load balancing algorithm for Hadoop [J].Journal of Henan Polytechnic University (Natural Science),2013,32 (3):332-336 (in Chi-nese).[劉琨,鈕文良.一種改進的Hadoop數據負載均衡算法 [J].河南理工大學學報 (自然科學版),2013,32 (3):332-336.]
[9]LIN Weiwei,LIU Bo.Hadoop data load balancing method based on dynamic bandwidth [J].Journal of South China University of Technology (Natural Science Edition),2012,40(9):42-47 (in Chinese). [林偉偉,劉波.基于動態帶寬分配的Hadoop數據負載均衡方法 [J].華南理工大學學報 (自然科學版),2012,40 (9):42-47.]
[10]LIN Weiwei.KNN query technology of mobile terminals in highway networks[J].Journal of South China University of Technology (Natural Science Edition),2012,40 (1):152-158 (in Chinese).[林偉偉.一種改進的Hadoop數據放置策略 [J].華南理工大學學報(自然科學版),2012,40 (1):152-158.]