劉沛津 ,王柳月 ,孫昱 ,史潔琳 ,晏東陽
(1.西安建筑科技大學機電工程學院,陜西西安 710055;2.西安建筑科技大學理學院,陜西西安 710055)
現代工業生產方式中機電設備各單元要素之間呈現出監測節點多元化、空間分布廣泛等特點,因此也被稱為分布式機電系統[1-3]。隨著大型機電設備和集群設備的發展,產生的數據流量呈指數增長,這給傳統的數據管理系統帶來了數據存儲和應用的挑戰[4],也使得僅僅依靠集中式存儲模式難以高效存儲管理邊緣設備產生的數據[5]。為了保證系統數據安全可靠、高效經濟地利用,在運行過程中亟需高效的數據存儲與管理模式進行支撐[6-7]。
分布式存儲技術是對數據進行分組處理后,分別存放在多個存儲設備中,大量低成本的PC服務器通過網絡互聯,對外作為整體提供高效的服務[7]。分布式存儲系統與傳統存儲方式相比,在系統的擴展性、訪問難易程度與速度等方面具有非常大的優勢[8]。將分布式存儲技術引入分布式機電系統中,多臺主機協同運行,有利于解決傳統存儲系統對于海量數據的存儲瓶頸[9]。
目前常用的分布式存儲方法有加權輪詢算法和一致性哈希算法。曲乾聰、王俊[10]提出一種基于負載反饋的分布式數字集群動態負載均衡算法,對加權輪詢算法進行改進,實現公網數字集群系統負載均衡,但此方法分配任務沒有規律,在查找數據時不能快速定位到某一個主機,訪問速度慢。目前一致性哈希算法在分布式存儲系統中得到了廣泛的研究與應用,是一種具有良好橫向擴展性的集群動態擴展方法,同時在訪問數據時能快速定位,可有效解決分布式機電系統的海量數據存儲問題[11]。但傳統的一致性哈希算法存在以下問題:一方面,一致性哈希算法沒有考慮到各主機的性能差異;另一方面,一致性哈希算法自身沒有負載均衡的措施,容易導致負載傾斜。李娟莉等[9]提出了基于實時運行數據驅動的分布式液壓支架群虛擬監測方法,該方法基于一致性哈希算法進行分布式存儲,建立了可根據主機負載狀況動態分配任務的任務調度模型,但未考慮各主機的性能差異。聶世強等[12]提出了一種基于跳躍哈希的對象分布算法,該算法根據節點的權值計算每個節點的虛擬節點數目,對所有節點的虛擬節點依次分配序號組成數組,但未考慮負載后服務器狀態變化。
本文作者以分布式機電系統為對象,研究一種能自主地進行主機虛擬節點數目動態分配調整、有效解決負載均衡的分布式存儲策略。基于一致性哈希算法的特點,依據各主機負載權值來分配各主機的虛擬節點數量,且當系統負載失衡時,能自主地進行主機虛擬節點數目動態分配調整,最終實現存儲系統負載均衡。
分布式機電系統具有非線性、多源性、非平衡型、非典型性等多種復雜特征并存的現象[13-14],系統中的任何錯誤或干擾都會在后續的流程中成倍放大。分布式機電系統數據流結構框架如圖1所示。整個結構分為5層:物理層、管理層、存儲層、訪問層和應用層。物理層主要包括分布式機電設備的現場監測系統,為各機電液信號傳感器的配置與數據采集,通過邊緣節點采集數據,在邊緣節點進行數據預處理、存儲及通信,最終將數據存儲在數據庫服務器。管理層主要包括分布式機電系統的遠程監測平臺,主要為邊緣節點的管理,通過監測平臺調用現場數據,并對數據可視化遠程監測,實現良好的人機交互,也為云端數據管理提供便利。存儲層主要包括分布式存儲系統及云端,主要為分布式機電系統監測任務的多主機動態分配,達到邊云協同功能。訪問層主要是對外提供統一的訪問入口,實現數據查詢和并發式訪問處理。應用層主要包括對存儲數據的高效應用,主要為設備運行評估、報表整合和設備壽命預測等應用[15]。

