久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Openstack中Mistral工作流組件的示例分析

173次閱讀
沒有評論

共計 5356 個字符,預(yù)計需要花費 14 分鐘才能閱讀完成。

這篇文章主要介紹 Openstack 中 Mistral 工作流組件的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Mistrial 是 mirantis 公司為 openstack 開發(fā)的工作流組件,提供 WorkFlow as a service。典型的用戶用例包括云平臺的任務(wù)計劃服務(wù)(Cloud Cron),任務(wù)調(diào)度(Task Scheduling),復(fù)雜的運行時間長的業(yè)務(wù)流程服務(wù)。目前項目還在開始階段。對應(yīng)的是 AWS 的 SWS(Simple WorkFlow Service)。

項目 wiki:https://wiki.openstack.org/wiki/Mistral

項目 Code:https://github.com/stackforge/mistral

1. 基本術(shù)語

Workbook: 工作本,用戶的工作流接口,可以理解成一篇任務(wù)文檔用來錄入用戶的工作流程,步驟,需要完成的任務(wù)。每個任務(wù)的執(zhí)行順序,依賴關(guān)系,以及每個任務(wù)完成之后產(chǎn)生的事件。站在用戶的角度,這篇文檔完整的記錄了某項任務(wù)的流程,讓執(zhí)行者能夠清楚怎么完成。站在開發(fā)人員的角度,為了方便編程。定義了一種新的語言 DSL(下面會有介紹),用來描述整個工作流。

Task: 即工作流的具體步驟。可以是 Action 的集合。

Action: Mistral 的最小單位。特指一個具體的工作,比如說發(fā)送一個 HTTP 請求,或者運行某條命令。

Flow:工作流。指的是 Mistral 系統(tǒng)中如何執(zhí)行 task,解析 task 的依賴關(guān)系等等,從而讓 task 順利結(jié)束,并返回狀態(tài)。

WorkFlow Execution: 工作流執(zhí)行紀(jì)錄。就是指某次具體的 Flow,每次執(zhí)行 task 產(chǎn)成的 WorkFlow Execution 會永久保存在數(shù)據(jù)庫中,方便后續(xù)查詢,或者重新執(zhí)行 Flow。

2. DSL 介紹

這是 Mistral 自定義的工作流定義語言。在業(yè)界,工作流程管理 已經(jīng)存在某些語言,可參考:

http://en.wikipedia.org/wiki/Business_Process_Execution_Language

http://en.wikipedia.org/wiki/YAWL

Mistral 使用 YAML 來定義工作流 wiki:https://wiki.openstack.org/wiki/Mistral/DSL

3. 實戰(zhàn)

從 Github 下載最新的代碼,安裝好運行環(huán)境。同時啟動 API 和 executor 服務(wù)

tox -evenv -- python mistral/cmd/launch.py --server executor --config-file etc/mistral.conf
tox -evenv -- python mistral/cmd/launch.py --server api --config-file etc/mistral.conf

然后運行“scripts/upload_workbook_and_run.py”腳本,可以清楚看到整個流程。

[ray@fedora mistral]$ python scripts/upload_workbook_and_run.py 
Created workbook: Workbook [description= My test workbook , name= my_workbook , tags= [u test] ]
Uploaded workbook:
Services:
 MyRest:
 type: REST_API
 parameters:
 baseUrl: http://localhost:8989/v1/
 actions:
 my-action:
 parameters:
 url: workbooks
 method: GET
Workflow:
 tasks:
 my_task:
 action: MyRest:my-action
# events:
# my_event:
# type: periodic
# tasks: my_task
# parameters:
# cron-pattern:  * * * * * 

execution: Execution [state= RUNNING , task= my_task , id= b5cf7e00-ef5d-46d7-b505-2d23809d29d0 , context= None , workbook_name= my_workbook] execution: Execution [state= RUNNING , task= my_task , id= b5cf7e00-ef5d-46d7-b505-2d23809d29d0 , context= None , workbook_name= my_workbook] execution: Execution [state= SUCCESS , task= my_task , id= b5cf7e00-ef5d-46d7-b505-2d23809d29d0 , context= None , workbook_name= my_workbook]

