OpenStack公共元件TaskFlow介紹

2021-10-02 17:41:07 字數 2359 閱讀 9473

taskflow 是乙個以高度可用,易於理解和宣告試方式來執行[作業,任務,流程]的庫,可與openstack和其他專案一起使用。

taskflow庫在oslo專案中是乙個實現比較複雜的專案,要弄清楚其實現原理,首先需要對其中的相關概念有所了解。所以,本文首先總結了taskflow中常用的一些基本概念,這些概念主要包括如下幾個:

atom類是taskflow的最小單位,taskflow中其他類,包括task等都需要繼承這個類。乙個atom物件是乙個命名物件,通過操作輸入資料以執行一些促進整個流程發展的動作,或者產生乙個處理結果等。它是乙個抽象類,提供了兩個抽象方法:execute()用於執行乙個動作,revert()用於根據execute()執行結果和失敗資訊還原到任務執行之前的狀態;除此之外,還分別為這兩個方法提供了pre_execute()/post_execute()、pre_revert()/post_revert()方法用於定義在執行execute或revert操作前後執行的操作。

task類是乙個擁有執行和回滾操作的最小工作單元,表示乙個任務流中的某乙個任務。它是乙個繼承自atom類的表示乙個任務的父類,開發者可以執行定義乙個繼承自task類的任務類,並重寫execute()和revert()方法分別表示執行和回滾的操作。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-3ead04d5-1581406462176)(

task的兩種型別:retry類也是乙個繼承自atom的抽象類,它主要定義了當有錯誤發生時,如何進行重試操作。其也包含也不同的型別,將會在接下來的部分進行詳細介紹。繼承重試的子類必須提供on_failure()函式來對故障進行處理。

為避免重複建立常見的重試模式,提供了以下常見的重試子類:

關於重試的策略,taskflow通過乙個列舉型別的decision定義了三種策略:

flow類是乙個用來關聯所有相關task類,並規定這些task類的執行和回滾順序的抽象類。而oslo中為flow提供了三種實現方式:graph_flow表示圖流,linear_flow表示線性流,unordered_flow表示無序流。關於這三種型別的流實現會在之後進行詳細分析。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-sfocbxzz-1581406462179)(

要弄清楚這三種型別的flow物件,首先需要了解oslo定義的flow基類的構成。在oslo定義的flow基類中,主要包含以下幾個重要的屬性和方法:

engine類是乙個表示真正執行atom物件的抽象類,它的實現類主要用於載入(load)乙個flow物件,然後驅動這個flow物件的task物件開始執行。engine的實現也有多種不同的形式,這也會在接下來的部分進行詳細介紹。

taskflow在具體實現task/flow管理時,首先定義了乙個engine抽象類,所有實現都需要繼承這個抽象類。這個抽象類定義了如下重要屬性和方法:

options:相關資料結構傳遞給engine物件的選項。

storage:engine物件的儲存單元。

statistics:engine物件收集的執行時統計資料字典。當engine沒有執行時,這個值為空;在engine正在執行時或已經執行之前,它可能會儲存一些對正在執行或執行完成時有用的或包含資訊的鍵值對。

compile():該方法可以將engine物件中包含的flow物件編譯成engine物件內部表示形式。這個內部表示形式就是engine物件實際用於執行的流的形式。

reset():將engine物件重置為pending狀態。如果乙個flow以failure、success、reverted狀態結束執行(即呼叫engine物件的run()方法之後),或由於某種狀態使得其處於某種中間狀態,此時可以呼叫reset()方法進行重置,然後進行重試操作。

prepare():在engine物件編譯完所有包含的flow物件之後,且在flow執行之前執行該方法,為流程的執行進行一些準備操作。

validate():在engine物件編譯完所有包含的flow物件之後,且在flow執行之前執行該方法,為流程的執行進行一些驗證操作。

run():執行engine物件中的flow流程。

suspend():該方法嘗試暫停engine物件。如果乙個engine物件正在執行某個atom物件,則執行該方法會將這個atom物件之後的所有正要執行的工作都暫停,並將這個engine物件的狀態變為暫停狀態,以便之後進行恢復操作。

taskflow在具體實現engine時,都需要給上述屬性和方法重新賦值或進行覆寫操作,以實現乙個完整的管理流程flow/task物件的engine類。在taskflow中,目前實現了三種策略的engine類,而在這三種策略中,有兩種是面向行為的action_egine類:serialactionengine、parallelactionengine;另一種是面向多程序的worker_base類:workerbaseactionengine。這三種型別的engine類的異同點如下所示:

Openstack核心元件

compute 計算 object storage 物件儲存 identity 身份認證 dashboard 儀錶盤 block storage 塊儲存 network 網路 image service 映象服務 compute 類似計算的記憶體 object storage 類似儲存器 ident...

OpenStack 基本元件

openstack 三大核心元件 網路,計算,儲存 openstack核心元件,核心服務包括 例項生命週期的管理 虛擬機器 計算資源的管理,對外提供restful api。nova元件主要有三個模組構成 nova api,nova scheduler,nova compute nova api在表示...

OpenStack網路元件Neutron

nova network nova network是openstack的核心元件。功能如下 1 ip位址分配 虛擬主機分配私有 固定 和浮動ip位址 2 網路模型與管理 虛擬網路使虛擬主機之間以及與外部網路通訊。3 安全控制 通過ebtables和iptables來實現 網路模型分為三種 1 扁平網...