圖1 分布式機電系統數據流結構框架
分布式機電系統運行數據主要由機械、電氣、流體、圖像、維修記錄文檔等各類結構化和半結構化數據組成。機械數據主要包括振動、轉速、轉矩、力、位移等信號,該類信號頻率高、突變大,信號極易受影響,檢測誤差大;電氣數據主要包括設備的電流數據和電壓數據,而電氣信號諧波成分很高,易受電磁干擾且信號密度高,需要具有極高的采集精度[16]。流體數據包括壓力、流量、溫度等,該類信號相較于前兩種變化較慢,可以進行低密度的采集,降低系統負載[17]。分析發現,這些數據具備數據量大的特征,如10 000個測點,20維數據特征,每0.5 s采集一次,分辨率為32 b的5年數據量約2×1015b,達到了P量級[18]。因此,需要對分布式機電系統海量數據儲存管理方式進行研究,為高效利用分布式機電系統多元化、準確化的數據奠定基礎[19]。
由于分布式機電系統存在多時空尺度上的海量數據,隨著設備服役時間越長,分布式機電系統遠程監測的數據量呈指數型增長,此時,采用分布式存儲系統進行數據存儲可能存在負載均衡失衡的現象[20]。在分布式存儲系統上解決負載失衡以及任務調動是極其必要的,其中一致性哈希算法可以在系統變動盡量小、盡量保持穩定的情況下實現數據分布式存儲,但一致性哈希算法沒有考慮各主機的性能可能存在差異,自身并沒有負載均衡措施,容易導致負載傾斜。文中的存儲策略流程如圖2所示,根據服務器計算各主機性能權值比例,對各主機的虛擬節點進行分配,利用一致性哈希算法進行分布式存儲;最后,對系統負載狀況進行評估,大于閾值時觸發動態分配機制,通過比較各主機負載均衡狀況評估指標,指標最大和最小的主機分別減少和增加1個虛擬節點。用此方法重新動態分配虛擬節點數目,最終實現分布式存儲系統負載均衡。

圖2 文中存儲策略
一致性哈希算法的基本原理是將存儲空間抽象為一個長度為232-1的圓環,將存儲節點分配到這個圓環上,環上的節點都有一個固定的哈希值,這個環被稱為哈希環。采用同樣的哈希算法求出存儲數據的鍵的哈希值,并同樣映射在同一個哈希環上。最后從數據映射的位置順時針查找存儲節點,將數據存儲在第一個查找到的存儲節點上[21]。
利用一致性哈希算法實現分布式數據存儲的關鍵是需要實現數據和存儲主機節點的映射。文中采用存儲主機的IP地址為存儲主機的特征值,同時以分布式機電系統遠程監測數據的名稱作為Key值,利用一致性哈希算法將每個數據一一映射到哈希環上。使用FNV-1(Fowler-Noll-Vo-1)算法[22]來計算節點與數據的哈希值,FNV-1算法能在保持較小沖突率的情況下計算大量的數據,因為它高度分散的特性,適用于計算一些非常相近的字符串[23]。使用FNV-1算法來映射分布式機電系統監測任務的信息過程如圖3所示。

