劉沛津 ,王柳月 ,孫昱 ,史潔琳 ,晏東陽
(1.西安建筑科技大學機電工程學院,陜西西安 710055;2.西安建筑科技大學理學院,陜西西安 710055)
現(xiàn)代工業(yè)生產方式中機電設備各單元要素之間呈現(xiàn)出監(jiān)測節(jié)點多元化、空間分布廣泛等特點,因此也被稱為分布式機電系統(tǒng)[1-3]。隨著大型機電設備和集群設備的發(fā)展,產生的數(shù)據流量呈指數(shù)增長,這給傳統(tǒng)的數(shù)據管理系統(tǒng)帶來了數(shù)據存儲和應用的挑戰(zhàn)[4],也使得僅僅依靠集中式存儲模式難以高效存儲管理邊緣設備產生的數(shù)據[5]。為了保證系統(tǒng)數(shù)據安全可靠、高效經濟地利用,在運行過程中亟需高效的數(shù)據存儲與管理模式進行支撐[6-7]。
分布式存儲技術是對數(shù)據進行分組處理后,分別存放在多個存儲設備中,大量低成本的PC服務器通過網絡互聯(lián),對外作為整體提供高效的服務[7]。分布式存儲系統(tǒng)與傳統(tǒng)存儲方式相比,在系統(tǒng)的擴展性、訪問難易程度與速度等方面具有非常大的優(yōu)勢[8]。將分布式存儲技術引入分布式機電系統(tǒng)中,多臺主機協(xié)同運行,有利于解決傳統(tǒng)存儲系統(tǒng)對于海量數(shù)據的存儲瓶頸[9]。
目前常用的分布式存儲方法有加權輪詢算法和一致性哈希算法。曲乾聰、王俊[10]提出一種基于負載反饋的分布式數(shù)字集群動態(tài)負載均衡算法,對加權輪詢算法進行改進,實現(xiàn)公網數(shù)字集群系統(tǒng)負載均衡,但此方法分配任務沒有規(guī)律,在查找數(shù)據時不能快速定位到某一個主機,訪問速度慢。目前一致性哈希算法在分布式存儲系統(tǒng)中得到了廣泛的研究與應用,是一種具有良好橫向擴展性的集群動態(tài)擴展方法,同時在訪問數(shù)據時能快速定位,可有效解決分布式機電系統(tǒng)的海量數(shù)據存儲問題[11]。但傳統(tǒng)的一致性哈希算法存在以下問題:一方面,一致性哈希算法沒有考慮到各主機的性能差異;另一方面,一致性哈希算法自身沒有負載均衡的措施,容易導致負載傾斜。李娟莉等[9]提出了基于實時運行數(shù)據驅動的分布式液壓支架群虛擬監(jiān)測方法,該方法基于一致性哈希算法進行分布式存儲,建立了可根據主機負載狀況動態(tài)分配任務的任務調度模型,但未考慮各主機的性能差異。聶世強等[12]提出了一種基于跳躍哈希的對象分布算法,該算法根據節(jié)點的權值計算每個節(jié)點的虛擬節(jié)點數(shù)目,對所有節(jié)點的虛擬節(jié)點依次分配序號組成數(shù)組,但未考慮負載后服務器狀態(tài)變化。
本文作者以分布式機電系統(tǒng)為對象,研究一種能自主地進行主機虛擬節(jié)點數(shù)目動態(tài)分配調整、有效解決負載均衡的分布式存儲策略。基于一致性哈希算法的特點,依據各主機負載權值來分配各主機的虛擬節(jié)點數(shù)量,且當系統(tǒng)負載失衡時,能自主地進行主機虛擬節(jié)點數(shù)目動態(tài)分配調整,最終實現(xiàn)存儲系統(tǒng)負載均衡。
分布式機電系統(tǒng)具有非線性、多源性、非平衡型、非典型性等多種復雜特征并存的現(xiàn)象[13-14],系統(tǒng)中的任何錯誤或干擾都會在后續(xù)的流程中成倍放大。分布式機電系統(tǒng)數(shù)據流結構框架如圖1所示。整個結構分為5層:物理層、管理層、存儲層、訪問層和應用層。物理層主要包括分布式機電設備的現(xiàn)場監(jiān)測系統(tǒng),為各機電液信號傳感器的配置與數(shù)據采集,通過邊緣節(jié)點采集數(shù)據,在邊緣節(jié)點進行數(shù)據預處理、存儲及通信,最終將數(shù)據存儲在數(shù)據庫服務器。管理層主要包括分布式機電系統(tǒng)的遠程監(jiān)測平臺,主要為邊緣節(jié)點的管理,通過監(jiān)測平臺調用現(xiàn)場數(shù)據,并對數(shù)據可視化遠程監(jiān)測,實現(xiàn)良好的人機交互,也為云端數(shù)據管理提供便利。存儲層主要包括分布式存儲系統(tǒng)及云端,主要為分布式機電系統(tǒng)監(jiān)測任務的多主機動態(tài)分配,達到邊云協(xié)同功能。訪問層主要是對外提供統(tǒng)一的訪問入口,實現(xiàn)數(shù)據查詢和并發(fā)式訪問處理。應用層主要包括對存儲數(shù)據的高效應用,主要為設備運行評估、報表整合和設備壽命預測等應用[15]。
圖1 分布式機電系統(tǒng)數(shù)據流結構框架
分布式機電系統(tǒng)運行數(shù)據主要由機械、電氣、流體、圖像、維修記錄文檔等各類結構化和半結構化數(shù)據組成。機械數(shù)據主要包括振動、轉速、轉矩、力、位移等信號,該類信號頻率高、突變大,信號極易受影響,檢測誤差大;電氣數(shù)據主要包括設備的電流數(shù)據和電壓數(shù)據,而電氣信號諧波成分很高,易受電磁干擾且信號密度高,需要具有極高的采集精度[16]。流體數(shù)據包括壓力、流量、溫度等,該類信號相較于前兩種變化較慢,可以進行低密度的采集,降低系統(tǒng)負載[17]。分析發(fā)現(xiàn),這些數(shù)據具備數(shù)據量大的特征,如10 000個測點,20維數(shù)據特征,每0.5 s采集一次,分辨率為32 b的5年數(shù)據量約2×1015b,達到了P量級[18]。因此,需要對分布式機電系統(tǒng)海量數(shù)據儲存管理方式進行研究,為高效利用分布式機電系統(tǒng)多元化、準確化的數(shù)據奠定基礎[19]。
由于分布式機電系統(tǒng)存在多時空尺度上的海量數(shù)據,隨著設備服役時間越長,分布式機電系統(tǒng)遠程監(jiān)測的數(shù)據量呈指數(shù)型增長,此時,采用分布式存儲系統(tǒng)進行數(shù)據存儲可能存在負載均衡失衡的現(xiàn)象[20]。在分布式存儲系統(tǒng)上解決負載失衡以及任務調動是極其必要的,其中一致性哈希算法可以在系統(tǒng)變動盡量小、盡量保持穩(wěn)定的情況下實現(xiàn)數(shù)據分布式存儲,但一致性哈希算法沒有考慮各主機的性能可能存在差異,自身并沒有負載均衡措施,容易導致負載傾斜。文中的存儲策略流程如圖2所示,根據服務器計算各主機性能權值比例,對各主機的虛擬節(jié)點進行分配,利用一致性哈希算法進行分布式存儲;最后,對系統(tǒng)負載狀況進行評估,大于閾值時觸發(fā)動態(tài)分配機制,通過比較各主機負載均衡狀況評估指標,指標最大和最小的主機分別減少和增加1個虛擬節(jié)點。用此方法重新動態(tài)分配虛擬節(jié)點數(shù)目,最終實現(xiàn)分布式存儲系統(tǒng)負載均衡。
圖2 文中存儲策略
一致性哈希算法的基本原理是將存儲空間抽象為一個長度為232-1的圓環(huán),將存儲節(jié)點分配到這個圓環(huán)上,環(huán)上的節(jié)點都有一個固定的哈希值,這個環(huán)被稱為哈希環(huán)。采用同樣的哈希算法求出存儲數(shù)據的鍵的哈希值,并同樣映射在同一個哈希環(huán)上。最后從數(shù)據映射的位置順時針查找存儲節(jié)點,將數(shù)據存儲在第一個查找到的存儲節(jié)點上[21]。
利用一致性哈希算法實現(xiàn)分布式數(shù)據存儲的關鍵是需要實現(xiàn)數(shù)據和存儲主機節(jié)點的映射。文中采用存儲主機的IP地址為存儲主機的特征值,同時以分布式機電系統(tǒng)遠程監(jiān)測數(shù)據的名稱作為Key值,利用一致性哈希算法將每個數(shù)據一一映射到哈希環(huán)上。使用FNV-1(Fowler-Noll-Vo-1)算法[22]來計算節(jié)點與數(shù)據的哈希值,F(xiàn)NV-1算法能在保持較小沖突率的情況下計算大量的數(shù)據,因為它高度分散的特性,適用于計算一些非常相近的字符串[23]。使用FNV-1算法來映射分布式機電系統(tǒng)監(jiān)測任務的信息過程如圖3所示。
圖3 基于一致性哈希算法的分布式系統(tǒng)信息映射
將主機節(jié)點和支架節(jié)點映射在哈希環(huán)上,監(jiān)測數(shù)據和主機節(jié)點若在哈希環(huán)上均勻分布,即為理想狀況。如圖4(a)所示,數(shù)據節(jié)點按順時針方向尋找離其最近的主機節(jié)點,鍵1落在了主機節(jié)點2上,即數(shù)據1存儲在主機2上,當有大量數(shù)據時,依此類推進行存儲任務的分配。
當存儲主機較少時,由于存儲節(jié)點經哈希算法計算后分配到哈希環(huán)上具有隨機性,可能導致存儲節(jié)點分布不均勻[24],出現(xiàn)哈希偏移現(xiàn)象,如圖4(b)所示。本文作者引入虛擬節(jié)點,如圖4(c)所示,用“#”號表示添加的虛擬節(jié)點。雖然每個主機節(jié)點的物理節(jié)點只有一個,但可以有多個虛擬節(jié)點,虛擬節(jié)點的引入可在一定程度上解決由于主機節(jié)點聚集導致的任務分配不均勻的問題[25]。
但由于虛擬節(jié)點數(shù)量是平均分配到各存儲主機,沒有考慮各主機性能差異,因而在虛擬節(jié)點的分配中引入權值。通過計算主機性能指標得到主機權值比例,根據權值比例分配虛擬節(jié)點的數(shù)量。最后,將存儲系統(tǒng)負載指標與設定的閾值進行比較,觸發(fā)動態(tài)分配機制,重新分配各主機虛擬節(jié)點數(shù)目,最終實現(xiàn)存儲系統(tǒng)的負載均衡。
2.2.1 基于權值分配虛擬節(jié)點
由于各主機的性能存在差異,實時負載高的主機權值應占比較低,處理更少請求,實時負載低的主機權值應占比較高,處理更多請求[26]。為了使算法能根據各主機的性能分配虛擬節(jié)點的數(shù)量,實現(xiàn)負載自適應,采用權值來反映主機當前的存儲能力。根據主機權值定義,主機權值之比為主機初始化性能指標P的倒數(shù)之比,利用式(1)計算各主機權值比。
(1)
式中:Pi為各個主機初始化性能評價指標,Pi的值越小表示該主機性能越好;Pci、Pmi分別為第i臺主機初始化的CPU占用率、內存占用率;ac、am分別為主機初始化CPU占用率、內存占用率的影響程度;Wi為各個主機的權值,取正整數(shù)。根據權值設置虛擬節(jié)點的數(shù)量。
(2)
式中:主機節(jié)點總數(shù)量為N,Ni為第i臺主機的節(jié)點數(shù)量,則各臺主機增加的虛擬節(jié)點數(shù)為Ni-1。
2.2.2 動態(tài)分配機制
為了存儲系統(tǒng)整體分配改變最小化,應保證虛擬節(jié)點的總數(shù)量不變[27]。因此在系統(tǒng)運行的過程中,當系統(tǒng)的負載均衡評價指標S超過設定的閾值時,設定系統(tǒng)觸發(fā)動態(tài)分配機制,將所有的主機負載狀況評價指標Li進行排序,將Li值最大的主機虛擬節(jié)點減1,將Li值最小的主機虛擬節(jié)點加1,再重新進行系統(tǒng)的負載均衡評價,直至S在設定的閾值范圍內。程序流程如圖5所示。
圖5 監(jiān)測任務動態(tài)分配
主機負載狀況評價指標由多個因素共同決定,包括主機的CPU占用率、內存占用率以及任務量等。單臺主機負載狀況評價指標Li為
Li=100×(bcLci+bmLmi+btLti)且bc+
bm+bt=1
(3)
式中:Li的值越小表示負載越?。籐ci、Lmi、Lti分別為第i臺主機的CPU占用率、內存占用率以及任務量百分比;bc、bm、bt分別為 CPU占用率、內存占用率以及任務量百分比的影響程度。
利用基于標準差的負載均衡評價方法,根據主機負載狀況評價對系統(tǒng)的負載均衡性進行評價,利用式(4)(5)計算分布式存儲系統(tǒng)的負載均衡評價指標S。
(4)
(5)
試驗臺環(huán)境由試驗室機電液試驗臺、智能間開采油控制柜、油井能量反饋節(jié)能控制系統(tǒng)整流裝置[28]3個邊緣設備組成(如圖6所示),采用試驗室的3個邊緣節(jié)點cRIO采集數(shù)據,通過試驗室的分布式機電系統(tǒng)遠程監(jiān)測平臺[29]實時采集數(shù)據進行試驗。
圖6 試驗臺環(huán)境組成
設置主機初始化性能指標P的各項指標系數(shù)ac、am為0.5、0.5,針對各主機不同的性能,利用式(2)計算各主機權值Wi,通過權值設置各主機的虛擬節(jié)點數(shù)量,各項指標見表1。
表1 監(jiān)測任務初始化分配中的各項指標
表中:n為正整數(shù)。
根據表1設置各主機節(jié)點數(shù)目,服務器節(jié)點總數(shù)為5、10、15、20的分配情況如圖7所示。
由圖7中的不同節(jié)點數(shù)的各主機數(shù)據分配情況可以得到,隨著主機虛擬節(jié)點數(shù)量的增加,分配到各臺主機上的任務量比例逐漸趨于權值比2∶2∶1,處于負載均衡。利用式(3)得到各主機的參數(shù)L,其中設置系統(tǒng)矩陣為{0.4,0.4,0.2}。利用式(5)計算得到服務器節(jié)點數(shù)量不同的情況下系統(tǒng)的負載均衡評價指標S,如圖8所示。
圖8 服務器節(jié)點數(shù)量n與均衡性指標S關系
由圖8可以得到:當虛擬節(jié)點的數(shù)量增加到一定程度時,虛擬節(jié)點數(shù)量的增加對于系統(tǒng)均衡性的作用越來越小。系統(tǒng)中設置初始化的負載均衡評價指標S的閾值為0.1,當S<0.1時,判定系統(tǒng)負載均衡性良好。在此次試驗中,S<0.1的服務器節(jié)點數(shù)量有15、20。在實現(xiàn)需求均衡性的前提下,主機虛擬節(jié)點的數(shù)量應該越少越好[6],則選擇服務器節(jié)點數(shù)量15作為初始化設置對系統(tǒng)進行初始化。
3.3.1 基于權值動態(tài)分配
在上述系統(tǒng)初始化試驗的基礎上,進行任務動態(tài)分配試驗。設定存儲系統(tǒng)總節(jié)點數(shù)量為15,根據權值比例2∶2∶1分配各主機節(jié)點數(shù)量為6、6、3,同時增加存儲系統(tǒng)的任務量直到系統(tǒng)負載均衡評價指標S高于設定的閾值0.1,此時系統(tǒng)觸發(fā)動態(tài)分配功能,執(zhí)行一次或多次虛擬節(jié)點動態(tài)分配后,系統(tǒng)再次達到正常的運行狀態(tài),即系統(tǒng)負載均衡評價指標S<0.1。系統(tǒng)動態(tài)分配試驗過程中各項指標變化如表2所示。
表2 監(jiān)測任務動態(tài)分配中各項指標變化
試驗次數(shù)1表示系統(tǒng)開始運行,此時的系統(tǒng)負載評價指標小于設定的閾值,系統(tǒng)運行正常;試驗次數(shù)2表示系統(tǒng)繼續(xù)運行,此時的系統(tǒng)負載評價指標依舊小于設定的閾值,系統(tǒng)處于正常運行狀態(tài);試驗次數(shù)3表示系統(tǒng)繼續(xù)運行,此時的系統(tǒng)負載評價指標大于設定的閾值,觸發(fā)系統(tǒng)的動態(tài)分配機制;試驗次數(shù)4表示進行了一次動態(tài)分配后,系統(tǒng)的負載均衡評價指標回到正常范圍。該試驗表明,在系統(tǒng)運行過程中,此動態(tài)調整機制可以使系統(tǒng)正常流暢地運行。
3.3.2 傳統(tǒng)一致性哈希算法的動態(tài)分配
在不考慮主機性能的情況下,采用一致性哈希算法對分布式機電系統(tǒng)數(shù)據進行存儲。在初始化任務分配試驗基礎上,設置總虛擬節(jié)點為15,平均分配虛擬節(jié)點數(shù)量,使得各主機節(jié)點均為5個,在系統(tǒng)負載評價指標大于設置的閾值0.1時觸發(fā)動態(tài)分配功能,完成一次或多次動態(tài)分配,使得系統(tǒng)負載評價指標低于0.1。同時增加與第3.3.1節(jié)相同的試驗數(shù)據任務量,根據閾值觸發(fā)動態(tài)分配機制,直到系統(tǒng)達到正常的運行狀態(tài),即系統(tǒng)負載均衡評價指標S<0.1。試驗過程中各項指標如表3所示。
表3 基于傳統(tǒng)一致性哈希算法的監(jiān)測任務動態(tài)分配中各項指標變化
試驗次數(shù)1表示平均分配各主機節(jié)點數(shù)量的情況下運行系統(tǒng),此時的系統(tǒng)負載評價指標大于設定的閾值,觸發(fā)系統(tǒng)的動態(tài)分配機制;試驗次數(shù)2和3表示進行兩次動態(tài)分配后,系統(tǒng)的負載均衡評價指標回到正常的范圍,系統(tǒng)處于正常運行狀態(tài)。通過兩次動態(tài)分配后,如試驗次數(shù)3所示,此時服務器將各主機節(jié)點數(shù)量分配為6、6、3,分配結果與通過權值比例2∶2∶1分配的各主機節(jié)點數(shù)相同。試驗次數(shù)4表示系統(tǒng)繼續(xù)運行,存儲數(shù)據量增加后系統(tǒng)負載評價指標依舊小于設定的閾值,系統(tǒng)處于正常運行狀態(tài);試驗次數(shù)5表示系統(tǒng)繼續(xù)運行,此時的系統(tǒng)負載評價指標大于設定的閾值,觸發(fā)系統(tǒng)的動態(tài)分配機制;試驗次數(shù)6表示進行一次動態(tài)分配后,系統(tǒng)的負載均衡評價指標回到正常范圍。
該試驗表明:在存儲相同的任務量時,在不考慮主機性能的情況下,采用一致性哈希算法對分布式機電系統(tǒng)數(shù)據進行存儲需要6次試驗才達到系統(tǒng)正常運行狀態(tài),對比第3.3.1節(jié)基于權值比例分配各主機節(jié)點數(shù)量的一致性哈希動態(tài)分配存儲策略試驗,只需要4次試驗則達到系統(tǒng)正常運行狀態(tài)。對比發(fā)現(xiàn),基于權值比例分配各主機節(jié)點數(shù)量的一致性哈希動態(tài)分配存儲策略較平均分配各主機節(jié)點數(shù)量的一致性哈希動態(tài)分配存儲策略能有效減少動態(tài)分配次數(shù),使系統(tǒng)更快進入正常運行狀態(tài)。
提出一種基于權值比例分配各主機節(jié)點數(shù)目的分布式存儲策略,以應對分布式機電系統(tǒng)海量數(shù)據的高效存儲。存儲策略通過增加一層虛擬節(jié)點的哈希環(huán)來解決傳統(tǒng)一致性哈希算法因節(jié)點不足導致負載傾斜的問題;根據主機負載性能權值分配虛擬節(jié)點,解決各主機性能差異問題;建立虛擬節(jié)點的動態(tài)分配機制,在系統(tǒng)運行過程中實現(xiàn)負載的自適應。試驗結果表明:文中存儲策略可滿足分布式機電系統(tǒng)海量數(shù)據的復雜業(yè)務需求,提高了分布式存儲系統(tǒng)的性能,能有效減少動態(tài)分配次數(shù),使系統(tǒng)快速進入正常運行狀態(tài),具有良好的工程應用和推廣價值。