从 API 服务器移除 Eventlet¶
https://blueprints.launchpad.net/ceilometer/+spec/remove-web-eventlet
从 Kilo 版本开始,提供 Ceilometer API 的 WSGI 应用程序可以通过两种基本不同的方式运行
作为使用 eventlet 补丁的基于 Werkzeug 的 Web 服务器运行的 Python 命令。
作为由任何 WSGI 服务器(通常是 Apache + mod wsgi)托管的 WSGI 应用程序。
在专用的 WSGI 主机中托管服务器应用程序具有性能、配置和扩展优势。 运行命令行服务虽然方便简单的测试,但当它被补丁以使用 eventlet 时,可能会导致难以诊断的错误和异常行为。 由于 Werkzeug 服务器可以(并且如目前编写的那样)提供对多进程和多线程交互的支持,因此应删除 eventlet 的包含。
问题描述¶
Eventlet 补丁了 socket 模块以提供非阻塞网络 I/O。 这在大多数情况下效果很好,但当出现异常的 socket 情况时(例如,客户端在读取服务器想要发送的所有数据之前频繁关闭连接),生成的堆栈跟踪可能比没有 eventlet 的情况下的堆栈跟踪更难用作调试辅助工具。 我们希望我们的工具尽可能有用,*尤其*是在需要调试的情况下。
在使用 Werkzeug 服务时,使用 eventlet 有些多余,因为 Web 服务器配置为运行多个进程。
提议的变更¶
我们可以相对容易地解决这个问题。 目前,在 ceilometer.cmd 下导入的所有内容都启用了 eventlet 补丁(通过 ceilometer/cmd/__init__.py)。 这有些过头了。 我们应该评估哪些服务从中受益,并仅为这些服务启用它。 我们可以从 API 服务器开始。
此外,为了引导人们找到最佳解决方案,我们应该更新文档和指导,向下游说明使用 WSGI 主机是在生产环境中托管 API 服务的更好方法。
替代方案¶
什么都不做。 这是一个卫生的更改,将使用户和开发人员受益,但并非绝对必要。
数据模型影响¶
无
REST API 影响¶
没有。 如果我们搞砸了什么。
安全影响¶
无。
Pipeline 影响¶
无。
其他最终用户影响¶
无。
性能/可扩展性影响¶
对于生产环境,使用 WSGI 主机的指导将为调整配置以进行扩展和性能提供更多选择。
其他部署影响¶
希望利用使用 WSGI 主机的更直接指导的部署者将不得不按照说明进行操作。
开发者影响¶
无
实现¶
负责人¶
- 主要负责人
chdent
- 其他贡献者
无
- 持续维护者
chdent
工作项¶
将 eventlet 和非 eventlet 命令分成两个不同的模块目录,从 api 模块开始。
比较并对比 API 服务器在有和没有 eventlet 时的性能,特别注意对访问存储层的影响。 Mike Bayer 指出,删除 eventlet 对配置良好的 Web 服务器和配置良好的存储层影响很小。 我们需要在三种呈现 APU 的样式中确认这一点:WSGI 主机、带有 eventlet 的 Werkzeug、不带 eventlet 的 Werkzeug。
更新开发人员和管理员文档。
未来生命周期¶
这是一个核心服务,将由 Ceilometer 项目持续维护。 一旦 API 服务器不再使用 eventlet,我们就可以查看其他控制台脚本是否有任何可以从更改中受益。
依赖项¶
没有新的依赖项。
测试¶
现有的 API 测试将涵盖这些更改。
文档影响¶
如上所述,需要更新开发人员和管理员文档,以反映有关最佳服务配置的新指导。
参考资料¶
无