通用目的决策引擎线程池

https://blueprints.launchpad.net/watcher/+spec/general-purpose-decision-engine-threadpool

许多 I/O 操作,例如写入磁盘或等待网络响应,需要很长时间。通过利用并行性,可以大大减少执行这些操作所需的时间。决策引擎的通用线程池将允许并行执行方法,从而减少执行这些操作所需的时间。

问题描述

通用线程池将减少执行决策引擎某些操作所需的时间。例如,目前,收集指标或构建数据模型可能需要与规模成比例的大量时间。

用例

  • 作为用户,我希望审计的执行速度尽可能快。

提议的变更

引入一个通用线程池,使用 futurist 库,最终用户可以配置线程数量。这将引入一个新的类,该类使用单例模式,以便在整个决策引擎中使用。线程池将使用 GreenThreadPoolExecutor,因为它不会与其他在决策引擎中使用的线程池冲突。单例将包含几个方法,以简化任务的提交和等待完成。

使用线程池后,数据模型的构建将被并行化,这分为三个步骤。首先,并行执行调用以检索有关聚合和可用区的信息。该信息用于提交任务以收集有关每个计算节点的信息。最后,使用 futures 可以立即提交任务以检索给定计算节点上的实例信息。

备选方案

一个专门为构建数据模型而构建的线程池。但是,这意味着在决策引擎的其他部分引入并行性将再次需要设计和实现另一个线程池。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

总体而言,执行审计所需的时间应显著减少,但是,大量的线程可能会对外部服务产生负面影响。因此,默认线程数应为大多数 OpenStack 基础设施的相对安全值。

其他部署者影响

部署者应根据其基础设施的规模评估 Watcher 要使用的线程数量。

开发人员影响

实现

负责人

主要负责人

<dantalion>

工作项

  • 基于先前的概念验证实现线程池单例。

  • 修改构建数据模型的方法以使用如上所述的三步并行化。

  • 实现相关的测试用例以测试线程池和数据模型的构建。

依赖项

  • futurist,一个由 OpenStack 维护和开发的库。

测试

应评估数据模型构建的行为以及线程池的行为。

  • 验证线程池中辅助方法的行为。

  • 验证使用并行化构建时数据模型的完整性。

文档影响

文档将更新,以包含使用示例,指示其他开发人员如何最好地使用线程池。此外,将提供典型的用例,说明在什么情况下此线程池最有用。

参考资料

历史

修订

发布名称

描述

Ussuri

引入