蔡 茂, 徐凌宇, 東 韓, 陳 亮, 杜金峰
(1.上海大學(xué) 計(jì)算機(jī)工程與科學(xué)學(xué)院,上海 200072;2.國家海洋信息中心,天津 300171)
隨著“數(shù)字海洋”項(xiàng)目的實(shí)施,我國海洋信息化工作不斷發(fā)展,建成了大量的專業(yè)海洋環(huán)境信息數(shù)據(jù)庫,搭建了多套應(yīng)用于海洋多種業(yè)務(wù)的信息系統(tǒng)。它們?yōu)槲覈Q笫聵I(yè)的發(fā)展提供了有力的信息保障和技術(shù)支撐。
然而以上這些各自獨(dú)立且內(nèi)部結(jié)構(gòu)相似的系統(tǒng)也存在以下問題:資源占用多,運(yùn)行成本高;傳統(tǒng)模式難以適應(yīng)業(yè)務(wù)部署的快速要求,缺乏統(tǒng)一部署計(jì)算資源的規(guī)劃;業(yè)務(wù)系統(tǒng)穩(wěn)定性和可靠性低,系統(tǒng)維護(hù)難度大。
新興的云計(jì)算與云服務(wù)技術(shù)可以有效地解決上述海洋信息系統(tǒng)建設(shè)中存在的問題。利用云計(jì)算技術(shù)構(gòu)建海洋環(huán)境信息綜合服務(wù)應(yīng)用框架體系,建設(shè)支撐海洋環(huán)境信息業(yè)務(wù)的低成本試驗(yàn)和運(yùn)營環(huán)境,可以提高海洋資源信息的可重用性與共享性以及應(yīng)用系統(tǒng)的可擴(kuò)展性。
SaaS(Software as a Service)是隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用軟件的成熟而興起的基于互聯(lián)網(wǎng)環(huán)境和云計(jì)算方式的新型軟件服務(wù)模式,是軟件和信息服務(wù)的重要發(fā)展方向[1]。在云平臺(cloud platform)上,服務(wù)最終體現(xiàn)在高效的服務(wù)組合上,以實(shí)現(xiàn)不同請求的業(yè)務(wù)邏輯。軟件即服務(wù)(SaaS)是以云計(jì)算為基礎(chǔ)的一種快速、共享、重用的IT應(yīng)用程序生成方法,稱之為軟件云服務(wù)。在面向用戶上,SaaS具有無硬件、無維護(hù)、無升級等多種優(yōu)勢,因此出現(xiàn)了很多相關(guān)的SaaS平臺產(chǎn)品。Hadoop是當(dāng)今使用最廣泛,發(fā)展最完善的云計(jì)算分布式系統(tǒng)基礎(chǔ)框架和開源分布式數(shù)據(jù)處理框架,被用于高效地處理海量數(shù)據(jù)。由于Hadoop具有可伸縮性、高可靠性、低成本性和高效性等優(yōu)點(diǎn),因此本文采用Hadoop作為底層云平臺的基礎(chǔ)開發(fā)和運(yùn)行框架。
海洋環(huán)境信息云服務(wù)體系框架可以向用戶提供可定制的個(gè)性化服務(wù),結(jié)合SaaS的思想,向用戶提供商品的基本單元為服務(wù),一個(gè)服務(wù)的實(shí)現(xiàn)是一個(gè)復(fù)雜的過程,需要調(diào)用云平臺的大量數(shù)據(jù)和資源,而用戶的整個(gè)需求,可以解析成由多個(gè)彼此關(guān)聯(lián)的服務(wù)單元組成的復(fù)雜整體。要處理好一個(gè)復(fù)雜的用戶需求和大批用戶同時(shí)提交的需求,并提供可靠的服務(wù),這對云服務(wù)體系框架提出了很高的調(diào)度與執(zhí)行要求。
為了滿足用戶的個(gè)性化請求,傳統(tǒng)的工作流建模[2]會(huì)采用基于組件的動(dòng)態(tài)結(jié)構(gòu)模型敏捷表達(dá)出客戶需求,然后建立基于工作流的需求結(jié)點(diǎn)元模型,對需求表達(dá)協(xié)作式工作流進(jìn)行語義描述,并構(gòu)建其管理邏輯結(jié)構(gòu),從而控制與協(xié)調(diào)需求表達(dá)的結(jié)點(diǎn)、數(shù)據(jù)及工作流的方向以實(shí)現(xiàn)工作流的自動(dòng)化處理過程。
本文把云計(jì)算技術(shù)與工作流技術(shù)相結(jié)合,提出了軟件服務(wù)流的概念。軟件服務(wù)流的基本思想是將原本分布放置在云平臺上執(zhí)行的錯(cuò)綜復(fù)雜的可執(zhí)行程序,通過細(xì)粒度中間件過度抽象成服務(wù)模型提供給用戶以定制,用戶的定制被解析成一個(gè)相互關(guān)聯(lián)的基本服務(wù)單元組成的流程圖,再在軟件服務(wù)流引擎的解析調(diào)度下完成自動(dòng)化執(zhí)行過程。
不同于傳統(tǒng)的工作流,軟件服務(wù)流的特點(diǎn)在于流程單元是云服務(wù),由于在云平臺上服務(wù)的執(zhí)行過程更加復(fù)雜和不可預(yù)知,軟件服務(wù)流的服務(wù)抽象也會(huì)更加復(fù)雜,它的自動(dòng)化執(zhí)行對于高效性、實(shí)時(shí)性、穩(wěn)定性、糾錯(cuò)能力的要求也更高。
系統(tǒng)執(zhí)行和交互設(shè)計(jì)流程如圖1所示。
圖1 系統(tǒng)總流程
首先,應(yīng)用層(上層)在向用戶提供個(gè)性化定制服務(wù)之前,將用戶需求結(jié)構(gòu)化抽象成底層平臺可執(zhí)行的一個(gè)個(gè)服務(wù)單元,將這些服務(wù)單元通過Web界面向用戶開放提供自定制服務(wù)[3]。用戶的自定制過程不是基本服務(wù)單元的簡單疊加,而是相互聯(lián)系的復(fù)雜串行、并行、包含等關(guān)系的集合。自定制服務(wù)流在促進(jìn)資源的合理配置和信息資源的有效傳遞和共享的同時(shí),提高了效率,也滿足了不同用戶的個(gè)性需求[4]。
在施動(dòng)層(底層),一個(gè)基本服務(wù)單元就是一個(gè)Hadoop上符合Map-Reduce規(guī)則的可執(zhí)行程序,程序的執(zhí)行需要提供HDFS程序路徑、用戶提供的參數(shù)及平臺的數(shù)據(jù)文件等[5]。
服務(wù)流引擎(中間層)在這兩層之間負(fù)責(zé)總的調(diào)度協(xié)調(diào)、服務(wù)與結(jié)構(gòu)化執(zhí)行模型的接口轉(zhuǎn)換與控制及容錯(cuò)與錯(cuò)誤處理等。
為了抽象用戶請求,簡化調(diào)度信息,屏蔽與調(diào)度工作無關(guān)的信息,本文設(shè)置了交互數(shù)據(jù)庫作為上下層的接口,Web服務(wù)器接收到一個(gè)用戶請求后,應(yīng)用層負(fù)責(zé)將其匹配成平臺的可執(zhí)行程序,將執(zhí)行路徑、執(zhí)行參數(shù)及用戶信息等寫入數(shù)據(jù)庫,這樣將用戶請求抽象成一個(gè)有向無環(huán)圖,將圖傳遞給引擎,由引擎解析調(diào)度遞交施動(dòng)層,施動(dòng)層再從交互數(shù)據(jù)庫中還原出執(zhí)行信息以進(jìn)行下一步的執(zhí)行操作[6-7]。
交互數(shù)據(jù)庫的設(shè)置完全釋放了引擎的額外工作壓力,使得引擎可以專注于處理調(diào)度、容錯(cuò)、優(yōu)化及錯(cuò)誤補(bǔ)救等工作,這在處理大規(guī)模用戶訪問時(shí)尤為重要。
服務(wù)抽象是將平臺底層的可執(zhí)行程序轉(zhuǎn)化成提供給用戶的服務(wù)模型。如何用平臺上有限的可執(zhí)行程序表達(dá)出用戶多樣的服務(wù)請求,本文借鑒SOA面向服務(wù)架構(gòu)中的服務(wù)粗細(xì)粒度組件轉(zhuǎn)化思想[8],設(shè)置了細(xì)粒度中間件作為過渡。模型匹配關(guān)系如圖2所示。
圖2 模型匹配關(guān)系
圖2中,細(xì)粒度中間件為Hadoop平臺可執(zhí)行的最小單位,是一個(gè)復(fù)雜的海洋表面溫度(Sea Surface Temperature,簡稱SST)融合算法,該算法加上對應(yīng)的監(jiān)測數(shù)據(jù),結(jié)合Matlab繪圖程序和相關(guān)連接程序可以組成一個(gè)可視化海溫預(yù)測的服務(wù)模型向用戶開放。而在底層,中間件是平臺執(zhí)行的最小單位,每個(gè)中間件均符合平臺Hadoop執(zhí)行規(guī)則的程序,但是平臺的可執(zhí)行模型庫又不僅僅是中間件的集合,本文可以將常用的一些中間件的有機(jī)組合或者中間件的優(yōu)化組合做成一個(gè)可執(zhí)行模型,放入可執(zhí)行模型庫。
簡單地說,服務(wù)模型和可執(zhí)行模型都是細(xì)粒度中間件的有機(jī)組合,服務(wù)模型是為了具體有效地描繪用戶的服務(wù)請求,而可執(zhí)行模型是更大程度地匹配Hadoop平臺執(zhí)行規(guī)范,優(yōu)化執(zhí)行效率。軟件服務(wù)流引擎的作用是負(fù)責(zé)將用戶定制的服務(wù)模型流拆分重組為可執(zhí)行模型流,以匹配優(yōu)化執(zhí)行;同時(shí)負(fù)責(zé)服務(wù)模型庫和可執(zhí)行模型庫的動(dòng)態(tài)更新與優(yōu)化工作,以保持系統(tǒng)的穩(wěn)定性與高效性。
一個(gè)用戶的請求最終可以被還原成一個(gè)帶權(quán)的有向無環(huán)圖(Directed Acyclic Graph,簡稱DAG)F,F(xiàn)= {TM,R},一個(gè)可執(zhí)行模型就是一個(gè)結(jié)點(diǎn),TM為結(jié)點(diǎn)的集合,R為各個(gè)結(jié)點(diǎn)之間的關(guān)系,這種關(guān)系主要是邏輯上的輸入輸出關(guān)系,例如T1→T2即表示T1的輸出作為T2的輸入。
2.3.1 工作流調(diào)度方式
傳統(tǒng)的工作流建模方式[9]即是通過定義活動(dòng)節(jié)點(diǎn)、有向邊及活動(dòng)的啟動(dòng)方式構(gòu)建基于有向圖的工作流模型,然后構(gòu)建活動(dòng)的狀態(tài)集、狀態(tài)函數(shù)、動(dòng)作模型和條件模型,并定義活動(dòng)的執(zhí)行規(guī)則,且詳細(xì)描述基于該規(guī)則的活動(dòng)內(nèi)部運(yùn)行機(jī)制,從而實(shí)現(xiàn)工作流的自動(dòng)化執(zhí)行。
傳統(tǒng)上,一個(gè)工作流系統(tǒng)經(jīng)常被設(shè)計(jì)成便于在一個(gè)活動(dòng)具有類似性質(zhì)的特定應(yīng)用領(lǐng)域的自動(dòng)化處理[10]。針對這些特定應(yīng)用,工作流系統(tǒng)的調(diào)度策略對于實(shí)時(shí)性的要求較低。
最直觀的解決方法是傳統(tǒng)的拓?fù)渑判蝽樞蛘{(diào)度,利用圖廣度優(yōu)先遍歷算法,得到F的拓?fù)溆行蛐蛄蠥,以序列A的順序交付執(zhí)行,該方法實(shí)現(xiàn)簡單、穩(wěn)定性高,但效率極低。
在工作流執(zhí)行中分層算法[11]廣泛使用。在使用分層算法前,要將已知的圖以層次圖的形式表示出來。在層次圖中,結(jié)點(diǎn)被分為若干個(gè)部分,每一部分稱為一層,同層頂點(diǎn)沒有邊連接。算法為:
(1)把所有的匯點(diǎn)(即出度為0的點(diǎn)),放置在最底層,即L1層。
(2)余下的每個(gè)結(jié)點(diǎn)u所放置的層數(shù)記為y(u),計(jì)算每個(gè)結(jié)點(diǎn)y值的公式為:其中,N+(u):= {v∈V|?(u,v)∈E}。
算法的思想是把最長路徑作為生成圖的高度,并且所有匯點(diǎn)放置在最底層,其他的路徑長度不會(huì)超過最長路徑,則最長路徑的長度為生成圖的總層數(shù),保證了最小高度的實(shí)現(xiàn),按照層次劃分線性執(zhí)行。
分層算法簡單,易于實(shí)現(xiàn),而且可以在線性時(shí)間內(nèi)結(jié)束。算法的邏輯清晰、易于實(shí)現(xiàn)、系統(tǒng)結(jié)構(gòu)嚴(yán)密、出錯(cuò)情況易處理,很大程度上實(shí)現(xiàn)了結(jié)點(diǎn)的并行執(zhí)行,但是也并沒有達(dá)到最大程度的并行。
2.3.2 EOE算法
帶權(quán)的n-層有向無環(huán)圖G=(V,E)的最小高度最長路徑為:
用分層算法的實(shí)際運(yùn)行時(shí)間為:
即每層的最長運(yùn)行時(shí)間之和,顯然這不是最高效率的。
而系統(tǒng)的理論最短執(zhí)行時(shí)間tmin應(yīng)該是流程的各執(zhí)行單元在執(zhí)行條件完備的情況下立即執(zhí)行,最后得到的執(zhí)行時(shí)間。由于軟件服務(wù)流的特征是執(zhí)行單元的復(fù)雜度、未知性更高,一個(gè)執(zhí)行單元的執(zhí)行過程是無法重現(xiàn)的,所以是無法預(yù)知的,tmin只能在流程執(zhí)行后計(jì)算出,作為調(diào)度算法效率的對比參照值而存在。為了接近tmin,最簡單的方法是把系統(tǒng)設(shè)計(jì)成一個(gè)監(jiān)控進(jìn)程不斷循環(huán)掃描軟件服務(wù)流中可執(zhí)行的模型結(jié)點(diǎn),顯然這種方式會(huì)加重系統(tǒng)負(fù)載,降低系統(tǒng)吞吐率和穩(wěn)定性。
為了得到分層算法清晰的拓?fù)渑判蛞员WC系統(tǒng)的穩(wěn)定性,同時(shí)也希望保證系統(tǒng)的高并發(fā)性使得處理時(shí)間接近tmin,本文提出了EOE(Execute Once Enabled),即一旦可以立即執(zhí)行的算法,以最高的并行效率和最低的處理開銷執(zhí)行流程。算法的基本步驟為:
(1)解析DAG圖,完整地保存圖各結(jié)點(diǎn)以及結(jié)點(diǎn)間的關(guān)系信息。
(2)開始結(jié)點(diǎn)標(biāo)記為可執(zhí)行結(jié)點(diǎn)。
(3)可執(zhí)行結(jié)點(diǎn)交付平臺執(zhí)行,同時(shí)開辟監(jiān)控進(jìn)程。
(4)監(jiān)控進(jìn)程監(jiān)控結(jié)點(diǎn)執(zhí)行狀態(tài),出錯(cuò)轉(zhuǎn)步驟(5),正確完成轉(zhuǎn)步驟(6)。
(5)處理出錯(cuò)信息后向上層報(bào)告,或重新執(zhí)行。
(6)處理監(jiān)控結(jié)點(diǎn)的后繼結(jié)點(diǎn),具體做法為:如果監(jiān)控結(jié)點(diǎn)無后繼結(jié)點(diǎn),則轉(zhuǎn)步驟(7);如果有后繼結(jié)點(diǎn),則順序處理監(jiān)控結(jié)點(diǎn)的各個(gè)后繼結(jié)點(diǎn),刪除監(jiān)控結(jié)點(diǎn)與后繼結(jié)點(diǎn)相關(guān)聯(lián)的邊,檢查后繼結(jié)點(diǎn)的入度信息,如果入度為0,則標(biāo)記為可執(zhí)行結(jié)點(diǎn),轉(zhuǎn)步驟(3);如果入度不為0,則不予處理。
(7)執(zhí)行完成,保存結(jié)果,遞交上層。
2.3.3 EOE算法分析
EOE算法的執(zhí)行高效性和實(shí)時(shí)性在于它的主動(dòng)執(zhí)行過程,主要體現(xiàn)在以下2方面:
(1)結(jié)點(diǎn)的執(zhí)行是在執(zhí)行過程中實(shí)時(shí)啟動(dòng)的。在分層算法中,結(jié)點(diǎn)的執(zhí)行順序在任務(wù)運(yùn)行前就已經(jīng)定了下來,同一層次的結(jié)點(diǎn)執(zhí)行是綁定的,一個(gè)結(jié)點(diǎn)的出錯(cuò)會(huì)延誤整個(gè)層次的執(zhí)行進(jìn)度。而在EOE算法中,由于每個(gè)結(jié)點(diǎn)在執(zhí)行條件完備時(shí)立即可執(zhí)行,這樣一旦執(zhí)行過程中有結(jié)點(diǎn)出錯(cuò),系統(tǒng)延誤會(huì)降到最低,出錯(cuò)結(jié)點(diǎn)只會(huì)影響到自己后繼結(jié)點(diǎn)的執(zhí)行。
(2)結(jié)點(diǎn)的執(zhí)行是主動(dòng)激活模式的。本文將圖的信息保存后,從起始結(jié)點(diǎn)開始執(zhí)行,每個(gè)正確執(zhí)行完成的結(jié)點(diǎn)將激活自己的后繼結(jié)點(diǎn)中所有執(zhí)行條件完備的可執(zhí)行結(jié)點(diǎn),不可執(zhí)行的結(jié)點(diǎn)丟棄處理,會(huì)由未完成的前驅(qū)結(jié)點(diǎn)稍后激活。這樣的處理將系統(tǒng)所開辟的執(zhí)行即監(jiān)控進(jìn)程降到最低,節(jié)約了系統(tǒng)資源,提高了執(zhí)行效率。
系統(tǒng)應(yīng)用在國家海洋信息中心海洋環(huán)境信息云服務(wù)專用服務(wù)器上,初步demo已經(jīng)部署運(yùn)行成功。
在實(shí)驗(yàn)室環(huán)境下,綜合考慮交互頻率和處理負(fù)荷,Web服務(wù)器和數(shù)據(jù)庫服務(wù)器部署在一臺機(jī)器上,而引擎和施動(dòng)層部署在一臺服務(wù)器上,Hadoop平臺由一臺PC做主控服務(wù)器,16臺PC做數(shù)據(jù)服務(wù)器?;A(chǔ)服務(wù)單元,數(shù)據(jù)文件選擇MB級的小文件和GB乃至數(shù)十GB級的中型文件,而可執(zhí)行程序則選擇WordCount和Multyply做模擬運(yùn)行。本文使用了多臺機(jī)器模擬多用戶訪問,其中的一個(gè)任務(wù)的DAG圖和運(yùn)行結(jié)果記錄如圖3所示。
圖3 模擬任務(wù)的DAG圖和運(yùn)行結(jié)果數(shù)據(jù)庫截圖
如果使用分層算法,exe 5為最底層L1,exe 3和exe 4為L2層,exe 2為L3層,exe 0和exe 1為L4層。分析可得各算法效率分析結(jié)果,見表1所列。表1中,執(zhí)行效率r=tmin/t,r∈ (0,1)。
由表1可見,EOE算法的執(zhí)行效率最接近理論最優(yōu)值,而進(jìn)一步分析數(shù)據(jù)庫中的時(shí)間節(jié)點(diǎn)發(fā)現(xiàn),EOE算法相對于理論最優(yōu)算法的冗余時(shí)間發(fā)生在當(dāng)可執(zhí)行結(jié)點(diǎn)執(zhí)行完畢處理后續(xù)結(jié)點(diǎn)時(shí),處理時(shí)延是相對固定的,在可執(zhí)行模型執(zhí)行規(guī)模相對較小時(shí),這段處理時(shí)延會(huì)在一定程度上影響系統(tǒng)效率,但當(dāng)應(yīng)用在大規(guī)??蓤?zhí)行模型的執(zhí)行調(diào)度時(shí),這個(gè)相對固定的處理時(shí)延是可以忽略的。本文嘗試使用GB及數(shù)十GB級的數(shù)據(jù)文件,使得可執(zhí)行模型的執(zhí)行時(shí)間盡量延長,最后可以驗(yàn)證,EOE算法相對于理論最優(yōu)值的處理時(shí)延始終固定在數(shù)秒至數(shù)十秒的規(guī)模。
表1 各算法效率分析對比
由運(yùn)行結(jié)果可以看出,同一種可執(zhí)行模型,由于數(shù)據(jù)、平臺負(fù)載等條件不同,在不同結(jié)點(diǎn)上執(zhí)行時(shí),執(zhí)行時(shí)間都不相同,但每個(gè)結(jié)點(diǎn)在執(zhí)行條件完備,即所有前趨結(jié)點(diǎn)正確執(zhí)行后都可立即執(zhí)行。
本文結(jié)合傳統(tǒng)的工作流自動(dòng)化處理機(jī)制,提出了云計(jì)算中實(shí)現(xiàn)SaaS服務(wù)的軟件服務(wù)流模式。首先將底層Hadoop平臺執(zhí)行的復(fù)雜云計(jì)算程序抽象成向用戶提供的服務(wù)模型,用戶的自定制服務(wù)轉(zhuǎn)化成可執(zhí)行模型流程后,由軟件服務(wù)流引擎自動(dòng)調(diào)度處理執(zhí)行,運(yùn)用改進(jìn)的EOE實(shí)時(shí)調(diào)度算法,可最大限度地實(shí)現(xiàn)系統(tǒng)的并行性,同時(shí)監(jiān)控進(jìn)程的實(shí)時(shí)激活機(jī)制也可以將系統(tǒng)的處理開銷降到最低。在海洋環(huán)境信息云體系框架下的應(yīng)用證明了該模式的可行性,目前已經(jīng)對數(shù)十GB級別的執(zhí)行文件和數(shù)十用戶同時(shí)訪問的情況做了可行性驗(yàn)證實(shí)驗(yàn)。
[1] Li Weiping.An analysis of new features for workflow system in the SaaS software[C]//International Conference on Interaction Sciences:Information Technology,Culture and Human,Seoul,Korea,2009:110-114.
[2] 楊 沁,衛(wèi)道柱,潘秀琴.面向需求表達(dá)的個(gè)性化產(chǎn)品協(xié)作式工作流建模[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2010,33(10):1462-1467.
[3] 羅小利,吳清烈.SaaS軟件服務(wù)基于大規(guī)模定制的業(yè)務(wù)邏輯框架研究[J].電信科學(xué),2011(9):26-31.
[4] Das C,Mohan G H,Roy R,et al.Quo Vadis,SaaS a system dynamics model based enquiry into the SaaS industry[C]//International Conference on Information Management and Engineering,2010:732-737.
[5] Borthakur D.HDFS architecture guide[EB/OL].[2011-10-07].http://hadoop.apache.org/common/docs/current/hdfs-design.html.
[6] Zhang Liyong,Wen Yan,Han Yanbo.A proactive approach to load balancing of workflow execution in a SaaS environment[C]//International Symposium on Service Oriented System Engineering,2010:39-46.
[7] Wu Bin,Deng Shuiguang,Li Ying,et al.Reference models for SaaS oriented business workflow management systems.[C]//International Conference on Services Computing,2011:242-249.
[8] 張 曌.基于SOA的網(wǎng)絡(luò)管理系統(tǒng)架構(gòu)及應(yīng)用研究[D].上海:上海交通大學(xué),2007.
[9] 陳四根,蔣增強(qiáng),安蘇華,等.基于有向圖的工作流建模及其運(yùn)行[J].合肥工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2007,30(1):60-65.
[10] Liu Xiao,Ni Zhiwei,Yuan Dong.A novel statistical timeseries pattern based interval forecasting strategy for activity durations in workflow systems[J].Journal of Software and System,2011,84:354-376.
[11] Chen Jianxin,Tang Hai.Research on layering algorithm of DAG[C]//International Conference on Computer Science and Software Engineering,2008:271-274.