TaskFlow 是一个为了 openstack 实现的 python 库,使得执行 task 变得简单,一致,易扩展,可靠;
它能以一种声明的方式,将轻量级 task 对象的创建与 flows 结合起来;
它以一个可以声明的方法可以使得其包含的 engines 去运行这些 flows,这些 flow 可以被停止,继续,或者是安全回滚;
使用 TaskFlow 可以享受以下特性:
更多的弹性状态;
自然声明构造;
更易于测试(由于 task 包括且只包括一件事);
工作流插件化;
容错性;
简化 crash 后的恢复;
【Why TaskFlow?】
如今 openstack 代码已经有组织的增长,但是对于去操作序列化的代码,没有一个标准和一致的方法,使得当调用过程意外被终止时,代码流程可以安全的继续或者回滚;
大多数 projects 甚至没有让 tasks 可重启与可恢复;
简单的跳过或者恢复的场景在如今的代码里已经几乎不可能;
Task 可以轻松地解决这些问题;
【Conceptual example】
下面这段伪代码描述了一个 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...