湯小春, 周佳文
(西北工業(yè)大學(xué) 計算機學(xué)院, 陜西 西安 710072)
現(xiàn)代MRO[1-3](maintenance, repair, overhaul)是在借鑒航空維修MRO[4]概念的基礎(chǔ)上,增加了產(chǎn)品的狀態(tài)監(jiān)視及運行控制等業(yè)務(wù)內(nèi)容。它的最大特點是支持產(chǎn)品的全生命周期管理[5-6],即涵蓋產(chǎn)品的設(shè)計、生產(chǎn)、運行以及回收等全部階段。因此,與傳統(tǒng)MRO比較,現(xiàn)代MRO系統(tǒng)的數(shù)據(jù)管理特點是:①數(shù)據(jù)量大。產(chǎn)品的設(shè)計、生產(chǎn)、運行以及報廢的整個生命周期,每個產(chǎn)品都會產(chǎn)生大量的數(shù)據(jù);②數(shù)據(jù)處理任務(wù)數(shù)量快速增長。產(chǎn)品數(shù)量的增加使得實時處理負荷變大;③數(shù)據(jù)類型多樣化。系統(tǒng)中有實時數(shù)據(jù)、基礎(chǔ)數(shù)據(jù)、業(yè)務(wù)知識數(shù)據(jù)以及用戶交互數(shù)據(jù),這些數(shù)據(jù)的類型不一樣。④共享性高。終端用戶、制造商、銷售商以及相關(guān)零部件的供應(yīng)商都參與到產(chǎn)品中,信息共享性要求大幅提高。
現(xiàn)代MRO系統(tǒng)的一個重要特點是歷史數(shù)據(jù)龐大,并且這些歷史數(shù)據(jù)能夠被反復(fù)利用,進行產(chǎn)品運行中的預(yù)測和評估計算,例如,最佳維護時間的計算等,因此,既需要海量的存儲空間亦需要好的計算能力。目前,有關(guān)現(xiàn)代MRO系統(tǒng)的數(shù)據(jù)管理文獻中,有些專注于如何滿足海量數(shù)據(jù)存儲的要求[2-3],另外一些則只考慮計算能力問題[6],而綜合考慮全生命周期中數(shù)據(jù)存儲和數(shù)據(jù)分析計算的則較少?,F(xiàn)有的MRO系統(tǒng)以采用傳統(tǒng)的關(guān)系數(shù)據(jù)庫和NoSql數(shù)據(jù)存儲為主,文獻[7]利用實時數(shù)據(jù)庫系統(tǒng)保存數(shù)據(jù),它只支持對動態(tài)采樣數(shù)據(jù)的處理;文獻[8]針對MRO系統(tǒng)中數(shù)據(jù)的多源、異構(gòu)、海量、動態(tài)等特點,提出了一種綜合運用云計算技術(shù)解決這一問題的思路,它很好地解決了存儲問題,但是對于數(shù)據(jù)操縱問題卻沒有涉及。文獻[9]針對數(shù)據(jù)模型、數(shù)據(jù)預(yù)處理與集成和數(shù)據(jù)查詢等幾個方面進行了分析,提出了基于云平臺的數(shù)據(jù)管理框架,但是其核心在于數(shù)據(jù)模型方面。文獻[10]針對傳感器采樣數(shù)據(jù)管理中所面臨的數(shù)據(jù)海量性、異構(gòu)性、時空敏感性、動態(tài)流式特性等問題,提出了使用數(shù)據(jù)庫集群來管理采樣數(shù)據(jù),但是沒有涉及事務(wù)數(shù)據(jù)的管理。
鑒于現(xiàn)存系統(tǒng)中的不足,提出了一個可擴展鍵值存儲[11-12]系統(tǒng)來滿足現(xiàn)代MRO系統(tǒng)的數(shù)據(jù)處理要求。通過本地化實時應(yīng)用和數(shù)據(jù)緩存的特點,在應(yīng)用程序和KV存儲之間增加一個中間層,實時更新的數(shù)據(jù)被緩存到內(nèi)存的不同組中;收到讀取數(shù)據(jù)請求,直接返回內(nèi)存中的數(shù)據(jù),避免過多的I/O操作。對于需要多個數(shù)據(jù)經(jīng)過融合才能進行實時分析計算的請求,按照應(yīng)用要求對數(shù)據(jù)分組,一起工作的鍵緩存在同一個計算節(jié)點中,避免了分布式帶來的風(fēng)險。由于以鍵值存儲為基礎(chǔ),系統(tǒng)允許用戶靈活地建立分組,實現(xiàn)不同的計算要求,所以滿足了可擴展性[12]。
現(xiàn)代MRO系統(tǒng)的數(shù)據(jù)存儲模型需要實現(xiàn)實時數(shù)據(jù)更新、實時數(shù)據(jù)分析處理以及實時數(shù)據(jù)狀態(tài)顯示功能。實時數(shù)據(jù)更新負責(zé)獲得設(shè)備中各個部件的傳感器的最新狀態(tài)參數(shù),然后保存。實時分析根據(jù)產(chǎn)品的最新狀態(tài)數(shù)據(jù),再利用歷史數(shù)據(jù),及時準確地判斷產(chǎn)品的狀態(tài)。實時狀態(tài)顯示負責(zé)從數(shù)據(jù)存儲中心獲得產(chǎn)品的最新數(shù)據(jù)及狀態(tài),向終端用戶展示。
為了有效利用二級存儲設(shè)備,降低磁盤I/O次數(shù),將數(shù)據(jù)存儲功能分為分組存儲層和數(shù)據(jù)存儲層。分組存儲層以內(nèi)存為主,用于實時數(shù)據(jù)的計算;數(shù)據(jù)存儲層采用KV存儲模型,可以滿足海量存儲。當(dāng)系統(tǒng)啟動一個實時處理業(yè)務(wù)時,將業(yè)務(wù)需要的數(shù)據(jù)從KV存儲中取出,分組存儲層進行匯聚后,再執(zhí)行計算。
為了與傳統(tǒng)的關(guān)系數(shù)據(jù)庫融合,KV存儲中的鍵由多個部分組合形成,按照樹模型組織起來,而每個部分可以對應(yīng)關(guān)系中的屬性。
定義1父子關(guān)系是指有序?qū)蟵(p,q1),(p,q2),…,(p,ql)}上,p與 {q1,q2,…,ql}之間是一對多的聯(lián)系,集合中的任何一個有序?qū)ΨQ為父子關(guān)系,其中p叫父鍵,q1,q2,…,ql都叫子鍵,個數(shù)為l。
定義2層次模型是由一組鍵和鍵之間的父子關(guān)系構(gòu)成的一棵有向樹T=(V,E)。其中V和E定義為:①V是鍵的集合;②如果(v1,v2)∈E,當(dāng)且僅當(dāng)存在一個從v1到v2的父子關(guān)系。
現(xiàn)代MRO系統(tǒng)中,產(chǎn)品、部件以及零件等之間的裝配關(guān)系是樹狀的,所以實時處理鍵組可以很好地描述產(chǎn)品中每個零部件的信息。例如產(chǎn)品是根,產(chǎn)品與部件是父子關(guān)系,部件和零件是父子關(guān)系,零件的運行狀態(tài)與時間戳是父子關(guān)系,其鍵表示為/sid/cid/qid/timestamp。因此,對于每一個具體的產(chǎn)品,可以用層次模型表示。
現(xiàn)代MRO系統(tǒng)計算產(chǎn)品的指定狀態(tài)時,需要將涉及到的零部件信息組合在一起,形成一個計算單元。
定義3實時處理鍵組是一組層次模式的集合。
實時鍵組的操作主要包括:鍵組的建立和刪除;鍵組元素的增減操作。
約束規(guī)則為:①進行插入時,如果沒有相應(yīng)的父鍵存在,子鍵不能插入;②進行刪除操作時,如果刪除父鍵,則子鍵記錄必須被全部刪除;③只有一個鍵沒有父鍵,其為根鍵;沒有子鍵的鍵稱為葉子鍵。除根鍵外,每個鍵有且只有一個父鍵;除葉子鍵外,每個鍵至少存在一個子鍵。
例如,當(dāng)分析采摘定的狀態(tài)時,需要將轉(zhuǎn)速、油壓、風(fēng)管參數(shù)組合在一起,形成一個計算單元,其包含的鍵形成實時處理鍵組。但是由于這些參數(shù)可能來自不同的物理節(jié)點,也有可能一些鍵被其他計算單元使用,因此實時處理鍵組是動態(tài)組合的,因此需要進行實時鍵組的管理。
如圖1所示,每個物理節(jié)點包含一個協(xié)調(diào)器、一個實時應(yīng)用管理器以及實時處理鍵組。

