为处理器添加一些并发/并行性¶
目前处理器是单线程的(除了 AMQP 监听器),并且运行在一个进程中。这是一个为处理器添加并发性的提案,这将带来巨大的性能提升。
https://storyboard.openstack.org/#!/story/2005423
问题描述¶
鉴于处理器在追赶到当前时间戳后,大部分时间都在等待,因此这不是一个关键特性。但是,这并不意味着代码需要进行大量的修改,并且可以带来巨大的性能提升。
更快的处理器可以更快地追赶到当前时间戳,这对于新的部署或需要重新处理较长时间段的情况非常有用。
提议的变更¶
此更改可以分为两个部分。第一部分(也是最简单的一部分)是通过使用 eventlet 绿线程,(伪)同时检索给定范围和时间段的所有指标。CloudKitty 已经依赖 eventlet,因此不需要新的依赖项。一旦支持 python2 被放弃,这部分就可以更新为使用 STL,并移除对 eventlet 的依赖(可以替换为 concurrent.futures 或 asyncio)。
该更改相当简单:在 worker 中,不要连续调用 _collect(每个指标类型一个),而应该同时调用它们。
第二部分是为每个 cloudkitty-processor 实例生成多个 worker。为此,建议使用 **cotyledon** 库,该库已被其他 OpenStack 服务(如 ceilometer)使用。同样,更改也比较小:不是继承 object,Orchestrator 应该从 cotyledon.Service 继承。还将添加一个 cotyledon.ServiceManager,生成多个 orchestrator 服务。
为了限制对网络和内存的负载,worker 的数量将是可配置的。
备选方案¶
可以使用 STL 的多进程,而不是使用 cotyledon。但是,cotyledon 具有一些有用的功能,例如将信号转发到 worker。此外,未来可能会添加一些新的服务类型(评分代理等);cotyledon 可以轻松集成这些服务,而无需对代码进行大量更改。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
没有,除了显著的性能提升之外。
性能影响¶
将对处理器的性能进行显著改进。
其他部署者影响¶
无
开发人员影响¶
这为 cloudkitty 添加了一个新的依赖项:**cotyledon**。引入并发和并行性将鼓励开发人员采用函数式编程风格,以避免竞争问题。
实现¶
负责人¶
Gerrit 主题:adding-concurrency。
- 主要负责人
peschk_l
工作项¶
使用 eventlet 绿线程检索指标。
使用 cotyledon 运行多个 cloudkitty-processor worker。
在文档中添加一个 **编排 (orchestration)** 部分。它将包含有关如何配置 worker 数量以及如何配置协调 URL 的详细信息。
依赖项¶
cotyledon
测试¶
一旦这些场景实现,将通过 tempest 场景进行测试。
文档影响¶
将在文档中添加一个 **编排 (orchestration)** 部分。它将包含有关如何配置 worker 数量以及如何配置协调 URL 的详细信息。
参考资料¶
Cotyledon 文档:https://cotyledon.readthedocs.io/en/latest/index.html
Eventlet 文档:https://eventlet.net/