中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-12-29 14:52:39 來源:億速云 閱讀:167 作者:小新 欄目:云計算

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

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

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

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

1. 基本術語

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

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

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

Flow:工作流。 指的是Mistral系統中如何執行task,解析task的依賴關系等等,從而讓task順利結束,并返回狀態。

WorkFlow Execution: 工作流執行紀錄。就是指某次具體的Flow,每次執行task產成的WorkFlow Execution會永久保存在數據庫中,方便后續查詢,或者重新執行Flow。

2. DSL 介紹

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

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. 實戰

從Github下載最新的代碼,安裝好運行環境。同時啟動API和executor服務

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)來看看到底發生了什么。首先看看系統中存在哪些workbook,已經剛剛運行的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,首先定義了一個服務(在系統中注冊個新的服務,服務一般都包含定義好的action,這樣用戶就可以在task flow中指定運行這個action),這個服務類型是REST,然后參數有哪些等等。然后定義了一個工作流,其中的任務列表(tasks)第一個是my_task (taks名字),這個task做了一件事情,就是運行一次MyRest服務中的my_action動作。

在看看另外一個workbook, 就簡單定義個一個ECHO type的服務。這個服務僅在內部測試使用,就直接返回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. 最近進展

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

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

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

另外關于Mistral和taskflow的集成:

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南郑县| 门源| 九龙县| 房产| 大埔区| 勃利县| 二连浩特市| 米脂县| 石台县| 红河县| 平定县| 湖口县| 南漳县| 增城市| 永川市| 正宁县| 秦安县| 武邑县| 曲周县| 绍兴市| 民和| 诏安县| 陈巴尔虎旗| 壤塘县| 宜州市| 汝阳县| 无为县| 云林县| 云安县| 浦江县| 苗栗市| 江西省| 福泉市| 锡林浩特市| 吉木萨尔县| 梧州市| 通辽市| 通化县| 竹溪县| 安岳县| 安宁市|