本發(fā)明涉及一種任務(wù)調(diào)度裝置,尤其涉及針對(duì)大數(shù)據(jù)任務(wù)的調(diào)度裝置。
背景技術(shù):
隨著大數(shù)據(jù)時(shí)代的來臨,如何實(shí)現(xiàn)高效的存儲(chǔ)和計(jì)算,通常采用的提高CPU性能和改用更大容量磁盤的做法,已經(jīng)變得越來越困難。在這種背景下,以網(wǎng)絡(luò)和網(wǎng)絡(luò)通信技術(shù)為依托,將分散在不同地理位置的計(jì)算機(jī)連接起來,組成空間上分散、邏輯上統(tǒng)一的數(shù)據(jù)存儲(chǔ)和計(jì)算集群,成為當(dāng)前實(shí)現(xiàn)大規(guī)模數(shù)據(jù)處理的主要選擇,以及不同大數(shù)據(jù)計(jì)算框架層出不窮,如面向大數(shù)據(jù)存儲(chǔ)計(jì)算的hadoop,面向內(nèi)存迭代運(yùn)算的spark,專門針對(duì)流式計(jì)算的storm等,這些計(jì)算框架在處理各自領(lǐng)域業(yè)務(wù)時(shí)都有特定的優(yōu)化性能十分高效,但是這些計(jì)算框架都存在一個(gè)問題,那就是任務(wù)間的協(xié)作依賴處理問題,當(dāng)業(yè)務(wù)計(jì)算任務(wù)之間存在先后執(zhí)行依賴的時(shí)候,計(jì)算框架就往往受到嚴(yán)重制約,甚至引起效率在數(shù)量級(jí)程度的下降。
技術(shù)實(shí)現(xiàn)要素:
以下給出一個(gè)或多個(gè)方面的簡(jiǎn)要概述以提供對(duì)這些方面的基本理解。此概述不是所有構(gòu)想到的方面的詳盡綜覽,并且既非旨在指認(rèn)出所有方面的關(guān)鍵性或決定性要素亦非試圖界定任何或所有方面的范圍。其唯一的目的是要以簡(jiǎn)化形式給出一個(gè)或多個(gè)方面的一些概念以為稍后給出的更加詳細(xì)的描述之序。
本發(fā)明的目的在于解決上述問題,提供了一種大數(shù)據(jù)任務(wù)調(diào)度裝置,是一種通用的大數(shù)據(jù)任務(wù)調(diào)度方案,可以在不同平臺(tái)上運(yùn)行,提高大數(shù)據(jù)的處理性能。
本發(fā)明的技術(shù)方案為:本發(fā)明揭示了一種大數(shù)據(jù)任務(wù)調(diào)度裝置,包括執(zhí)行器、時(shí)間存儲(chǔ)接口、數(shù)據(jù)接口以及調(diào)度器,其中:
執(zhí)行器,封裝具體任務(wù)的執(zhí)行,提供統(tǒng)一的調(diào)用接口供調(diào)度器調(diào)用;
時(shí)間存儲(chǔ)接口,記錄數(shù)據(jù)接口的時(shí)間,并提供查詢服務(wù);
數(shù)據(jù)接口,存儲(chǔ)數(shù)據(jù);
調(diào)度器,實(shí)現(xiàn)大數(shù)據(jù)各個(gè)任務(wù)之間的調(diào)度。
根據(jù)本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的一實(shí)施例,執(zhí)行器實(shí)現(xiàn)的操作包括數(shù)據(jù)清洗、數(shù)據(jù)結(jié)構(gòu)的改變、數(shù)據(jù)計(jì)算。
根據(jù)本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的一實(shí)施例,執(zhí)行器執(zhí)行執(zhí)行機(jī)制是同步和異步同時(shí)存在,多個(gè)任務(wù)依賴鏈之間是異步的,在一個(gè)任務(wù)依賴鏈中任務(wù)和任務(wù)之間是同步的。
根據(jù)本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的一實(shí)施例,時(shí)間存儲(chǔ)接口進(jìn)一步包括:
時(shí)間更新單元,當(dāng)任務(wù)成功執(zhí)行時(shí),更新數(shù)據(jù)的截止時(shí)間;
時(shí)間查詢單元,查詢數(shù)據(jù)的截止時(shí)間;
時(shí)間修改單元,更改數(shù)據(jù)的截止時(shí)間。
根據(jù)本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的一實(shí)施例,數(shù)據(jù)接口進(jìn)一步包括:
按時(shí)間存儲(chǔ)單元,基于時(shí)間標(biāo)識(shí)存儲(chǔ)數(shù)據(jù);
非時(shí)間存儲(chǔ)單元,不按時(shí)間標(biāo)識(shí)存儲(chǔ)數(shù)據(jù);
數(shù)據(jù)獲取單元,提供數(shù)據(jù)分片計(jì)算的信息,對(duì)異構(gòu)的底層數(shù)據(jù)提供讀取的封裝。
根據(jù)本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的一實(shí)施例,調(diào)度器進(jìn)一步包括:
數(shù)據(jù)管理模塊,計(jì)算全量數(shù)據(jù)的運(yùn)算,計(jì)算相對(duì)時(shí)間內(nèi)的數(shù)據(jù),對(duì)單位時(shí)間數(shù)據(jù)進(jìn)行增量計(jì)算;
任務(wù)依賴模塊,處理任務(wù)依賴隊(duì)列中各個(gè)任務(wù)執(zhí)行的先后順序;
容錯(cuò)機(jī)制模塊,根據(jù)不同集群本身的容錯(cuò)機(jī)制做定制化對(duì)接;
補(bǔ)跑策略模塊,讓數(shù)據(jù)接口從其上游的數(shù)據(jù)接口重新獲取數(shù)據(jù)并進(jìn)行計(jì)算,若數(shù)據(jù)接口是時(shí)間相關(guān)的,則通過時(shí)間存儲(chǔ)接口將下游所有數(shù)據(jù)時(shí)間設(shè)為故障或延遲發(fā)生前,再重啟相關(guān)任務(wù)鏈,以使數(shù)據(jù)計(jì)算正確,若數(shù)據(jù)接口是時(shí)間無關(guān)的,則直接重啟相關(guān)任務(wù)鏈。
本發(fā)明對(duì)比現(xiàn)有技術(shù)有如下的有益效果:本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置中設(shè)有執(zhí)行器、時(shí)間存儲(chǔ)接口、數(shù)據(jù)接口以及調(diào)度器。本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置 在不同的平臺(tái)上實(shí)現(xiàn)運(yùn)行,可以用任意現(xiàn)代編程語言來實(shí)現(xiàn),包括但不限于java、scala、ruby、python、C#、C++等。數(shù)據(jù)調(diào)度在執(zhí)行層面會(huì)被拆解為若干小而具體的任務(wù)進(jìn)行,例如mapreduce、hive sql等,優(yōu)化的異構(gòu)的調(diào)度不同計(jì)算框架的任務(wù)。
附圖說明
圖1示出了本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的實(shí)施例的原理圖。
具體實(shí)施方式
在結(jié)合以下附圖閱讀本公開的實(shí)施例的詳細(xì)描述之后,能夠更好地理解本發(fā)明的上述特征和優(yōu)點(diǎn)。在附圖中,各組件不一定是按比例繪制,并且具有類似的相關(guān)特性或特征的組件可能具有相同或相近的附圖標(biāo)記。
圖1示出了本發(fā)明的大數(shù)據(jù)任務(wù)調(diào)度裝置的實(shí)施例的原理。請(qǐng)參見圖1,本實(shí)施例的大數(shù)據(jù)任務(wù)調(diào)度裝置包括:執(zhí)行器1、時(shí)間存儲(chǔ)接口2、數(shù)據(jù)接口3以及調(diào)度器4。
其中執(zhí)行器1用于封裝具體任務(wù)的執(zhí)行,提供統(tǒng)一的調(diào)用接口供調(diào)度器4調(diào)用。執(zhí)行器1實(shí)現(xiàn)的操作可能是hadoop、hbase、hive、spark等,它們主要是完成業(yè)務(wù)的一些計(jì)算,如數(shù)據(jù)的清洗、數(shù)據(jù)結(jié)構(gòu)的改變、數(shù)據(jù)的計(jì)算等操作。
執(zhí)行器1執(zhí)行機(jī)制上可以是異步的也可以是同步的,以適應(yīng)不同場(chǎng)景調(diào)度并發(fā)性能的需求。執(zhí)行器1執(zhí)行機(jī)制大量使用同步和異步策略。當(dāng)有大量的且不存在依賴的任務(wù)先后提交到集群時(shí),集群不可能等一個(gè)任務(wù)完成了再執(zhí)行另外一個(gè)任務(wù),這樣會(huì)導(dǎo)致效率低下,所以并行且異步執(zhí)行多任務(wù)是非常有必要且高效的。任務(wù)與任務(wù)之間沒有任何影響,一個(gè)任務(wù)的失敗不會(huì)影響到另外一個(gè)任務(wù)的執(zhí)行,以及任務(wù)執(zhí)行的結(jié)果;當(dāng)業(yè)務(wù)處理任務(wù)之間存在依賴關(guān)系的時(shí)候,只有等被依賴的任務(wù)執(zhí)行完畢,依賴的數(shù)據(jù)準(zhǔn)備好了,下一個(gè)依賴的任務(wù)才能開始執(zhí)行,當(dāng)被依賴的任務(wù)執(zhí)行失敗,那么接下來依賴的任務(wù)就不再執(zhí)行了,以此類推。這種同步機(jī)制雖然降低了效率,但是再保證數(shù)據(jù)的準(zhǔn)確性上還是有必要這樣做的。
所以執(zhí)行器1執(zhí)行執(zhí)行機(jī)制是同步和異步同時(shí)存在的,多個(gè)任務(wù)依賴鏈之間是異步的,而在一個(gè)任務(wù)依賴鏈中任務(wù)與任務(wù)之間是同步的。
時(shí)間存儲(chǔ)接口2主要負(fù)責(zé)記錄數(shù)據(jù)接口的時(shí)間,并提供查詢服務(wù)。時(shí)間存儲(chǔ)接口2進(jìn)一步包括時(shí)間更新單元21、時(shí)間查詢單元22以及時(shí)間修改單元23。其中時(shí)間更新單元21用于實(shí)現(xiàn)當(dāng)任務(wù)成功執(zhí)行時(shí),更新數(shù)據(jù)的截止時(shí)間。當(dāng)任務(wù)成功執(zhí)行,系統(tǒng)會(huì)調(diào)用時(shí)間存儲(chǔ)接口更新數(shù)據(jù)的截止時(shí)間,也就是該數(shù)據(jù)任務(wù)下次要執(zhí)行的開始的時(shí)間,但是當(dāng)該任務(wù)在本次執(zhí)行失敗,那么在記錄的時(shí)間不做變動(dòng)仍然是上次該數(shù)據(jù)上次成功執(zhí)行的時(shí)間。時(shí)間查詢單元22用于查詢數(shù)據(jù)的截止時(shí)間。時(shí)間修改單元23用于更改數(shù)據(jù)的截止時(shí)間。時(shí)間修改單元23提供時(shí)間修改服務(wù),由于大數(shù)據(jù)計(jì)算的特殊性,有時(shí)候任務(wù)計(jì)算的數(shù)據(jù)會(huì)出現(xiàn)不準(zhǔn)確,比如可能是數(shù)據(jù)生成與消費(fèi)異步,延遲等情況導(dǎo)致的,可以通過該接口把數(shù)據(jù)的截止時(shí)間即下次執(zhí)行的時(shí)間向前調(diào)整,這樣就可以讓這部分?jǐn)?shù)據(jù)重新進(jìn)行計(jì)算。每當(dāng)新的任務(wù)要上線的時(shí)候,也可以通過該接口事先設(shè)置好對(duì)應(yīng)數(shù)據(jù)接口的第一次運(yùn)行的起始時(shí)間。
數(shù)據(jù)接口3負(fù)責(zé)存儲(chǔ)數(shù)據(jù),對(duì)不同系統(tǒng)上的數(shù)據(jù)存取提供統(tǒng)一的抽象,如hbase、hive、hdfs、redis、以及mysql等關(guān)系型數(shù)據(jù)庫。數(shù)據(jù)存儲(chǔ)上大體分為按時(shí)間存儲(chǔ),以及不按時(shí)間存儲(chǔ)。相應(yīng)的,數(shù)據(jù)接口3包括按時(shí)間存儲(chǔ)單元31、非時(shí)間存儲(chǔ)單元32以及數(shù)據(jù)獲取單元33。
其中按時(shí)間存儲(chǔ)單元31是基于時(shí)間標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)。按時(shí)間存儲(chǔ)的數(shù)據(jù),具體的粒度可以從年細(xì)分到秒甚至毫秒,并提供按相應(yīng)單位量獲取的接口,以及數(shù)據(jù)時(shí)間的起始范圍接口。數(shù)據(jù)按時(shí)間存儲(chǔ)一方面是考慮到是隨著時(shí)間線型增長(zhǎng)的,通過按時(shí)間存取可以很自然的設(shè)計(jì)數(shù)據(jù)的分片獲取方式,另外一方面很多業(yè)務(wù)并不要求使用全量數(shù)據(jù),例如推薦系統(tǒng)一般只考慮用戶最近一段時(shí)間的行為做推薦,用戶行為會(huì)隨著年齡和使用時(shí)間發(fā)生變化,取全量數(shù)據(jù)做分析是不合適的,在這個(gè)例子下,我們會(huì)安裝天匯總用戶行為,數(shù)據(jù)的粒度設(shè)為天,然后推薦的離線分析接口再按照一定時(shí)間范圍從用戶行為的數(shù)據(jù)接口獲取數(shù)據(jù)。
非時(shí)間存儲(chǔ)單元32是不按時(shí)間標(biāo)識(shí)存儲(chǔ)數(shù)據(jù)。非按時(shí)間存儲(chǔ)的數(shù)據(jù),只提供全量獲取的接口。當(dāng)要存儲(chǔ)的數(shù)據(jù)是以后不變的或者是變化很少的數(shù)據(jù)時(shí),數(shù)據(jù)存儲(chǔ)時(shí)就沒有必要按照時(shí)間的標(biāo)識(shí)去存儲(chǔ)了。
數(shù)據(jù)獲取單元33是提供數(shù)據(jù)分片計(jì)算的信息,對(duì)異構(gòu)的底層數(shù)據(jù)提供讀取的封裝。不論數(shù)據(jù)如何存儲(chǔ),數(shù)據(jù)接口都提供數(shù)據(jù)分片計(jì)算的信息,這個(gè)是大數(shù)據(jù)并行計(jì)算的基礎(chǔ),通過分片接口也可以對(duì)異構(gòu)的底層數(shù)據(jù)提供高效讀取的封裝。更多數(shù)據(jù)接口細(xì)節(jié)可以參考調(diào)度器的數(shù)據(jù)管理說明。
調(diào)度器4負(fù)責(zé)大數(shù)據(jù)各個(gè)任務(wù)之間的調(diào)度。作為方案核心,具有以下功能,數(shù)據(jù)管理、任務(wù)依賴、容錯(cuò)機(jī)制、補(bǔ)跑策略。通過執(zhí)行器的抽象,各個(gè)異構(gòu)的計(jì)算框架在調(diào)度上并沒有區(qū)別。
調(diào)度器4進(jìn)一步包括數(shù)據(jù)管理模塊41、任務(wù)依賴模塊42、容錯(cuò)機(jī)制模塊43以及補(bǔ)跑策略模塊44。
數(shù)據(jù)管理模塊41計(jì)算全量數(shù)據(jù)的運(yùn)算,計(jì)算相對(duì)時(shí)間內(nèi)的數(shù)據(jù),對(duì)單位時(shí)間數(shù)據(jù)進(jìn)行增量計(jì)算。
大數(shù)據(jù)的運(yùn)算統(tǒng)一用以下幾種方式概括:
1)計(jì)算全量數(shù)據(jù)的運(yùn)算,常見于各種全站式數(shù)據(jù)分析和挖掘,在這種情形下,數(shù)據(jù)任務(wù)的輸入從依賴的數(shù)據(jù)接口獲取分片信息,進(jìn)而提交給任務(wù)執(zhí)行器進(jìn)行任務(wù)計(jì)算。
2)計(jì)算相對(duì)時(shí)間內(nèi)的數(shù)據(jù),常見于近期數(shù)據(jù)分析和挖掘,在這種情形下,數(shù)據(jù)任務(wù)的輸入通過時(shí)間存儲(chǔ)接口獲取分片信息,進(jìn)而提交給任務(wù)執(zhí)行器進(jìn)行任務(wù)計(jì)算。
3)對(duì)單位時(shí)間數(shù)據(jù)進(jìn)行增量計(jì)算,常見于日常數(shù)據(jù)收集和計(jì)算,為其他計(jì)算提供基礎(chǔ),在這種情形下,數(shù)據(jù)任務(wù)依賴于時(shí)間存儲(chǔ)接口并對(duì)輸入數(shù)據(jù)任務(wù)完成情況做檢查,確保數(shù)據(jù)計(jì)算時(shí)的完整性。
上文提到的時(shí)間處理的具體規(guī)則如下:
1)任務(wù)執(zhí)行前會(huì)獲得一個(gè)當(dāng)前時(shí)間戳,任務(wù)不自己獲取當(dāng)前時(shí)間,一切時(shí)間通過該時(shí)間戳計(jì)算。
2)如果有結(jié)束時(shí)間的任務(wù),根據(jù)固定規(guī)則把時(shí)間戳加工成任務(wù)的結(jié)束時(shí)間:
a.首先確定粗結(jié)束時(shí)間:如果輸入數(shù)據(jù)接口是按時(shí)間存儲(chǔ),并且按照原始數(shù)據(jù)收集計(jì)算而來,則使用傳入的時(shí)間戳,否則使用輸入數(shù)據(jù)接口的最后結(jié)束時(shí)間,如果有多個(gè)輸入數(shù)據(jù)接口,取時(shí)間最早的那個(gè)。
b.檢查輸入數(shù)據(jù)的時(shí)間粒度是否大于本任務(wù)的時(shí)間粒度,如果大于則報(bào)錯(cuò)(輸入數(shù)據(jù)接口如果跟時(shí)間無關(guān)也報(bào)錯(cuò))
c.把粗結(jié)束時(shí)間裁剪成任務(wù)輸出數(shù)據(jù)的粒度,如果輸出數(shù)據(jù)跟時(shí)間無關(guān),則不做剪裁。這樣就獲得了結(jié)束時(shí)間
3)如果是增量時(shí)間任務(wù)則通過時(shí)間服務(wù)獲取自己上次的完成時(shí)間作為開始時(shí)間,如果是相對(duì)時(shí)間任務(wù)根據(jù)結(jié)束時(shí)間計(jì)算出相對(duì)時(shí)間作為開始時(shí)間
4)如果有容錯(cuò)方案(具體可以參考容錯(cuò)方案一節(jié))或者特殊要求,會(huì)把之前拿到的開始或結(jié)束時(shí)間做正負(fù)修正,但是修正范圍必須是整數(shù)倍的任務(wù)時(shí)間粒度
5)如果有最大運(yùn)行范圍限制(避免單次運(yùn)行占用太多資源)會(huì)對(duì)結(jié)束時(shí)間做裁剪,使得開始結(jié)束時(shí)間范圍不超過運(yùn)行范圍限制
6)如果輸入數(shù)據(jù)接口不滿足結(jié)束時(shí)間要求,例如相對(duì)時(shí)間任務(wù)最近n天必須是昨天開始的n天,則當(dāng)前任務(wù)掛起進(jìn)入等待。
任務(wù)依賴模塊42處理任務(wù)依賴隊(duì)列中各個(gè)任務(wù)執(zhí)行的先后順序。任務(wù)依賴機(jī)制,處理的是一個(gè)任務(wù)依賴隊(duì)列中各個(gè)任務(wù)執(zhí)行的先后順序,依賴的原則有:
順序性:被依賴的任務(wù)永遠(yuǎn)執(zhí)行在依賴的任務(wù)前,比如A任務(wù)依賴于B任務(wù),只有當(dāng)B任務(wù)跑成功完了,A任務(wù)才能跑。
串聯(lián)性:任務(wù)依賴隊(duì)列中的任務(wù)是串聯(lián)的,前一個(gè)任務(wù)跑失敗了,后面的任務(wù)就不在跑了,這一點(diǎn)是為了避免不必要的浪費(fèi)時(shí)間和數(shù)據(jù)不準(zhǔn)確,比如B任務(wù)需要處理A任務(wù)跑完的數(shù)據(jù),如果A任務(wù)跑失敗了,B任務(wù)就沒有數(shù)據(jù)了,當(dāng)然任務(wù)依賴鏈就斷了。
并發(fā)性:當(dāng)任務(wù)運(yùn)行沒有依賴關(guān)系時(shí),根據(jù)集群情況允許任務(wù)并發(fā)執(zhí)行。
資源調(diào)度性:調(diào)度器會(huì)把它全部的資源數(shù)字化,如內(nèi)存數(shù)、CPU核數(shù)、硬盤數(shù)、機(jī)器數(shù)、網(wǎng)絡(luò)帶寬等,每個(gè)任務(wù)會(huì)請(qǐng)求數(shù)字化的資源,完成會(huì)釋放它之前獲取的資源。當(dāng)資源不夠,會(huì)嘗試調(diào)度其他資源較小的任務(wù),當(dāng)全部資源都不足,調(diào)度器就會(huì)進(jìn)入等待,直到有足夠的資源釋放。系統(tǒng)也支持定制化的資源調(diào)度,例如最大最小資源任務(wù)優(yōu)先等。
完整性:如果任務(wù)依賴隊(duì)列中任務(wù)按照依賴順序執(zhí)行下去,那么依賴隊(duì)列中的最后一個(gè)任務(wù)一定會(huì)被執(zhí)行到。
容錯(cuò)機(jī)制模塊43根據(jù)不同集群本身的容錯(cuò)機(jī)制做定制化對(duì)接。調(diào)度器會(huì)根據(jù)不同集群本身的容錯(cuò)機(jī)制做定制化對(duì)接,在充分利用底層集群特性上,調(diào)度器還把數(shù)據(jù)接口設(shè)計(jì)為冪等的,支持?jǐn)?shù)據(jù)重復(fù)計(jì)算,而不是有狀態(tài)的,多次計(jì)算會(huì)導(dǎo)致數(shù)據(jù)不同,例如增加操作就是有狀態(tài)的,運(yùn)行多次就會(huì)重復(fù)增加多次,在這種情況下一般會(huì)用累加歷史數(shù)據(jù)來代替,等等。同時(shí)調(diào)度器也設(shè)計(jì)了統(tǒng)一的rollback接口,即使有特殊情況也可以通過該接口來還原數(shù)據(jù),保證數(shù)據(jù)接口的冪等性。
補(bǔ)跑策略模塊44讓數(shù)據(jù)接口從其上游的數(shù)據(jù)接口重新獲取數(shù)據(jù)并進(jìn)行計(jì)算,若數(shù)據(jù)接口是時(shí)間相關(guān)的,則通過時(shí)間存儲(chǔ)接口將下游所有數(shù)據(jù)時(shí)間設(shè)為故障或延遲發(fā)生前,再重啟相關(guān)任務(wù)鏈,以使數(shù)據(jù)計(jì)算正確,若數(shù)據(jù)接口是時(shí)間無關(guān)的,則直接重啟相關(guān)任務(wù)鏈。
補(bǔ)跑策略是對(duì)上文容錯(cuò)機(jī)制冪等性的一個(gè)重要補(bǔ)充,冪等性是建立在數(shù)據(jù)沒有出錯(cuò)或發(fā)生變化情況下,但是有時(shí)候會(huì)由于CAP理論的限制,在滿足大吞吐量可拓展的基礎(chǔ)上,是沒有辦法保證數(shù)據(jù)的實(shí)時(shí)性的,實(shí)際上很多數(shù)據(jù)收集都是異步進(jìn)行,在上游任務(wù)比較繁忙或者發(fā)生故障情況下,數(shù)據(jù)難免遲到或者出錯(cuò),我們通過補(bǔ)跑機(jī)制,讓一個(gè)數(shù)據(jù)接口,從它上游的數(shù)據(jù)接口重新獲取數(shù)據(jù),進(jìn)行計(jì)算,即重跑相關(guān)任務(wù),如果數(shù)據(jù)接口是時(shí)間相關(guān)的,調(diào)度器會(huì)通過時(shí)間存儲(chǔ)接口把下游所有數(shù)據(jù)時(shí)間設(shè)為故障或延遲發(fā)生前,再重啟相關(guān)任務(wù)鏈,使數(shù)據(jù)計(jì)算正確。如果數(shù)據(jù)接口是時(shí)間無關(guān)的,那只要簡(jiǎn)單重啟相關(guān)任務(wù)鏈即可。上面說提到的時(shí)間修改判斷是遞歸的,可能任務(wù)鏈上有的是時(shí)間相關(guān),有的是時(shí)間無關(guān),他們是迭代進(jìn)行判斷和處理的。在實(shí)際生產(chǎn)環(huán)境上,如果沒有特殊情況,跟時(shí)間有關(guān)的數(shù)據(jù)接口,都會(huì)進(jìn)行一個(gè)往前看若干時(shí)間單位的動(dòng)作,這個(gè)可以保證重新進(jìn)來的數(shù)據(jù)被計(jì)算正確。
盡管為使解釋簡(jiǎn)單化將上述方法圖示并描述為一系列動(dòng)作,但是應(yīng)理解并領(lǐng)會(huì),這些方法不受動(dòng)作的次序所限,因?yàn)楦鶕?jù)一個(gè)或多個(gè)實(shí)施例,一些動(dòng)作可按不同次序發(fā)生和/或與來自本文中圖示和描述或本文中未圖示和描述但本領(lǐng)域技術(shù)人員可以理解的其他動(dòng)作并發(fā)地發(fā)生。
本領(lǐng)域技術(shù)人員將進(jìn)一步領(lǐng)會(huì),結(jié)合本文中所公開的實(shí)施例來描述的各種解說性邏輯板塊、模塊、電路、和算法步驟可實(shí)現(xiàn)為電子硬件、計(jì)算機(jī)軟件、或這 兩者的組合。為清楚地解說硬件與軟件的這一可互換性,各種解說性組件、框、模塊、電路、和步驟在上面是以其功能性的形式作一般化描述的。此類功能性是被實(shí)現(xiàn)為硬件還是軟件取決于具體應(yīng)用和施加于整體系統(tǒng)的設(shè)計(jì)約束。技術(shù)人員對(duì)于每種特定應(yīng)用可用不同的方式來實(shí)現(xiàn)所描述的功能性,但這樣的實(shí)現(xiàn)決策不應(yīng)被解讀成導(dǎo)致脫離了本發(fā)明的范圍。
結(jié)合本文所公開的實(shí)施例描述的各種解說性邏輯板塊、模塊、和電路可用通用處理器、數(shù)字信號(hào)處理器(DSP)、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門陣列(FPGA)或其它可編程邏輯器件、分立的門或晶體管邏輯、分立的硬件組件、或其設(shè)計(jì)成執(zhí)行本文所描述功能的任何組合來實(shí)現(xiàn)或執(zhí)行。通用處理器可以是微處理器,但在替換方案中,該處理器可以是任何常規(guī)的處理器、控制器、微控制器、或狀態(tài)機(jī)。處理器還可以被實(shí)現(xiàn)為計(jì)算設(shè)備的組合,例如DSP與微處理器的組合、多個(gè)微處理器、與DSP核心協(xié)作的一個(gè)或多個(gè)微處理器、或任何其他此類配置。
結(jié)合本文中公開的實(shí)施例描述的方法或算法的步驟可直接在硬件中、在由處理器執(zhí)行的軟件模塊中、或在這兩者的組合中體現(xiàn)。軟件模塊可駐留在RAM存儲(chǔ)器、閃存、ROM存儲(chǔ)器、EPROM存儲(chǔ)器、EEPROM存儲(chǔ)器、寄存器、硬盤、可移動(dòng)盤、CD-ROM、或本領(lǐng)域中所知的任何其他形式的存儲(chǔ)介質(zhì)中。示例性存儲(chǔ)介質(zhì)耦合到處理器以使得該處理器能從/向該存儲(chǔ)介質(zhì)讀取和寫入信息。在替換方案中,存儲(chǔ)介質(zhì)可以被整合到處理器。處理器和存儲(chǔ)介質(zhì)可駐留在ASIC中。ASIC可駐留在用戶終端中。在替換方案中,處理器和存儲(chǔ)介質(zhì)可作為分立組件駐留在用戶終端中。
在一個(gè)或多個(gè)示例性實(shí)施例中,所描述的功能可在硬件、軟件、固件或其任何組合中實(shí)現(xiàn)。如果在軟件中實(shí)現(xiàn)為計(jì)算機(jī)程序產(chǎn)品,則各功能可以作為一條或更多條指令或代碼存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上或藉其進(jìn)行傳送。計(jì)算機(jī)可讀介質(zhì)包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)兩者,其包括促成計(jì)算機(jī)程序從一地向另一地轉(zhuǎn)移的任何介質(zhì)。存儲(chǔ)介質(zhì)可以是能被計(jì)算機(jī)訪問的任何可用介質(zhì)。作為示例而非限定,這樣的計(jì)算機(jī)可讀介質(zhì)可包括RAM、ROM、EEPROM、CD-ROM或其它光盤存儲(chǔ)、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或能被用來攜帶或存儲(chǔ)指令或數(shù)據(jù)結(jié)構(gòu)形式的合意程序代碼且能被計(jì)算機(jī)訪問的任何其它介質(zhì)。任何連接也被正當(dāng)?shù)胤Q為計(jì)算機(jī)可讀介質(zhì)。例如,如果軟件是使用同軸電纜、光纖電纜、雙絞線、數(shù)字訂 戶線(DSL)、或諸如紅外、無線電、以及微波之類的無線技術(shù)從web網(wǎng)站、服務(wù)器、或其它遠(yuǎn)程源傳送而來,則該同軸電纜、光纖電纜、雙絞線、DSL、或諸如紅外、無線電、以及微波之類的無線技術(shù)就被包括在介質(zhì)的定義之中。如本文中所使用的盤(disk)和碟(disc)包括壓縮碟(CD)、激光碟、光碟、數(shù)字多用碟(DVD)、軟盤和藍(lán)光碟,其中盤(disk)往往以磁的方式再現(xiàn)數(shù)據(jù),而碟(disc)用激光以光學(xué)方式再現(xiàn)數(shù)據(jù)。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。
提供對(duì)本公開的先前描述是為使得本領(lǐng)域任何技術(shù)人員皆能夠制作或使用本公開。對(duì)本公開的各種修改對(duì)本領(lǐng)域技術(shù)人員來說都將是顯而易見的,且本文中所定義的普適原理可被應(yīng)用到其他變體而不會(huì)脫離本公開的精神或范圍。由此,本公開并非旨在被限定于本文中所描述的示例和設(shè)計(jì),而是應(yīng)被授予與本文中所公開的原理和新穎性特征相一致的最廣范圍。