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

74次阅读
没有评论

共计 5356 个字符,预计需要花费 14 分钟才能阅读完成。

这篇文章主要介绍 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 工作流组件的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计5356字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)