1 Mistral背景
Mistral是一个OpenStack生态圈中比较新的项目,该项目的目标是:
The project is to provide capability to define, execute and manage tasks and workflows without writing code.
截至到目前开发还不到2年,最初是由Mirantis公司贡献给Openstack社区的工作流组件,提供Workflow As a Service服务,类似AWS的SWS(Simple Workflow Serivce),Hadoop生态圈中的oozie服务。它虽然没有Nova、Cinder等核心组件那么流行,部署率也不是很高,社区Pike版本的统计还没有出来,Ocata统计中Mistral的成熟度为1/7,部署率为5%,参考OpenStack Mistral,但还是得到很多开发者和用户关注,项目活跃度还是比较高的。
注意它和OpenStack资源编排服务Heat不同,二者功能可能会有重叠,但Heat注重基础资源的编排,而Mistral则主要是用于任务编排。Heat的主要应用场景是创建租户基础资源模板,管理员可以创建一个资源模板,基于这个模板用户一次请求就可以完成虚拟机创建及配置、挂载数据卷、创建网络和路由、设置安全组等。而Mistral的典型应用场景包括执行计划任务Cloud Cron,调度任务Task Scheduling,执行复杂的运行时间长的业务流程等。我们目前使用的场景是基于Cloud Cron创建定时任务,比如定时创建虚拟机快照、定时创建数据库备份等。
2 Mistral的几个概念
要研究Mistral,首先需要了解Mistral包含哪些实体,了解这些实体的关系以及转化过程。其中我总结了几个核心实体关系图如下:
- action:action是最小执行单元,可以理解为一条命令或者一个OpenSack API请求。
- workflow:Mistral的核心,Mistral主要围绕着workflow工作的,其由DSL语言定义,由各种action以及执行逻辑组成。
- cron-trigger: 定时任务,通过crontab设定workflow执行周期。
- execution:workflow进入运行状态即为execution,它是runtime态的,因此有执行状态,如running、error、success等。
- task:一个execution由一个或者多个task构成,task也有运行时状态,如running、error、sucess等。
- action-execution:task由多个action-execution构成,action进入运行时状态即为action-execution。
如果说workflow等同于程序,则execution相当于一个进程,task则类似于线程,action为一个函数或者一个计算机指令。
另外一个比较特别的实体member,这个主要用于分享资源给其它租户,和Glance的member功能是一样的。
接下来我们对以上涉及的几个实体概念进行详细介绍。