圖1 實時處理鍵組存儲模型
應(yīng)用管理器主要調(diào)度該節(jié)點上的實時計算程序,協(xié)調(diào)器執(zhí)行用戶實時處理鍵組的建立和撤銷請求。當(dāng)需要執(zhí)行實時計算時,協(xié)調(diào)器從各個KV存儲節(jié)點獲取指定的鍵值,然后形成一個實時處理鍵組,最后由應(yīng)用管理器調(diào)度執(zhí)行。一旦計算結(jié)束,撤銷對應(yīng)的鍵組。
實時處理鍵組的注冊是由實時計算發(fā)起的,它指定一組需要更新的成員鍵,然后向?qū)崟r處理鍵組管理器發(fā)送注冊請求,實時處理鍵組管理器就開始一個實時處理鍵組的注冊過程。注冊過程采用原子方式,要么注冊成功,形成一個實時處理鍵組,要么注冊失敗,實時處理鍵組無法產(chǎn)生。
算法: 注冊過程。
輸入: 新收到的鍵K={k1,k2,…,km}
輸出: 新鍵組t
過程:
T={t1,t2,…,tn}/*已經(jīng)存在的鍵組*/
while(k∈K){
if((k?ti.k)∧(?ti∈T)){
if(!t)t=mg(k)
elset.k=∪{k}
}else
returnφ
T=T∪{t}/*t與T合并*/
}
returnt
實時處理鍵組注冊時,應(yīng)用管理器向協(xié)調(diào)器發(fā)送建立命令,協(xié)調(diào)器并發(fā)地向各個鍵所在的數(shù)據(jù)存儲節(jié)點(參與者)發(fā)送消息(C),參與者收到消息后,將成員鍵的值發(fā)送到協(xié)調(diào)器(CA),若有錯誤發(fā)生則返回錯誤(A)。協(xié)調(diào)器根據(jù)所有參與者的回復(fù)決定實時處理鍵組的建立或者中止。如果存在成員鍵的值無法取得,協(xié)調(diào)器負責(zé)通知管理器建立失敗。如果成功取得所有成員鍵的值,協(xié)調(diào)器負責(zé)通知管理器建立成功。
當(dāng)應(yīng)用程序不再需要某個實時處理鍵組時,首先向管理器發(fā)送解散實時處理鍵組的命令,此時,管理器向協(xié)調(diào)器發(fā)送釋放消息,實時應(yīng)用存儲節(jié)點上的鍵值即為不可用狀態(tài)。若實時處理鍵組中某個鍵值的變更未被提交,在發(fā)送解除消息之前,協(xié)調(diào)器必須保證數(shù)據(jù)提交到各個成員節(jié)點。
圖1中的分組管理器為每一個實時處理鍵組設(shè)置一個對象標識,稱之為應(yīng)用對象。圖2展示了系統(tǒng)的數(shù)據(jù)處理過程。

