Task Flow 簡介

認識Task Flow

TaskFlow是一個python庫,用來簡化任務的執行管理,同時,實現任務的一致性、可擴展和可靠性。TaskFlow支持創建不同的 task,并以聲明的方式集成到一個 flow 中,這些 flow 會通過 engine 執行、停止、繼續和恢復。

優點

  • 彈性的增加狀態
  • 自然聲明構造
  • 簡單可測試(每個 task 只做一件事)
  • 工作流可插拔
  • 容錯性
  • 簡單的故障恢復

概念示例

偽代碼展示了 flow 類似于SQL事務的執行模式
START TRANSACTION task1: call nova API to launch a server || ROLLBACK task2: when task1 finished, call cinder API to attach block storage to the server || ROLLBACK ...perform other tasks... COMMIT

why

OpenStack 的代碼正在有組織的增長,但是如果進程被意外中斷,卻沒有一個可以安全恢復或回滾代碼的標準;大多數項目并沒有使 task 可以重啟或恢復,簡單的挑高或恢復的場景在今天的代碼里已幾乎不可能。通過Taskflow的推廣,甚至在沒有HA的情況下,使OpenStack變的可信和可靠。

一些使用場景

  • 服務停止、更新、重啟
    目前Openstack的大部分服務都沒有對服務的強制停止做任何處理,使任務處于不可調和的狀態。比如,一個任務在運行過程中被終止,可能會變為不可恢復的狀態,或成為遺留資源。TaskFlow可以跟蹤任務的關聯狀態,當服務重啟后,可以很容易的恢復或者回滾。

  • Orphaned resources(僵尸資源)
    由于現在OpenStack的項目缺乏事務語義,所以會留下一些資源成為孤兒狀態,或ERROR的狀態,在自動化系統(Heat)情況下,這種狀況是非常不能令人接收的,因為非常難分析哪些是要被清除的孤兒資源。
    Taskflow提供其以任務為導向的模型將能正確地追蹤資源的變動,這就容許在一些資源上的動作可以自動地被撤銷,以確定沒有資源被稱為“僵尸”。

  • Metrics and history(度量和歷史)
    當OpenStack服務被組織進 taskflow 的對象和模式時,通過將記錄 task 在運行時的度量/歷史,這些服務便自動獲得了簡單的增加度量報告和歷史操作的能力。

  • 進度/狀態跟蹤
    Openstack中,有很多場景需要記錄和跟蹤任務的進度,TaskFlow提供了一種內建的通知機制實現任務進度的跟蹤。

設計

構成

  • Atoms
    TaskFlow的最小單元,是其他類型的基礎。atom是一種命名對象,通過操作輸入數據實現流程中的一個動作,或者輸出一個處理結果。我理解atom是一個抽象概念,其中定義了任務、操作和數據。
  • Task
    task派生于一個atom,包括一個 execute & rollback序列每個task都繼承自Task,其中定義了一系列的屬性和方法。
  • Retry
    retry也是派生于一個atom,是一個特殊的單元,實現對錯誤的處理,控制flow的異常情況,必要時,能夠以其他參數重試另一個atomretry基類的派生類必須提供on_failure()方法,實現對異常的處理。

參考

TaskFlow官方文檔
An Introduction to OpenStack TaskFlow with Python

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,172評論 0 23
  • 一條關于櫻桃的搜索 前段時間有知乎用戶提問:“孕婦首選水果是智利車厘子么?為什么?” 我的第一反應是營養學界針對孕...
    靜哥說閱讀 916評論 0 1
  • (翻譯海峰老師音頻) 自然療法的基礎,在于相信人體做為大自然創造的精華,本身具備了大自然幾十億年來,抵抗各種傷害...
    羅詠樺閱讀 294評論 0 0
  • “我還在想明天要不要去……” “你之前不是說必須去嗎?” “其實,我覺得帶你去不太好……” “……” 男朋友是青協...
    浮生生閱讀 251評論 0 1