分布式工作流包括在分布式系統(tǒng)中的不同節(jié)點(diǎn)上執(zhí)行的一系列的步驟。節(jié)點(diǎn)可以駐留在相同數(shù)據(jù)中心中或駐留在多個(gè)數(shù)據(jù)中心中。圖1是分布式工作流的示例。工作流的一些步驟被期望執(zhí)行在節(jié)點(diǎn)1上,其他步驟被期望執(zhí)行在要么節(jié)點(diǎn)2要么節(jié)點(diǎn)3上。節(jié)點(diǎn)1、2、3可以在本地?cái)?shù)據(jù)中心中或分布在多個(gè)數(shù)據(jù)中心之間。
技術(shù)實(shí)現(xiàn)要素:
在一個(gè)方面中,一種方法包括:在節(jié)點(diǎn)處確定工作流步驟是否具有不滿意的依賴性;如果工作流步驟具有不滿意的依賴性,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為阻塞狀態(tài);如果工作流步驟不具有不滿意的依賴性,則執(zhí)行工作流步驟;如果在執(zhí)行工作流步驟之后,取消工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為取消狀態(tài);如果在執(zhí)行工作流步驟之后,成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為成功狀態(tài);如果在執(zhí)行工作流步驟之后,未成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為錯(cuò)誤狀態(tài);如果成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流的狀態(tài)設(shè)置為成功狀態(tài);以及使用數(shù)據(jù)庫(kù)復(fù)制向其他節(jié)點(diǎn)通知工作流步驟的狀態(tài)和工作流的狀態(tài)。
在另一方面中,一種裝置包括電子硬件電路裝置,其被配置為在節(jié)點(diǎn)處確定工作流步驟是否具有不滿意的依賴性;如果工作流步驟具有不滿意的依賴性,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為阻塞狀態(tài);如果工作流步驟不具有不滿意的依賴性,則執(zhí)行工作流步驟;如果在執(zhí)行工作流步驟之后,取消工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為取消狀態(tài);如果在執(zhí)行工作流步驟之后,成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為成功狀態(tài);如果在執(zhí)行工作流步驟之后,未成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為錯(cuò)誤狀態(tài);如果成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流的狀態(tài)設(shè)置為成功狀態(tài);以及使用數(shù)據(jù)庫(kù)復(fù)制向其他節(jié)點(diǎn)通知工作流步驟的狀態(tài)和工作流的狀態(tài)。
在另一方面中,一種制品包括存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的非暫態(tài)計(jì)算機(jī)可讀介質(zhì),所述指令使得機(jī)器在節(jié)點(diǎn)處確定工作流步驟是否具有不滿意的依賴性;如果工作流步驟具有不滿意的依賴性,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為阻塞狀態(tài);如果工作流步驟不具有不滿意的依賴性,則執(zhí)行工作流步驟;如果在執(zhí)行工作流步驟之后,取消工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為取消狀態(tài);如果在執(zhí)行工作流步驟之后,成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為成功狀態(tài);如果在執(zhí)行工作流步驟之后,未成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流步驟的狀態(tài)設(shè)置為錯(cuò)誤狀態(tài);如果成功地執(zhí)行工作流步驟,則在節(jié)點(diǎn)處將工作流的狀態(tài)設(shè)置為成功狀態(tài);以及使用數(shù)據(jù)庫(kù)復(fù)制向其他節(jié)點(diǎn)通知工作流步驟的狀態(tài)和工作流的狀態(tài)。
附圖說(shuō)明
圖1是分布在節(jié)點(diǎn)上的工作流的框圖。
圖2是工作流協(xié)調(diào)系統(tǒng)的示例的框圖。
圖3是另一工作流協(xié)調(diào)系統(tǒng)的示例的框圖。
圖4是針對(duì)工作流的狀態(tài)流程圖的框圖。
圖5是用于執(zhí)行由分布式節(jié)點(diǎn)所使用的工作流的過(guò)程的示例的流程圖。
圖6是在其上可以實(shí)現(xiàn)圖5的過(guò)程的部分中的任一部分的計(jì)算機(jī)。
具體實(shí)施方式
在本文中描述了通過(guò)數(shù)據(jù)庫(kù)復(fù)制(例如,主動(dòng)/主動(dòng)數(shù)據(jù)庫(kù)復(fù)制)提供分布式工作流協(xié)調(diào)的技術(shù)。
參考圖2,工作流協(xié)調(diào)系統(tǒng)200是執(zhí)行相同站點(diǎn)(例如,在相同數(shù)據(jù)中心中)處的分布式節(jié)點(diǎn)上的工作流的系統(tǒng)的示例。工作流協(xié)調(diào)系統(tǒng)200包括節(jié)點(diǎn)(例如,節(jié)點(diǎn)202a、節(jié)點(diǎn)202b、節(jié)點(diǎn)202c和節(jié)點(diǎn)202d)和數(shù)據(jù)庫(kù)復(fù)制214。節(jié)點(diǎn)202a-202d包括相應(yīng)地任務(wù)執(zhí)行器204a-204d和相應(yīng)的存儲(chǔ)庫(kù)206a-206d。任務(wù)執(zhí)行器(例如,任務(wù)執(zhí)行器204a-204d)執(zhí)行工作流的一個(gè)或多個(gè)工作流步驟。
存儲(chǔ)庫(kù)(例如,存儲(chǔ)庫(kù)206a-206d)存儲(chǔ)工作流定義和狀態(tài)(如由其狀態(tài)所指示的)。在工作流協(xié)調(diào)系統(tǒng)200執(zhí)行工作流之前,定義工作流。工作流定義/狀態(tài)被序列化(serialize)到數(shù)據(jù)庫(kù)復(fù)制214。完整工作流定義包括工作流數(shù)據(jù)結(jié)構(gòu)(對(duì)象)和一組工作流步驟數(shù)據(jù)結(jié)構(gòu)(對(duì)象)。在一個(gè)示例中,工作流數(shù)據(jù)結(jié)構(gòu)包括以下字段:統(tǒng)一資源標(biāo)識(shí)符(URI)ID(唯一數(shù)據(jù)庫(kù)ID);字符串orchControllerName(工作流名稱);字符串任務(wù)ID;字符串狀態(tài)(指示工作流是否成功);所完成的布爾。在一個(gè)示例中,工作流步驟數(shù)據(jù)結(jié)構(gòu)包括以下字段:URI ID(針對(duì)該步驟的唯一數(shù)據(jù)庫(kù)ID);URI工作流ID;URI依賴性;字符串執(zhí)行方法;字符串回滾方法(當(dāng)工作流失敗時(shí)指向待執(zhí)行的方法的指針);字符串狀態(tài);日期開(kāi)始時(shí)間;和日期結(jié)束時(shí)間。
數(shù)據(jù)庫(kù)復(fù)制214是主動(dòng)/主動(dòng)數(shù)據(jù)庫(kù)復(fù)制。數(shù)據(jù)庫(kù)復(fù)制214是允許節(jié)點(diǎn)共享工作流元數(shù)據(jù)和狀態(tài)的主動(dòng)/主動(dòng)復(fù)制。數(shù)據(jù)庫(kù)復(fù)制214包括以下特征。
第一,由于任何節(jié)點(diǎn)可以發(fā)起寫(xiě)請(qǐng)求,因而在節(jié)點(diǎn)的仲裁集上成功地完成寫(xiě)之后,數(shù)據(jù)庫(kù)復(fù)制214返回成功狀態(tài)?!爸俨眉币庵讣旱拇蠖鄶?shù)節(jié)點(diǎn)。例如,在圖2中,集群包括節(jié)點(diǎn)202a-202d,并且當(dāng)寫(xiě)在節(jié)點(diǎn)中的任何3個(gè)上成功時(shí),滿足仲裁集。
第二,對(duì)于任何讀請(qǐng)求而言,數(shù)據(jù)庫(kù)復(fù)制214試圖讀取仲裁集節(jié)點(diǎn)并且在合并來(lái)自仲裁集節(jié)點(diǎn)的結(jié)果之后返回成功。第三,少數(shù)節(jié)點(diǎn)故障不影響整個(gè)系統(tǒng)200的可用性。第四,每個(gè)節(jié)點(diǎn)擁有數(shù)據(jù)庫(kù)副本。如果大多數(shù)節(jié)點(diǎn)是工作/運(yùn)行的,則數(shù)據(jù)庫(kù)復(fù)制214是可使用的。
在一個(gè)特定示例中,數(shù)據(jù)庫(kù)復(fù)制214是與APACHE ZOOKEEPER集成的APACHE CASSANDRA。
參考圖3,工作流協(xié)調(diào)系統(tǒng)300是執(zhí)行不同站點(diǎn)上的分布式節(jié)點(diǎn)上的工作流(例如,使用不同的數(shù)據(jù)中心)的系統(tǒng)的示例。工作流協(xié)調(diào)系統(tǒng)300包括節(jié)點(diǎn)(例如,節(jié)點(diǎn)302、節(jié)點(diǎn)302b、節(jié)點(diǎn)302c、節(jié)點(diǎn)302d、節(jié)點(diǎn)302e和節(jié)點(diǎn)302f)和數(shù)據(jù)庫(kù)復(fù)制314。節(jié)點(diǎn)302a-302f分布地包括任務(wù)執(zhí)行器304a-304f并且分布地包括存儲(chǔ)庫(kù)306a-306f。節(jié)點(diǎn)302a、302c、302e在第一站點(diǎn)310a處,并且節(jié)點(diǎn)302b、302d、302f在第二站點(diǎn)310b處。數(shù)據(jù)庫(kù)復(fù)制314與數(shù)據(jù)庫(kù)復(fù)制214基本上相同。
參考圖4,狀態(tài)流程圖400描繪了工作流或工作流步驟可能處于的狀態(tài)。工作流或工作流步驟可以處于以下?tīng)顟B(tài)之一。創(chuàng)建狀態(tài)404指示工作流/工作流步驟被定義并且被添加到數(shù)據(jù)庫(kù)。排隊(duì)狀態(tài)406指示任務(wù)執(zhí)行器沒(méi)有資源運(yùn)行工作流/工作流步驟并且在隊(duì)列中是未決(pending)的。阻塞狀態(tài)410指示任務(wù)執(zhí)行器具有資源執(zhí)行工作流/工作流步驟,但是任務(wù)執(zhí)行器由一些外部依賴性阻塞。執(zhí)行狀態(tài)416指示任務(wù)執(zhí)行器正在執(zhí)行工作流/工作流步驟。取消狀態(tài)424指示當(dāng)工作流/工作流步驟正在執(zhí)行時(shí),工作流/工作流步驟由終端用戶取消。成功狀態(tài)428指示工作流/工作流步驟成功地完成。錯(cuò)誤狀態(tài)432指示工作流/工作流步驟執(zhí)行失敗。
參考圖5,過(guò)程500是由用于處理工作流的節(jié)點(diǎn)所執(zhí)行的過(guò)程的示例。在通過(guò)每個(gè)節(jié)點(diǎn)執(zhí)行過(guò)程500之前,基于工作流數(shù)據(jù)結(jié)構(gòu)和工作流步驟數(shù)據(jù)結(jié)構(gòu),定義工作流。在工作流數(shù)據(jù)結(jié)構(gòu)和工作流步驟數(shù)據(jù)結(jié)構(gòu)推送到一個(gè)節(jié)點(diǎn)之后,使用數(shù)據(jù)庫(kù)復(fù)制將工作流數(shù)據(jù)結(jié)構(gòu)和工作流步驟數(shù)據(jù)結(jié)構(gòu)復(fù)制到工作流協(xié)調(diào)系統(tǒng)中的所有節(jié)點(diǎn)。復(fù)制方法可以是同步或異步的。
過(guò)程500選擇工作流(502)并且從所選擇的工作流選擇工作流步驟(506)。過(guò)程500確定工作流步驟是否具有不滿意的依賴性(512)。如果工作流步驟具有不滿意的依賴性,則過(guò)程500將工作流步驟設(shè)置為阻塞狀態(tài)(514)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。如果工作流步驟不具有不滿意的依賴性,則過(guò)程500將工作流步驟設(shè)置為執(zhí)行步驟(516)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。
過(guò)程500執(zhí)行工作流步驟(520)。過(guò)程500確定工作流步驟是否已經(jīng)由用戶(524)取消,并且如果工作流已經(jīng)由用戶取消,則過(guò)程500將工作流步驟的狀態(tài)設(shè)置為取消(528)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。
如果工作流步驟尚未由用戶取消,則過(guò)程500確定工作流步驟的執(zhí)行是否是成功的,并且如果工作流步驟的執(zhí)行不是成功的,則過(guò)程500將工作流步驟狀態(tài)設(shè)置為錯(cuò)誤(536)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。
如果工作流步驟的執(zhí)行是成功的,則過(guò)程500將工作流步驟狀態(tài)設(shè)置為成功狀態(tài)(542)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。
在處理塊514、536和542之后,過(guò)程500是否存在附加的步驟(546),并且如果存在附加的步驟,則過(guò)程500轉(zhuǎn)到下一工作流步驟(548)。
如果不存在附加的步驟,則過(guò)程500將工作流狀態(tài)設(shè)置為成功狀態(tài)(550)。復(fù)制數(shù)據(jù)庫(kù)214更新其他節(jié)點(diǎn)。
參考圖6,計(jì)算機(jī)600包括處理器602、易失性存儲(chǔ)器604、非易失性存儲(chǔ)器606(例如,硬盤(pán))和用戶接口(UI)608(例如,圖形用戶接口、鼠標(biāo)、鍵盤(pán)、顯示器、觸摸屏等)。非易失性存儲(chǔ)器606存儲(chǔ)計(jì)算機(jī)指令、操作系統(tǒng)616和數(shù)據(jù)618。在一個(gè)示例中,計(jì)算機(jī)指令612從易失性存儲(chǔ)器604當(dāng)中由處理器602執(zhí)行,以執(zhí)行本文所描述的過(guò)程中的全部過(guò)程或一部分過(guò)程(例如,過(guò)程500)。
本文所描述的過(guò)程(例如,過(guò)程500)不限于供圖6的硬件和軟件使用;其可以適用于任何計(jì)算或處理環(huán)境中和任何類(lèi)型的機(jī)器或能夠運(yùn)行計(jì)算機(jī)程序的機(jī)器的集合??梢砸杂布?、軟件或二者的組合實(shí)現(xiàn)本文所描述的過(guò)程。本文所描述的過(guò)程可以實(shí)現(xiàn)在執(zhí)行在可編程計(jì)算機(jī)/機(jī)器上的計(jì)算機(jī)程序中,所述計(jì)算機(jī)/機(jī)器各自包括處理器、非暫態(tài)機(jī)器可讀介質(zhì)或由處理器(包括易失性存儲(chǔ)器和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)可讀的其他制造品、至少一個(gè)輸入設(shè)備和一個(gè)或多個(gè)輸出設(shè)備。程序代碼可以適于使用輸入設(shè)備所輸入的數(shù)據(jù)以執(zhí)行本文所描述的過(guò)程并且生成輸出信息。
系統(tǒng)可以至少部分經(jīng)由計(jì)算機(jī)程序產(chǎn)品實(shí)現(xiàn)(例如,在非暫態(tài)機(jī)器可讀存儲(chǔ)介質(zhì),諸如例如非暫態(tài)計(jì)算機(jī)可讀介質(zhì)中),以由數(shù)據(jù)處理裝置(例如,可編程處理器、計(jì)算機(jī)或多個(gè)計(jì)算機(jī))執(zhí)行或控制數(shù)據(jù)處理裝置的操作。每個(gè)這樣的程序可以以高級(jí)程序編程語(yǔ)言或面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)以與計(jì)算機(jī)系統(tǒng)通信。然而,可以以匯編語(yǔ)言或機(jī)器語(yǔ)言實(shí)現(xiàn)程序。語(yǔ)言可以是編譯語(yǔ)言或解釋語(yǔ)言并且其可以以任何形式部署,包括作為單獨(dú)程序或作為模塊、組件、子例程或適于在計(jì)算環(huán)境中使用的其他單元。計(jì)算機(jī)程序可以被部署為一個(gè)站點(diǎn)處的一個(gè)計(jì)算機(jī)上或多個(gè)計(jì)算機(jī)上或跨多個(gè)地點(diǎn)分布并且通過(guò)通信網(wǎng)絡(luò)相互連接的多個(gè)計(jì)算機(jī)上。計(jì)算機(jī)程序可以存儲(chǔ)在由通用可編程計(jì)算機(jī)或?qū)S每删幊逃?jì)算機(jī)可讀的非暫態(tài)機(jī)器可讀介質(zhì)上,以用于當(dāng)非暫態(tài)機(jī)器可讀介質(zhì)由計(jì)算機(jī)讀取時(shí),對(duì)計(jì)算機(jī)進(jìn)行配置和操作以執(zhí)行本文所描述的過(guò)程。例如,本文所描述的過(guò)程還可以被實(shí)現(xiàn)為配置有計(jì)算機(jī)程序的非暫態(tài)機(jī)器可讀存儲(chǔ)介質(zhì),其中,當(dāng)計(jì)算機(jī)程序被執(zhí)行時(shí),計(jì)算機(jī)程序中的指令使得計(jì)算機(jī)根據(jù)過(guò)程進(jìn)行操作。非暫態(tài)機(jī)器可讀介質(zhì)可以包括但不限于硬盤(pán)驅(qū)動(dòng)器、光盤(pán)、閃速存儲(chǔ)器、非易失性存儲(chǔ)器、易失性存儲(chǔ)器、磁軟盤(pán)等,但不是包括暫態(tài)信號(hào)本身。
本文所描述的示例不限于所描述的特定示例。例如,過(guò)程500不限于圖5的特定處理順序。相反,圖5中的處理塊中的任一個(gè)可以根據(jù)需要重新排序、組合或移除、并行或串行執(zhí)行以實(shí)現(xiàn)上文所闡述的結(jié)果。
與實(shí)現(xiàn)系統(tǒng)相關(guān)聯(lián)的處理塊(例如,在過(guò)程500中)可以由執(zhí)行一個(gè)或多個(gè)計(jì)算機(jī)程序的一個(gè)或多個(gè)可編程處理器執(zhí)行以執(zhí)行系統(tǒng)的功能。系統(tǒng)的全部或一部分可以被實(shí)現(xiàn)為專(zhuān)用邏輯電路(例如,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門(mén)陣列)和/或ASIC(專(zhuān)用集成電路))。系統(tǒng)的全部或一部分可以使用電子硬件電路實(shí)現(xiàn),其包括電子設(shè)備,諸如例如以下中的至少一個(gè):處理器、存儲(chǔ)器、可編程邏輯設(shè)備或邏輯門(mén)。
本文所描述的不同的實(shí)施例的元件可以組合以形成上文未特別地闡述的其他實(shí)施例。還可以分離地或以任何適合的子組合提供單個(gè)實(shí)施例的上下文中所描述的各種元件。在本文中未特別描述的其他實(shí)施例也在所附權(quán)利要求的范圍內(nèi)。