圖2 實時數(shù)據(jù)處理應(yīng)用的提交
①根據(jù)實時處理鍵組建立應(yīng)用對象;②buffer取得鍵值并處理;③處理完的數(shù)據(jù)寫入應(yīng)用對象;④分組管理器采用put2new策略檢查③中的數(shù)據(jù)是否全部得到,若是,則向異步更新服務(wù)發(fā)送commit請求;⑤異步更新服務(wù)采用put方法將數(shù)據(jù)回寫到數(shù)據(jù)存儲系統(tǒng);⑥異步更新服務(wù)也將其他備份進行commit更新,分組管理器檢查③提交的數(shù)據(jù),若發(fā)現(xiàn)有數(shù)據(jù)未到達,則應(yīng)用程序顯示分析處理失敗。
實時處理鍵組的數(shù)據(jù)存儲在內(nèi)存中,既提高了響應(yīng)速度,又提高了故障發(fā)生時執(zhí)行失效接管的速度。
在圖2中,當(dāng)某個節(jié)點的負荷較大時,系統(tǒng)可以增加新的計算節(jié)點,并且將部分實時處理鍵組轉(zhuǎn)移到新的節(jié)點,從而提高系統(tǒng)計算能力。另外,由于采用分布式KV存儲策略,擴展數(shù)據(jù)存儲節(jié)點非常容易,從而滿足海量數(shù)據(jù)存儲的要求。
系統(tǒng)組成如圖3所示,用戶的實時處理請求到達后,實時處理服務(wù)建立實時處理鍵組,從數(shù)據(jù)存儲服務(wù)器中取得數(shù)據(jù),數(shù)據(jù)的更新寫入分組對象。分析處理完的數(shù)據(jù)定期更新到鍵值存儲系統(tǒng)中,實現(xiàn)持久化。由于內(nèi)存中數(shù)據(jù)容易丟失,所以采用先寫日志的方式(WAL)將數(shù)據(jù)寫入日志中。