圖3 基于一致性哈希算法的分布式系統信息映射
將主機節點和支架節點映射在哈希環上,監測數據和主機節點若在哈希環上均勻分布,即為理想狀況。如圖4(a)所示,數據節點按順時針方向尋找離其最近的主機節點,鍵1落在了主機節點2上,即數據1存儲在主機2上,當有大量數據時,依此類推進行存儲任務的分配。
當存儲主機較少時,由于存儲節點經哈希算法計算后分配到哈希環上具有隨機性,可能導致存儲節點分布不均勻[24],出現哈希偏移現象,如圖4(b)所示。本文作者引入虛擬節點,如圖4(c)所示,用“#”號表示添加的虛擬節點。雖然每個主機節點的物理節點只有一個,但可以有多個虛擬節點,虛擬節點的引入可在一定程度上解決由于主機節點聚集導致的任務分配不均勻的問題[25]。
但由于虛擬節點數量是平均分配到各存儲主機,沒有考慮各主機性能差異,因而在虛擬節點的分配中引入權值。通過計算主機性能指標得到主機權值比例,根據權值比例分配虛擬節點的數量。最后,將存儲系統負載指標與設定的閾值進行比較,觸發動態分配機制,重新分配各主機虛擬節點數目,最終實現存儲系統的負載均衡。
2.2.1 基于權值分配虛擬節點
由于各主機的性能存在差異,實時負載高的主機權值應占比較低,處理更少請求,實時負載低的主機權值應占比較高,處理更多請求[26]。為了使算法能根據各主機的性能分配虛擬節點的數量,實現負載自適應,采用權值來反映主機當前的存儲能力。根據主機權值定義,主機權值之比為主機初始化性能指標P的倒數之比,利用式(1)計算各主機權值比。
(1)
式中:Pi為各個主機初始化性能評價指標,Pi的值越小表示該主機性能越好;Pci、Pmi分別為第i臺主機初始化的CPU占用率、內存占用率;ac、am分別為主機初始化CPU占用率、內存占用率的影響程度;Wi為各個主機的權值,取正整數。根據權值設置虛擬節點的數量。
(2)
式中:主機節點總數量為N,Ni為第i臺主機的節點數量,則各臺主機增加的虛擬節點數為Ni-1。
2.2.2 動態分配機制
為了存儲系統整體分配改變最小化,應保證虛擬節點的總數量不變[27]。因此在系統運行的過程中,當系統的負載均衡評價指標S超過設定的閾值時,設定系統觸發動態分配機制,將所有的主機負載狀況評價指標Li進行排序,將Li值最大的主機虛擬節點減1,將Li值最小的主機虛擬節點加1,再重新進行系統的負載均衡評價,直至S在設定的閾值范圍內。程序流程如圖5所示。

圖5 監測任務動態分配
主機負載狀況評價指標由多個因素共同決定,包括主機的CPU占用率、內存占用率以及任務量等。單臺主機負載狀況評價指標Li為
Li=100×(bcLci+bmLmi+btLti)且bc+
bm+bt=1
(3)
式中:Li的值越小表示負載越小;Lci、Lmi、Lti分別為第i臺主機的CPU占用率、內存占用率以及任務量百分比;bc、bm、bt分別為 CPU占用率、內存占用率以及任務量百分比的影響程度。
利用基于標準差的負載均衡評價方法,根據主機負載狀況評價對系統的負載均衡性進行評價,利用式(4)(5)計算分布式存儲系統的負載均衡評價指標S。
(4)
(5)

試驗臺環境由試驗室機電液試驗臺、智能間開采油控制柜、油井能量反饋節能控制系統整流裝置[28]3個邊緣設備組成(如圖6所示),采用試驗室的3個邊緣節點cRIO采集數據,通過試驗室的分布式機電系統遠程監測平臺[29]實時采集數據進行試驗。

圖6 試驗臺環境組成
設置主機初始化性能指標P的各項指標系數ac、am為0.5、0.5,針對各主機不同的性能,利用式(2)計算各主機權值Wi,通過權值設置各主機的虛擬節點數量,各項指標見表1。

表1 監測任務初始化分配中的各項指標
表中:n為正整數。
根據表1設置各主機節點數目,服務器節點總數為5、10、15、20的分配情況如圖7所示。
由圖7中的不同節點數的各主機數據分配情況可以得到,隨著主機虛擬節點數量的增加,分配到各臺主機上的任務量比例逐漸趨于權值比2∶2∶1,處于負載均衡。利用式(3)得到各主機的參數L,其中設置系統矩陣為{0.4,0.4,0.2}。利用式(5)計算得到服務器節點數量不同的情況下系統的負載均衡評價指標S,如圖8所示。

