本發(fā)明涉及一種響應(yīng)式serverless函數(shù)編排運(yùn)行裝置,屬于云計(jì)算。
背景技術(shù):
1、serverless計(jì)算是一種新興的云計(jì)算方式,其提出了一種無服務(wù)感知的概念,即開發(fā)者只需要將資源提交到serverless云計(jì)算平臺,就不用關(guān)心服務(wù)器的運(yùn)行狀態(tài)以及資源占用情況,只需要根據(jù)資源提供的接口進(jìn)行訪問即可。faas,函數(shù)即服務(wù),是一種服務(wù)提供方式,其思想旨在將函數(shù)作為服務(wù),對外暴露接口,用戶通過接口訪問函數(shù),則可以獲得函數(shù)計(jì)算返回的結(jié)果。通過serverless計(jì)算與faas相結(jié)合的方式,被稱作serverless函數(shù)計(jì)算。
2、當(dāng)一個計(jì)算任務(wù)較為復(fù)雜時(shí),單個serverless函數(shù)受限于平臺提供的最長計(jì)算時(shí)間,難以完成較為復(fù)雜的計(jì)算任務(wù),需要利用已經(jīng)部署的多個serverless函數(shù)進(jìn)行編排計(jì)算。serverless函數(shù)編排,指的是用戶定義一個由多個serverless函數(shù)協(xié)同運(yùn)行完成一個復(fù)雜任務(wù)的過程,serverless函數(shù)編排成為一個函數(shù)流用來執(zhí)行任務(wù)。為了實(shí)現(xiàn)函數(shù)流的高效運(yùn)行,現(xiàn)有的許多發(fā)明通過各種方式優(yōu)化函數(shù)編排的執(zhí)行。
3、根據(jù)ibm公司的論文顯示,serverless函數(shù)編排需要滿足三個范式:1)函數(shù)調(diào)用必須是黑盒調(diào)用,這意味著不能通過優(yōu)化已經(jīng)部署的serverless函數(shù)來優(yōu)化函數(shù)流;2)函數(shù)流的調(diào)用是函數(shù)調(diào)用的一種,即調(diào)用函數(shù)流應(yīng)該也擁有調(diào)用函數(shù)一樣的語義,進(jìn)一步說,函數(shù)流里頭可以嵌套另一個函數(shù)流;3)函數(shù)流調(diào)用需要避免雙倍計(jì)費(fèi),函數(shù)流在調(diào)用其他函數(shù)會等待結(jié)果,最終的運(yùn)行時(shí)間是所有被調(diào)用函數(shù)執(zhí)行之間的兩倍加上函數(shù)流本身的時(shí)間,避免雙倍計(jì)費(fèi)意味著應(yīng)該避免函數(shù)流無意義的等待時(shí)間。
4、一般而言,現(xiàn)有的serverless函數(shù)編排缺少聲明式的函數(shù)編排方式。部分serverless計(jì)算平臺廠商的serverless函數(shù)編排會通過yaml形式進(jìn)行表示,例如阿里云的cloudflow產(chǎn)品,其提供了一套以yaml為主要形式的dsl,進(jìn)行編排各個serverless函數(shù),該方法的缺點(diǎn)在于基于dsl的函數(shù)編排學(xué)習(xí)成本過高,并且難以調(diào)試;微軟的durablefunction則是通過命令式編程的方式允許用戶通過接口調(diào)用serverless函數(shù),而非聲明式;ibm的openwhisk則是通過算子的方式控制serverless函數(shù)流的運(yùn)行邏輯順序,該方法本質(zhì)上依然是命令式的函數(shù)編程,以程序控制結(jié)構(gòu)為核心。
5、一般而言,現(xiàn)有的serverless函數(shù)編排缺少響應(yīng)式的運(yùn)行形式,大部分的函數(shù)編排缺少自動并行的方式執(zhí)行。微軟的durable?function是通過錄制回放機(jī)制實(shí)現(xiàn)的編排函數(shù),當(dāng)其調(diào)用其他serverless函數(shù)時(shí),該編排函數(shù)會發(fā)生銷毀,待被調(diào)用的函數(shù)發(fā)送事件返回時(shí),則根據(jù)該事件再次重啟函數(shù),這種方式的執(zhí)行會將資源浪費(fèi)在不斷的重啟實(shí)例的開銷上,并且當(dāng)工作流過長時(shí),不斷地回放也會造成一定的計(jì)算時(shí)間浪費(fèi);阿里云的cloudflow則是通過用戶聲明并行、分支結(jié)構(gòu)的方式實(shí)現(xiàn)程序的并行化,未聲明并行化的部分將以串行的方式執(zhí)行。
技術(shù)實(shí)現(xiàn)思路
1、發(fā)明目的:針對現(xiàn)有技術(shù)中存在的問題與不足,本發(fā)明提供一套基于聲明式編排接口并以響應(yīng)式方式運(yùn)行的serverless函數(shù)編排裝置,實(shí)現(xiàn)serverless函數(shù)編排執(zhí)行的并行優(yōu)化。
2、技術(shù)方案:一種響應(yīng)式serverless函數(shù)編排運(yùn)行裝置,包括聲明式serverless函數(shù)編排裝置以及響應(yīng)式serverless函數(shù)流運(yùn)行裝置,聲明式serverless函數(shù)編排裝置通過提供聲明式的函數(shù)編排接口,將數(shù)據(jù)抽象為lambda項(xiàng)以及節(jié)點(diǎn),裝置將serverless函數(shù)編排編譯為靜態(tài)圖;響應(yīng)式serverless函數(shù)運(yùn)行裝置將靜態(tài)圖進(jìn)行拓?fù)渑判?,分析?shù)據(jù)之間的獨(dú)立性以及編排函數(shù)的并行性,通過響應(yīng)式運(yùn)行和并行計(jì)算的方式執(zhí)行靜態(tài)圖。
3、編排裝置通過提供sdk的方式,允許用戶使用前端語言編寫數(shù)據(jù)對象的流向形式,該過程稱為聲明式編排函數(shù)流;用戶提交前端語言編寫的函數(shù)流后,由編排裝置將用戶編寫的數(shù)據(jù)對象均抽象為節(jié)點(diǎn),每一個數(shù)據(jù)對象均通過一個節(jié)點(diǎn)進(jìn)行維護(hù),該過程稱為數(shù)據(jù)抽象為節(jié)點(diǎn);之后編排裝置將節(jié)點(diǎn)的依賴關(guān)系關(guān)聯(lián)起來,編譯成為靜態(tài)圖,該過程稱為靜態(tài)圖編譯。因此,編排裝置主要分為以下幾個步驟:聲明式編排函數(shù)流、數(shù)據(jù)抽象為節(jié)點(diǎn)、靜態(tài)圖編譯。
4、聲明式編排函數(shù)流指的是用戶通過聲明式編程的接口,以數(shù)據(jù)為中心,在用戶代碼中編寫各個數(shù)據(jù)的處理工作流。
5、數(shù)據(jù)抽象為節(jié)點(diǎn)指的是在程序中,所有的數(shù)據(jù)對象均視為lambda對象,對lambda對象的操作將以懶惰的方式作用到真實(shí)的數(shù)據(jù)對象上。lambda項(xiàng)通過數(shù)據(jù)節(jié)點(diǎn)進(jìn)行維護(hù),lambda項(xiàng)的轉(zhuǎn)化過程由控制節(jié)點(diǎn)維護(hù)。因此,數(shù)據(jù)抽象為節(jié)點(diǎn)便是將數(shù)據(jù)抽象為數(shù)據(jù)節(jié)點(diǎn)和控制節(jié)點(diǎn)之間的關(guān)系,數(shù)據(jù)節(jié)點(diǎn)以及控制節(jié)點(diǎn)對用戶均透明。
6、數(shù)據(jù)節(jié)點(diǎn)維護(hù)了一個lambda項(xiàng),包含兩種狀態(tài):就緒狀態(tài)與未就緒狀態(tài),若lambda項(xiàng)已經(jīng)有了實(shí)值,則為就緒狀態(tài),若lambda項(xiàng)沒有實(shí)值,則為未就緒狀態(tài)??刂乒?jié)點(diǎn)維護(hù)了一個函數(shù),其表達(dá)方式應(yīng)呈現(xiàn)為如下形式λx.f(x),表示接收一個參數(shù)作為入?yún)⒌暮瘮?shù),包含兩種狀態(tài):可計(jì)算狀態(tài)與不可計(jì)算狀態(tài),當(dāng)控制節(jié)點(diǎn)維護(hù)的函數(shù)的所有入?yún)⒕袑?shí)值,則為可計(jì)算狀態(tài),反之則為不可計(jì)算狀態(tài)。
7、數(shù)據(jù)節(jié)點(diǎn)與控制節(jié)點(diǎn)具有相互依賴的關(guān)系。一個數(shù)據(jù)節(jié)點(diǎn)可能會給0個或者多個控制節(jié)點(diǎn)發(fā)送數(shù)據(jù),這些控制節(jié)點(diǎn)成為該數(shù)據(jù)節(jié)點(diǎn)的后繼,該數(shù)據(jù)節(jié)點(diǎn)成為這些控制節(jié)點(diǎn)的依賴。一個數(shù)據(jù)節(jié)點(diǎn)依賴于一個控制節(jié)點(diǎn),即該數(shù)據(jù)節(jié)點(diǎn)的值需要控制節(jié)點(diǎn)所維護(hù)的函數(shù)計(jì)算而得,該數(shù)據(jù)節(jié)點(diǎn)成為控制節(jié)點(diǎn)的后繼。數(shù)據(jù)節(jié)點(diǎn)與控制節(jié)點(diǎn)的依賴關(guān)系滿足如下規(guī)約:一個數(shù)據(jù)節(jié)點(diǎn)的前驅(qū)至多有一個控制節(jié)點(diǎn),可能擁有多個后繼;一個控制節(jié)點(diǎn)的前驅(qū)可以有任意多個數(shù)據(jù)節(jié)點(diǎn),至多有一個后繼數(shù)據(jù)節(jié)點(diǎn);數(shù)據(jù)節(jié)點(diǎn)之間不會互相連接,控制節(jié)點(diǎn)之間不會互相連接。
8、靜態(tài)圖編譯指的是用戶定義的函數(shù)流在編譯過程中所包含的函數(shù)調(diào)用并不會發(fā)生真實(shí)調(diào)用,而是記錄下來,實(shí)現(xiàn)懶惰操作,最終形成一張靜態(tài)圖的過程。其在編譯的過程中包含兩個過程:懶惰執(zhí)行以及預(yù)執(zhí)行編譯。
9、懶惰執(zhí)行指的是serverless編排函數(shù)在運(yùn)行過程中產(chǎn)生的中間數(shù)據(jù)都通過lambda項(xiàng)表示,編排函數(shù)在調(diào)用其他serverless函數(shù)或?qū)ambda項(xiàng)執(zhí)行操作時(shí)不會等待該函數(shù)的執(zhí)行結(jié)果,而是將該結(jié)果的引用通過lambda項(xiàng)進(jìn)行維護(hù)。
10、預(yù)執(zhí)行編譯:編排函數(shù)中對所述lambda項(xiàng)的操作將被表示為對其維護(hù)的數(shù)據(jù)的操作,生成控制節(jié)點(diǎn)記錄對lambda項(xiàng)的操作記錄,并生成對應(yīng)的控制節(jié)點(diǎn)。具體過程如下:a)通過入?yún)⑸蓴?shù)據(jù)節(jié)點(diǎn):當(dāng)用戶調(diào)用一個函數(shù)或?qū)ambda項(xiàng)進(jìn)行操作時(shí),其入?yún)⒕鶗D(zhuǎn)化為lambda項(xiàng),并獲取或生成數(shù)據(jù)節(jié)點(diǎn);b)調(diào)用函數(shù)生成控制節(jié)點(diǎn):編排函數(shù)中所有的lambda轉(zhuǎn)化過程均可以轉(zhuǎn)化為函數(shù),用戶通過函數(shù)調(diào)用或直接作用于lambda項(xiàng)對數(shù)據(jù)進(jìn)行修改操作時(shí),該調(diào)用或修改操作會被轉(zhuǎn)化為一個函數(shù),該函數(shù)生成一個控制節(jié)點(diǎn),其依賴于步驟a)所述的數(shù)據(jù)節(jié)點(diǎn);c)通過出參生成數(shù)據(jù)節(jié)點(diǎn):通過步驟b)描述的控制節(jié)點(diǎn)的返回值為一個lambda項(xiàng),生成該lambda項(xiàng)的數(shù)據(jù)節(jié)點(diǎn),并將該數(shù)據(jù)節(jié)點(diǎn)作為步驟b)中的控制節(jié)點(diǎn)的后繼節(jié)點(diǎn),并將lambda返回給用戶。
11、運(yùn)行裝置主要分為以下幾個步驟實(shí)現(xiàn):拓?fù)渑判颉㈨憫?yīng)式執(zhí)行、并行計(jì)算。
12、拓?fù)渑判虻倪^程是分析出當(dāng)前的任務(wù)圖狀態(tài)有哪些已經(jīng)可計(jì)算或者就緒的節(jié)點(diǎn),將可計(jì)算或者就緒的節(jié)點(diǎn)加入到任務(wù)隊(duì)列,通過不斷獲取任務(wù)隊(duì)列中的節(jié)點(diǎn),獲取節(jié)點(diǎn)后續(xù)節(jié)點(diǎn),并向其發(fā)送消息,若后繼節(jié)點(diǎn)也達(dá)到了可計(jì)算或就緒狀態(tài),則將后繼節(jié)點(diǎn)加入到拓?fù)渑判蛑小?/p>
13、響應(yīng)式執(zhí)行是拓?fù)渑判虻暮罄m(xù)步驟,當(dāng)一個數(shù)據(jù)節(jié)點(diǎn)就緒時(shí),會向其指向的后繼控制節(jié)點(diǎn)發(fā)送實(shí)值信息,本質(zhì)上該實(shí)值信息便是函數(shù)的調(diào)用參數(shù)??刂乒?jié)點(diǎn)接收信息后將調(diào)用參數(shù)加入到自己的參數(shù)值中,該過程可表示為(λxy.xy)a=λy.ay,應(yīng)用參數(shù)后會判斷自己的參數(shù)條件是否滿足可計(jì)算條件,如果滿足計(jì)算條件,則觸發(fā)控制節(jié)點(diǎn)的執(zhí)行。a表示實(shí)參,y表示形參,等式表示一個接收xy兩個參數(shù)的函數(shù),同時(shí)接收了一個a作為實(shí)際參數(shù),替代x,變成了只需要接收一個y作為參數(shù),然后函數(shù)內(nèi)容已經(jīng)有a代替了x。
14、并行計(jì)算包含兩個方面的內(nèi)容。一方面是數(shù)據(jù)并行,當(dāng)一個數(shù)據(jù)節(jié)點(diǎn)中的數(shù)據(jù)是由多個lambda項(xiàng)以列表的形式聚合起來,并且對該數(shù)據(jù)節(jié)點(diǎn)的處理方式是mapreduce類型時(shí),本裝置將自動的為每一個數(shù)據(jù)生成一個控制節(jié)點(diǎn),并發(fā)地將控制節(jié)點(diǎn)中的函數(shù)作用于每個數(shù)據(jù)項(xiàng)上,最終把結(jié)果進(jìn)行聚合;另一方面是任務(wù)并行,當(dāng)有多個控制節(jié)點(diǎn)均處于可計(jì)算狀態(tài)即他們所依賴的數(shù)據(jù)節(jié)點(diǎn)相互獨(dú)立,這些控制節(jié)點(diǎn)就可以并行計(jì)算。
15、有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn):
16、其一,用戶基于聲明式編排的接口定義函數(shù)流可以更加自然地表示數(shù)據(jù)流的處理流程,通過函數(shù)式編程的思想表達(dá)較為自然;其二,通過靜態(tài)圖編譯的方式便于函數(shù)流的執(zhí)行優(yōu)化,通過預(yù)執(zhí)行函數(shù)流獲得靜態(tài)圖,則可以分析靜態(tài)圖上的數(shù)據(jù)依賴關(guān)系,沒有依賴關(guān)系的控制節(jié)點(diǎn)就可以實(shí)現(xiàn)并行優(yōu)化。