圖3 系統(tǒng)實現(xiàn)結(jié)構(gòu)
實時處理業(yè)務(wù)執(zhí)行時,必須保證分組中的鍵值是最新的,否則不能進行處理。如果應(yīng)用不需要訪問分組內(nèi)的全部鍵值,而僅僅需要訪問組內(nèi)的一個鍵,那么就不使用分組管理。
在實時處理鍵組的生命周期內(nèi),實時鍵組管理器負責(zé)實時處理鍵組內(nèi)鍵的訪問,它獨占訪問鍵組內(nèi)鍵的權(quán)利。雖然實時處理鍵組內(nèi)的鍵可能來自不同的數(shù)據(jù)存儲節(jié)點,但是實時處理鍵組服務(wù)可以緩存實時處理鍵組內(nèi)的鍵值,從而避免了代價高昂的磁盤I/O,減少了延遲時間。
論文實現(xiàn)了一個現(xiàn)代MRO軟件中的數(shù)據(jù)管理系統(tǒng)。分布式鍵值存儲采用數(shù)據(jù)存儲服務(wù),采用Voldemort和Berkeley DB實現(xiàn)數(shù)據(jù)存儲服務(wù),對Voldemort封裝了一個接口,可以連接實時處理鍵組服務(wù)的內(nèi)存存儲。
假設(shè)有G個并發(fā)的實時處理鍵組,每個實時處理鍵組中包含K個鍵,則系統(tǒng)中至少包含n×G×K個鍵,其中n是可擴展因子,它表示沒有被包含到實時處理鍵組中的鍵數(shù)量。實時處理任務(wù)發(fā)出創(chuàng)建實時處理鍵組的請求,其中包含實時處理鍵組成員,實時處理鍵組的成員的選擇是隨機的,成員的平均個數(shù)是K,標準偏差是σk。實時處理鍵組創(chuàng)建成功后,每個實時分析處理程序獲得全部的鍵值,全部獲得后執(zhí)行分析計算,等待數(shù)據(jù)的時間間隔為δ或者2δ,然后繼續(xù)重復(fù)以上的數(shù)據(jù)處理。
使用參數(shù)G,K,n,δ來評價系統(tǒng)各個方面的性能,前3個參數(shù)來說明可擴展性,而N用于評價實時處理鍵組建立和刪除時的系統(tǒng)開銷,δ則體現(xiàn)系統(tǒng)進行并發(fā)操作時的壓力測試。
通過將實時處理鍵組中的其他操作設(shè)置為0,從而使得創(chuàng)建過程的負載只包含創(chuàng)建操作,創(chuàng)建成功后立即執(zhí)行刪除操作。評價了使用不同傳輸方式及實時處理鍵組成員選擇方法時的延遲和吞吐量,其中傳輸協(xié)議分為可靠傳輸協(xié)議和不可靠傳輸協(xié)議,選擇方法分為隨機選擇參與者鍵和順序選擇參與者鍵。