圖8 服務器節點數量n與均衡性指標S關系
由圖8可以得到:當虛擬節點的數量增加到一定程度時,虛擬節點數量的增加對于系統均衡性的作用越來越小。系統中設置初始化的負載均衡評價指標S的閾值為0.1,當S<0.1時,判定系統負載均衡性良好。在此次試驗中,S<0.1的服務器節點數量有15、20。在實現需求均衡性的前提下,主機虛擬節點的數量應該越少越好[6],則選擇服務器節點數量15作為初始化設置對系統進行初始化。
3.3.1 基于權值動態分配
在上述系統初始化試驗的基礎上,進行任務動態分配試驗。設定存儲系統總節點數量為15,根據權值比例2∶2∶1分配各主機節點數量為6、6、3,同時增加存儲系統的任務量直到系統負載均衡評價指標S高于設定的閾值0.1,此時系統觸發動態分配功能,執行一次或多次虛擬節點動態分配后,系統再次達到正常的運行狀態,即系統負載均衡評價指標S<0.1。系統動態分配試驗過程中各項指標變化如表2所示。

表2 監測任務動態分配中各項指標變化
試驗次數1表示系統開始運行,此時的系統負載評價指標小于設定的閾值,系統運行正常;試驗次數2表示系統繼續運行,此時的系統負載評價指標依舊小于設定的閾值,系統處于正常運行狀態;試驗次數3表示系統繼續運行,此時的系統負載評價指標大于設定的閾值,觸發系統的動態分配機制;試驗次數4表示進行了一次動態分配后,系統的負載均衡評價指標回到正常范圍。該試驗表明,在系統運行過程中,此動態調整機制可以使系統正常流暢地運行。
3.3.2 傳統一致性哈希算法的動態分配
在不考慮主機性能的情況下,采用一致性哈希算法對分布式機電系統數據進行存儲。在初始化任務分配試驗基礎上,設置總虛擬節點為15,平均分配虛擬節點數量,使得各主機節點均為5個,在系統負載評價指標大于設置的閾值0.1時觸發動態分配功能,完成一次或多次動態分配,使得系統負載評價指標低于0.1。同時增加與第3.3.1節相同的試驗數據任務量,根據閾值觸發動態分配機制,直到系統達到正常的運行狀態,即系統負載均衡評價指標S<0.1。試驗過程中各項指標如表3所示。

表3 基于傳統一致性哈希算法的監測任務動態分配中各項指標變化
試驗次數1表示平均分配各主機節點數量的情況下運行系統,此時的系統負載評價指標大于設定的閾值,觸發系統的動態分配機制;試驗次數2和3表示進行兩次動態分配后,系統的負載均衡評價指標回到正常的范圍,系統處于正常運行狀態。通過兩次動態分配后,如試驗次數3所示,此時服務器將各主機節點數量分配為6、6、3,分配結果與通過權值比例2∶2∶1分配的各主機節點數相同。試驗次數4表示系統繼續運行,存儲數據量增加后系統負載評價指標依舊小于設定的閾值,系統處于正常運行狀態;試驗次數5表示系統繼續運行,此時的系統負載評價指標大于設定的閾值,觸發系統的動態分配機制;試驗次數6表示進行一次動態分配后,系統的負載均衡評價指標回到正常范圍。
該試驗表明:在存儲相同的任務量時,在不考慮主機性能的情況下,采用一致性哈希算法對分布式機電系統數據進行存儲需要6次試驗才達到系統正常運行狀態,對比第3.3.1節基于權值比例分配各主機節點數量的一致性哈希動態分配存儲策略試驗,只需要4次試驗則達到系統正常運行狀態。對比發現,基于權值比例分配各主機節點數量的一致性哈希動態分配存儲策略較平均分配各主機節點數量的一致性哈希動態分配存儲策略能有效減少動態分配次數,使系統更快進入正常運行狀態。
提出一種基于權值比例分配各主機節點數目的分布式存儲策略,以應對分布式機電系統海量數據的高效存儲。存儲策略通過增加一層虛擬節點的哈希環來解決傳統一致性哈希算法因節點不足導致負載傾斜的問題;根據主機負載性能權值分配虛擬節點,解決各主機性能差異問題;建立虛擬節點的動態分配機制,在系統運行過程中實現負載的自適應。試驗結果表明:文中存儲策略可滿足分布式機電系統海量數據的復雜業務需求,提高了分布式存儲系統的性能,能有效減少動態分配次數,使系統快速進入正常運行狀態,具有良好的工程應用和推廣價值。