解耦嵌套堆栈¶
https://blueprints.launchpad.net/heat/+spec/decouple-nested
作为朝着更精细的架构迈出的步骤,如 convergence-engine 规范中所述,我们提出可以更有效地解耦现有 heat 架构中的嵌套堆栈。
问题描述¶
创建许多嵌套堆栈的树形结构会导致每次堆栈操作时,单个 heat-engine 进程都会处理整个堆栈树,并且对每个嵌套堆栈的访问都由相同的全局锁序列化(该锁用于访问顶级堆栈)。
虽然 convergence-engine 中描述的更复杂和更具侵入性的步骤仍在研究中(这可能需要一些时间,并且可能会因为下面描述的解耦而变得更简单),我们建议更有效地将嵌套堆栈与其父堆栈解耦,以便我们可以利用现有的 RPC 轮询调度来使嵌套堆栈操作(例如创建/更新/删除)能够以更可扩展的方式处理,通过将每个堆栈的工作分散到多个引擎进程或工作器上。
提议的变更¶
重构引擎 RPC 接口,以便能够传递一些额外的参数给创建/更新操作,从而打破父堆栈和嵌套堆栈之间的现有耦合(例如传递 user_creds ID)。
重构 StackResource 基类,通过 RPC 执行操作,而不是在执行生命周期操作时直接操作 parser.Stack 对象
请注意,StackResource 的重构将侧重于通过 RPC 调用执行更改堆栈状态的操作(例如,通过 IN_PROGRESS 状态异步执行的操作),而保持堆栈内省的现有代码不变。这应该允许以最小的 StackResource 子类重工来实现向新接口的风险较低的过渡。
一个可能留待未来增强的领域是在通过 RPC 触发操作后轮询 COMPLETE 状态,例如,当我们通过 RPC 调用触发嵌套堆栈创建时,我们将直接轮询 DB 等待 CREATE COMPLETE 状态在 check_create_complete 中。将来,最好等待通知以避免轮询 DB 的开销。
备选方案¶
等待完整的 convergence-engine 愿景成真吧,但我认为对于主要关心这些类型工作负载的用户子集来说,我们需要一个更直接的缓解计划。
实现¶
负责人¶
Steven Hardy (shardy)
里程碑¶
- 完成目标里程碑
Juno-3
工作项¶
重构 RPC 接口
将 StackResource 创建操作转换为通过 RPC 创建堆栈
将 StackResource 删除操作转换为通过 RPC 删除堆栈
将 StackResource 暂停操作转换为通过 RPC 暂停堆栈
将 StackResource 恢复操作转换为通过 RPC 恢复堆栈
将 StackResource 检查操作转换为通过 RPC 检查堆栈
将 StackResource 更新操作转换为通过 RPC 更新堆栈
依赖项¶
没有,但这可以被认为是 convergence-engine 工作的前奏。