我們可以裝上 Misttral client(https://github.com/stackforge/python-mistralclient)來看看到底發(fā)生了什么。首先看看系統(tǒng)中存在哪些 workbook,已經(jīng)剛剛運行的 my-wokbook

[ray@fedora mistral]$ mistral workbook-list
Starting new HTTP connection (1): localhost
+---------------+------------------+------+
| Name | Description | Tags |
+---------------+------------------+------+
| echo_workbook | My test workbook | test |
| my_workbook | My test workbook | test |
+---------------+------------------+------+
[ray@fedora mistral]$ mistral workbook-get-definition my_workbook
Starting new HTTP connection (1): localhost
Services:
 MyRest:
 type: REST_API
 parameters:
 baseUrl: http://localhost:8989/v1/
 actions:
 my-action:
 parameters:
 url: workbooks
 method: GET
Workflow:
 tasks:
 my_task:
 action: MyRest:my-action
# events:
# my_event:
# type: periodic
# tasks: my_task
# parameters:
# cron-pattern:  * * * * *

這個 workbook,首先定義了一個服務(wù)(在系統(tǒng)中注冊個新的服務(wù),服務(wù)一般都包含定義好的 action,這樣用戶就可以在 task flow 中指定運行這個 action),這個服務(wù)類型是 REST,然后參數(shù)有哪些等等。然后定義了一個工作流,其中的任務(wù)列表(tasks)第一個是 my_task(taks 名字),這個 task 做了一件事情,就是運行一次 MyRest 服務(wù)中的 my_action 動作。

在看看另外一個 workbook,就簡單定義個一個 ECHO type 的服務(wù)。這個服務(wù)僅在內(nèi)部測試使用,就直接返回 ECHO 值。

[ray@fedora mistral]$ mistral workbook-get-definition echo_workbook
Starting new HTTP connection (1): localhost
Services:
 MyEcho:
 type: ECHO
 actions:
 EchoWords: 
 parameters:
 word:
 optional: False
 
Workflow:
 tasks:
 logPassTask:
 action: MyEcho:EchoWords
 parameters:
 word:  log pass  
 MyEchoTask:
 action: MyEcho:EchoWords
 parameters:
 word:  hello, world  
 on-success: logPassTask

具體的運行 log:

[ray@fedora mistral]$ mistral execution-get echo_workbook bcf47b8c-6d44-4732-b32d-ebef92662f38
Starting new HTTP connection (1): localhost
+----------+--------------------------------------+
| Field | Value |
+----------+--------------------------------------+
| ID | bcf47b8c-6d44-4732-b32d-ebef92662f38 |
| Workbook | echo_workbook |
| Target | MyEchoTask |
| State | SUCCESS |
+----------+--------------------------------------+
[ray@fedora mistral]$ mistral task-list echo_workbook bcf47b8c-6d44-4732-b32d-ebef92662f38
Starting new HTTP connection (1): localhost
+--------------------------------------+---------------+--------------------------------------+-------------+-------------+---------+--------+
| ID | Workbook | Execution | Name | Description | State | Tags |
+--------------------------------------+---------------+--------------------------------------+-------------+-------------+---------+--------+
| e5cb4a7a-b6c6-46ec-b62b-aa385bd3f8c2 | echo_workbook | bcf47b8c-6d44-4732-b32d-ebef92662f38 | MyEchoTask |  none  | SUCCESS |  none  |
| 1c99cc02-e1b0-44c2-b961-8589164bb851 | echo_workbook | bcf47b8c-6d44-4732-b32d-ebef92662f38 | logPassTask |  none  | SUCCESS |  none  |
+--------------------------------------+---------------+--------------------------------------+-------------+-------------+---------+--------+

4. 最近進展

上面的實戰(zhàn)例子可能沒讓大家意識到 mistral 跟 openstack 的關(guān)系,然后相信這個 workbook 會讓大家明白。

https://wiki.openstack.org/wiki/Mistral/DSL#Full_YAML_example:

關(guān)于 VM 的工作流,創(chuàng)建 NOVA VM。Mistral 開發(fā)組正在實現(xiàn)這種類型的 workbook,即集成 openstack 服務(wù)。這樣用戶就不需要用 openstack CLI or API 來操作,可以直接編寫 workbook(簡單編寫文檔,而不是寫 code),讓 mistral 幫你做完整個工作流程。

另外關(guān)于 Mistral 和 taskflow 的集成:

Mistral 在實現(xiàn)的過程中,需要開發(fā)大量的工作流代碼。這跟 openstack 項目庫中 TaskFlow 目的有些類似。為了避免重復(fù)勞動,兩邊的開發(fā)者已經(jīng)在討論,在 Mistral 代碼中,后端的工作流代碼盡量采用 taskflow 作為后端。

以上是“Openstack 中 Mistral 工作流組件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計5356字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 卢氏县| 肃南| 加查县| 靖远县| 沈阳市| 菏泽市| 衢州市| 泰顺县| 白沙| 庄浪县| 扶绥县| 定南县| 涞源县| 若尔盖县| 沅陵县| 泽州县| 莱芜市| 东丰县| 德钦县| 建宁县| 盐山县| 武宁县| 鲁甸县| 博湖县| 山西省| 井冈山市| 珠海市| 中西区| 广平县| 双城市| 图们市| 安达市| 娱乐| 汪清县| 元朗区| 松潘县| 揭西县| 双辽市| 玉门市| 新安县| 肥乡县|