Cinder API WSGI 应用在 Apache/Nginx 下

https://blueprints.launchpad.net/cinder/+spec/non-eventlet-wsgi-app.

Cinder API 使用 eventelt 作为 Web 服务器和 WSGI 应用管理器。Eventlet 提供自己的 WSGI 应用来提供 Web 服务器功能。

问题描述

  • Cinder API 以另一种方式部署,作为通用的 Web 应用。Apache/Nginx 通常用作 REST API 应用的 Web 服务器。

  • Cinder API 作为单独的服务运行。这意味着云运营商需要配置一些软件来监控 Cinder API 是否正在运行。

  • Apache/Nginx 在实际重负载下比 eventlet 表现更好。

用例

  • 像任何其他 Web 应用一样,使用 Apache/Nginx 部署 Cinder API。

  • 使用 Apache/Nginx 部署 Cinder API 以获得开箱即用的负载均衡和 Web 应用

    监控。例如,Nginx/uWSGI 可以在后端服务停止时重启它。

提议的变更

提供基于所用 Web 框架的 WSGI 应用,而不是 eventlet。将基于 eventlet 的 WSGI 应用作为默认选项,并使其可配置。

备选方案

保持现状,继续使用 eventlet 提供 REST API Web 服务。使用类似 haproxy 的工具进行 API 请求负载均衡,并使用 watchdog 来在 Cinder API 服务关闭后重启它。

数据模型影响

无。

REST API 影响

无。

安全影响

通知影响

其他最终用户影响

性能影响

如果我们有大量请求发送到 Cinder API,可能会出现潜在的性能影响。性能影响将使用 Rally 进行测试。

其他部署者影响

部署者应配置 Apache/Nginx/等和 WSGI 模块来处理对 Cinder API 的请求。默认情况下,Cinder API 将使用 eventlet,并且不会对部署者产生影响。

不会为 Cinder 引入新的配置选项。

Chef cookbooks 和 Puppet manifests 应该支持新的部署模式。

开发人员影响

实现

负责人

主要负责人

Ivan Kolodyazhny <e0ne>

其他贡献者

Anton Arefiev <aarefiev>

工作项

  • 实现基于 webob 框架的 WSGI 应用。

  • 使用 Rally 测试性能影响。

  • 编写文档说明如何使用 Apache/Nginx 运行 Cinder API。

  • 在 Devstack 中实现配置选项以支持新的部署模式。

  • 确保 eventlet 的使用不会破坏 Nginx/Apache 中的 WSGI。

  • 启动跨项目倡议,在 oslo 中实现此功能。

依赖项

测试

将实现新的部署模式的函数测试。我们需要在 infra 上对每次提交进行 CI 测试此功能。

文档影响

将更新管理员指南。

参考资料