Taskflow是OpenStack中的一个Python库, 它主要是可以使task的执行变得更加容易、一致和可靠,这对于openstack中各种长流程任务来说应该十分有好处,当前已经使用在cinder中,下一步是neutron。

它 执行flows,可以停止、重新开始和以安全的方式恢复flows。它与RDBMS动作保护有点类似。当一个flow被中断时,动作可以恢复,甚至可以自动回滚。

概念上的例子


下面的伪代码说明一个flow是如何以类似SQL 事务的方式工作的。



START TRANSACTION
   task1: call nova API to launch a server || ROLLBACK
   task2: when task1 finished, call cinder API to attach block storage to the server || ROLLBACK
   ...perform other tasks...
COMMIT


上的例子可以用于Heat 编排的一部分,添加一个挂载了卷的实例。这个编排可以并行的生成大量的类似的实例。



Why


OpenStack 的代码正在有组织的增长,但是如果进程被意外中断,却没有一个可以安全恢复或回滚代码的标准;大多数项目并没有使task可以重启或恢复,简单的挑高或恢复的场景在今天的代码里已几乎不可能。


Goal:通过Taskflow的推广,使OpenStack变的可信和可靠,甚至在没有HA的情况下。


Further use-cases


Orphaned resources(僵尸资源)



由于现在OpenStack的项目缺乏事务语义,所以会留下一些资源成为孤儿状态,或ERROR的状态,在自动化系统(Heat)



情况下,这种状况是非常不能令人接收的,因为非常难分析哪些是要被清除的孤儿资源。Taskflow提供其以任务为导向的模型



将能正确地追踪资源的变动,这就容许在一些资源上的动作可以自动地被撤销,以确定没有资源被称为“僵尸”。




Metrics and history(度量和历史)



当OpenStack服务被组织进task 和 flow 的对象和模式时,他们获得自动地能力,可以简单的增加度量报告和历史操作,这些



服务用taskflow可以记录这些度量/历史,并与task 和 flow的运行进行关联。在多种OpenStack服务中,有多种方法




Design





架构


Tasks