圖4 創(chuàng)建實時處理鍵組請求的延遲時間
隨著并發(fā)實時分析計算的請求增加,圖4描述了實時處理鍵組創(chuàng)建請求的延遲情況。延遲時間是指客戶發(fā)出創(chuàng)建請求與收到建立成功消息之間的時間。從圖中明顯可以看出,順序選擇參與者鍵優(yōu)于隨機選擇參與者鍵,因為這些鍵存在于一個節(jié)點上,所以使用單個創(chuàng)建消息即可滿足;另外,實時處理鍵組中鍵的個數(shù)對延遲時間影響較小,因為請求是依照批處理方式發(fā)送的,假如有n個分布式節(jié)點,最多只發(fā)送n個消息,與參與者鍵的個數(shù)沒有關(guān)系。
圖5給出了一定時間內(nèi)建立實時處理鍵組的個數(shù),客戶數(shù)量從50增加到10 000的過程中,每秒鐘創(chuàng)建實時處理鍵組的個數(shù)也呈線性增長,但是隨著客戶數(shù)量的增大,增長停滯,其原因從圖4中也可以得到,客戶數(shù)量的增大,創(chuàng)建組的平均延遲時間增大,導(dǎo)致創(chuàng)建的組數(shù)量停滯。

圖5 創(chuàng)建組的吞吐量
本節(jié)評價實時處理鍵組操作的性能。實時處理鍵組建立后,從客戶端就模擬大量的操作,在評價中,主要比較論文中的系統(tǒng)與Voldemort、Berkeley DB、文獻[11]中的Megastore 以及文獻[12]中的ForestDB系統(tǒng)在操作上的平均延遲時間。論文中的系統(tǒng)延遲時間包括實時處理鍵組的建立、刪除時間以及附加的操作時間。對于Voldemort系統(tǒng),不需要建立組,也不需要保證實時應(yīng)用特性,因此它被作為性能基準來評價本系統(tǒng)的額外開銷。對于本系統(tǒng),更新操作產(chǎn)生后,系統(tǒng)保證全部的鍵更新完成。在實驗中,針對不同的N值進行評價,每個實時處理鍵組中鍵的個數(shù)K設(shè)置為15和60,δ設(shè)置為10 ms。

圖6 每個實時處理鍵組中每個操作的平均延遲時間(ms)
圖6給出了N值不同時每個操作的延遲時間。延遲時間計算方法是:
式中,tc表示實時處理鍵組建立與刪除時間,to表示操作花費時間,No表示操作的數(shù)量。
對于Voldemort系統(tǒng),延遲時間就是所有操作時間的平均時間。如圖6所示,由于Megastore以及ForestDB采用本文類似的技術(shù),所以這3種系統(tǒng)與Voldemort比較,實時處理鍵組帶來的額外開銷大約有10%~30%,隨著實時處理鍵組中操作數(shù)量的增加,額外開銷占用的比例進一步降低。盡管鍵值的更新不是直接進行持久存儲,而是通過實時處理鍵組服務(wù)被異步地提交到持久存儲,但是這種方式并沒有影響鍵值的更新效率。由于Megastore以及ForestDB是針對大規(guī)模事務(wù)操作以及數(shù)據(jù)類型多樣,而本文對于實時要求相對較高,并且數(shù)據(jù)類型單一,所以,相比較而言,本文中的系統(tǒng)比Megastore以及ForestDB性能要好一些,大約有10%左右。故這種采用二級緩存來形成實時應(yīng)用型可擴展大數(shù)據(jù)存儲系統(tǒng)的方式是一種有效的途徑。
隨著數(shù)據(jù)密集型計算的不斷增多,數(shù)據(jù)規(guī)模的不斷增大,可擴展性作為重要的特性被提出。本文提出的實時處理鍵組協(xié)議很好的滿足了可擴展性,系統(tǒng)已經(jīng)在項目中應(yīng)用,并得到評價,既可以滿足實時應(yīng)用的需求,也不降低鍵值存儲的效率。