在云计算大潮中,无论是公有云、私有云还是各种专属云,针对云服务产品的交付通常采用自动化部署方式,而在云服务产品的自动化部署过程中,由于涉及的环节多,涉及环境复杂,有主机、VPC、存储、安全组、VIP、镜像、各云服务产品的集群规模和节点等各种要素的开通和配置,因此,在自动化部署过程中,采用工作流框架来进行任务调度往往成为一个重要选择。
目前业界关于工作流产品也很多,包括Activiti,Camunda,Flowable等等。
Activiti :是一项基于Apache许可的开源BPM平台,由Alfresco软件开发,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
Camunda:是一个基于Activiti5、轻量级、开源的工作流框架,是用Java开发的一个Java库。其核心是在Java虚拟机内部运行的BPMN 2.0流程引擎,可以嵌入到Java应用程序或运行时容器中。
Flowable:是一个使用 Java 编写的轻量级业务流程引擎,使用 Apache V2 license 协议开源。flowable基于activiti6衍生出来的版本,并在其基础上研发了DMN支持、BPEL支持等等,与其开源版相比其商业版的功能会更丰富。
虽然业界成熟的工作流框架较多,但是出于各种考虑,往往需要自己开发一个满足自身需要的轻量化的工作流框架,实现自己对云服务产品进行自动化部署调度。一个良好的工作流框架要具备可视化、可编排、可回退、可运维、可监测、具备容错、自动修复、与业务低耦合而又能灵活调度等能力。
工作流框架涉及流程定义、发布、调度、执行等。
【流程定义:】
可以定义自动化部署所涉及的各类云服务产品在进行开通、变更、注销等过程中涉及的各种流程
流程包括开始节点、结束节点以及流程执行过程中涉及的多个任务节点。
开始节点: 标识着一个流程的开始,没有前序节点,但拥有一个或多个后序节点,作为一个流程的开始,开始节点只需要完成流程启动初始化操作。
结束节点: 标识着一个流程的结束,终止节点没有后序节点,但拥有一个或多个前序节点;作为一个流程的结束,终止节点没有特定的凼义,只需要完成流程结束后的操作,包括自动归档流程实例并将其销毁等;
任务节点:是流程中最主要的节点,也是最复杂的节点,是定义整个流程中涉及的关键任务事项,并通过这些任务节点进行编排和调度,完成整个业务流程。在自动化部署流程中,涉及的任务节点有资源环境检测、云主机创建、安全组配置、镜像介质部署等等。工作流调度引擎执行到该节点时将根据规则定义产生任务事项,任务事项是用户/平台/系统等与工作流进行交互的主要途径。
任务节点根据其涉及的关键任务事项,可以从多个维度进行定义:
- 业务定义:关联具体的业务,可能需要用户界面操作,也可能是系统的任务、接口调用、事件通知等等;
- 执行条件:即定义该任务节点在什么条件下执行;
- 变量定义:即涉及执行条件或者执行过程中需要预定义的变量参数;
- 时限规则:即该任务要完成的时限要求;
- 异常规则:即定义该任务异常场景下的异常处理规则;
- 回退规则:即定义任务发起回退时涉及的规则,包括回退条件规则、回退处理规则等,如云主机创建回退需要根据业务规则进行资源释放等等;
- 优先级规则:定义该节点在被并行调度时的优先处理规则;
- 协作规则:定义该节点协作方式,包括任务分配方式、任务执行方式和任务抢占方式。
- 跳转转发规则:定义该节点处理完成后的跳转规则。
- 合并规则:当多个节点流入到当前节点时,需要定义合并规则,控制任务流转。一般来讲有两类:与合并(一直等到所有的流入节点完成任务,才进行处理)、或合并(不等待所有流入节点完成任务,任何一个流入节点则处理)。
- 回调规则:定义节点所关联的回调接口及其规则。
- 等
另外,实际生产中流程定义还涉及主流程定义和子流程的定义、流程的拆分、合并、等待、唤醒等等。
【流程发布】
流程定义后,在流程发布时需要考虑流程定义的版本管理、发布所涉及业务场景(如云服务产品自动化开通流程、扩缩容流程等场景)、发布后生效规则等等。
【流程实例】
流程定义并发布后,通过流程引擎调度,生成具体的流程实例,一个流程定义生成一个或者多个流程实例。
- 工作流框架记录所有节点的调度和执行日志;
- 工作流框架提供可视化模式,允许对工作流执行进度、执行结果进行跟踪查看、干预,支持对工作流实例的暂停、恢复、撤销、重试、终止等操作;
- 工作流框架支持对完成的流程实例进行归档处理。
- 等
总结:
工作流(Workflow)是对工作流程及其各任务步骤间对业务处理规则的抽象和概括描述。早在1993年?作流管理联盟(WFMC :Workflow Management Coalition)成立并颁布了系列的与工作流管理相关的规范标准。我们可以参考这些规范模型和标准,借鉴业界工作流框架思路,结合云服务产品自身自动化部署要求,构建一套满足各种多云环境下的支撑云服务产品灵活高效部署调度的工作流框架。