支持多工作进程的 Sahara API 部署¶
https://blueprints.launchpad.net/sahara/+spec/sahara-api-workers
添加对 Sahara API 多工作进程部署的支持。
问题描述¶
目前 Sahara API 使用一个线程和一个 wsgi 应用。这意味着 API 一次只能处理一个请求。某些请求(例如集群扩展)需要对 Sahara 引擎进行同步请求(使用消息队列)。这意味着在完成整个往返过程之前,Sahara API 将无法处理其他请求。
此外,多线程解决方案提供了更多的性能调优选项。它可以允许利用更多的服务器 CPU 资源。
大多数 OpenStack 服务都支持 API 的多个工作进程。
提议的变更¶
理想的解决方案是迁移到 Pecan 和 WSME( https://etherpad.openstack.org/havana-common-wsgi)并支持多线程。虽然这将需要大量的工作,而且没有太大的压力去做这件事。
本规范建议一个简单的解决方案,用于解决特定问题,而无需对现有代码进行大量重构。
因此,解决方案是:1. 保留当前的 wsgi 实现 2. 保留当前的 socket 处理 3. 在多个线程/进程中运行 wsgi 服务器 4. 仅实现子进程管理,保持所有现有代码不变。
子进程管理将包括
处理子进程,重启死掉的进程
适当的信号处理(参见 https://bugs.launchpad.net/sahara/+bug/1276694)
优雅地关闭
支持调试模式(使用绿色线程代替真实线程)
将不会包含的内容:1. 配置重新加载 / API 重启
替代方案¶
首先迁移到 Pecan 和 WSME。
实现细节¶
大多数 OpenStack 服务使用已弃用的 oslo wsgi 模块。它与 oslo services 模块有紧密的联系。
所以,这里有三种选择
使用已弃用的 oslo wsgi 模块。(不好,因为模块已被弃用)
使用 oslo services 模块,但自己编写所有的 wsgi 代码(或从其他项目复制粘贴)。
编写最少的代码来启动多工作进程服务器(例如,查看 Heat 中是如何实现的)。
我建议采用选项 3。为将来会被替换的代码花费资源没有太大意义(我们最终肯定会迁移到 Pecan)。
数据模型影响¶
无。
REST API 影响¶
无。
其他最终用户影响¶
无。
部署者影响¶
另一个配置参数。
开发者影响¶
无。
Sahara-image-elements impact¶
无。
Sahara-dashboard / Horizon 影响¶
无。
实现¶
负责人¶
- 主要负责人
alazarev (Andrew Lazarev)
- 其他贡献者
无
工作项¶
实现该功能
记录该功能
依赖项¶
无
测试¶
手动。可能 CI 可以更改为在不同模式下运行不同的测试。
文档影响¶
需要进行文档说明。
参考资料¶
无。