结构化状态管理
起草人: Harlowja
修订于:2013年5月25日,Harlowja
目录
原理
从资源获取和修改的临时状态和状态转换转向更明确、更有组织的的状态管理系统。这个新的状态管理系统将拥有先进、闪亮的新特性,例如比当前系统更高的稳定性、自动恢复机制和更大的可扩展性(以及更多!)。
定义
- 状态
- 某人或某物在特定时间所处的特定条件:“实例请求的状态”。
- 状态转换
- 通过在状态上应用一个函数来改变状态(该函数可以接收输入并提供输出),从而产生一个新的状态。
- 任务
- 在给定状态上应用状态转换。
- 工作流程
- 工作流程通过一系列的行政/其他流程,从启动到完成。
- 状态管理引擎
- 安排或控制元素以实现期望整体效果的个人或实体。
试图解决的问题
- 提高状态和状态转换的 ['可扩展性', '可恢复性', '可靠性', '稳定性']。
- 使添加、调试、审查、测试、理解和验证现有和新的状态和状态转换更容易。
- 消除难以发现的状态和转换依赖关系和交互。
- 确保状态转换由一个实体正确可靠地完成,该实体的唯一职责是正确可靠地执行这些转换。
- 解决以前通过临时补丁解决的各种问题。
- 消除当前临时工作流程的固有脆弱性。
- 允许在不需稍后手动清理这些操作的情况下,升级云/软件并进行进行中的操作。
- 可以以统一的方式审计和跟踪在给定资源上执行的状态转换。
- 注意:目前存在通知、日志记录、事件报告作为不同的机制(这些机制并非以统一的方式使用)。
- 消除了某些类型的周期性任务的需求,这些任务随着集群的扩大而消耗越来越多的资源。
- 朝着行动在中断事件(节点故障、资源故障、网络故障等)时自动恢复的道路发展。
- 消除了周期性任务清理垃圾(孤立的实例/资源/任务...)的需求。
- 为在发生错误时更可靠和自动的恢复过程奠定了基础。
- 鼓励使用更['复杂', '自定义', '实验性']的工作流程来['更改', '扩展']默认工作流程。
解决已知需求
- https://blueprints.launchpad.net/nova/+spec/compute-instance-cleanup-service
- https://blueprints.launchpad.net/cinder/+spec/cinder-state-machine
- https://bugs.launchpad.net/nova/+bug/1173408
- https://bugs.launchpad.net/nova/+bug/1173413
- https://bugs.launchpad.net/nova/+bug/1173417
- https://bugs.launchpad.net/nova/+bug/1173420
- https://bugs.launchpad.net/nova/+bug/1050979
- https://bugs.launchpad.net/nova/+bug/1061024
- https://bugs.launchpad.net/nova/+bug/1082414
- https://bugs.launchpad.net/nova/+bug/1173429
- https://bugs.launchpad.net/nova/+bug/1173430
- (以及更多)
Blueprints
- https://blueprints.launchpad.net/nova/+spec/structured-state-management
- https://blueprints.launchpad.net/cinder/+spec/cinder-state-machine
相关论文
- http://www.netdb.cis.upenn.edu/papers/tropic_tr.pdf
- http://research.microsoft.com/pubs/64604/osr2007.pdf
相关 Wiki
- https://wiki.openstack.org/wiki/Convection
- https://wiki.openstack.org/wiki/NovaOrchestration/WorkflowEngines (旧)
潜在需求
https://etherpad.openstack.org/task-system
峰会讨论
Havana 峰会
- https://etherpad.openstack.org/the-future-of-orch
- https://etherpad.openstack.org/Summit-Havana-Cinder-Safe-Shutdown
计划
步骤 1
创建原型
- 创建核心工作流/任务库,并在 nova 中使用该库对 run_instance 操作进行原型设计。
- 将此操作(重构)拆分为小的原子任务块(暂时不要追求完美,因为这是一个原型)。
- 将块组织成一个工作流并测试工作流。
- 在峰会期间展示工作原型(以及相关文档...)。
步骤 2
- 从参与创建它的人员 + 其他感兴趣方那里获取原型反馈。
- 从峰会获取反馈。
- 从邮件列表 + 其他感兴趣方那里获取更多反馈。
- 组建一个感兴趣的团队,他们希望帮助推进原型设计原则和在其他核心项目中的使用。
步骤 3
- 选择单个第一个目标项目来使用新的 taskflow 库。
- 在所述项目中孵化 taskflow 库,使用来自原型的部分。
- 从一开始就让其他活跃项目参与进来(以便可以轻松地在这些项目中使用的库)。
- 通过使用它来完成一个关键工作流程,在所述单个第一个目标项目中证明库。
- 调整所述目标项目中的工作流程,分块使用所述库。
- 调整每个小块的测试(取决于它更改的内容)并为新功能添加新的测试。
- 将块提交到 http://review.openstack.org(在准备好启用之前禁用整个/部分组件?)。
步骤 4
- 将 taskflow 库(以及相关的测试)移动到 oslo。
步骤 5
- 选择另一个流程并在所述第一个项目中重构它和/或选择另一个感兴趣的项目来处理所述流程。
- 使用所述库将此其他流程拆分为小块。
- 调整每个小块的单元测试(取决于它更改的内容)并为新功能添加新的测试。
- 将块提交到 http://review.openstack.org(在准备好启用之前禁用整个/部分组件?)。
- 漂洗并重复。
原型
https://github.com/Yahoo/NovaOrc
设计
工作流程
更多细节!
参见:结构化状态管理细节
参见:结构化工作流原语
参与:结构化工作流