API 无管道¶
https://blueprints.launchpad.net/ceilometer/+spec/api-no-pipeline
Ceilometer API 服务器允许通过 API 发布新的样本数据。这些数据随后通过管道进行处理,然后根据需要进行分发。这意味着 API 服务器必须使用管道代码并拥有一个 pipeline.yaml 文件,从而增加了代码的复杂性以及 API 的测试和安装配置。另一种方法是让 API 服务器发布它接收到的计量数据的通知,然后由通知代理(它本身也拥有一个管道)处理这些通知,并最终进行分发。
问题描述¶
在 API 服务器中包含转换管道会至少在三个维度上增加创建样本(API 中一个不常用的功能)的复杂性。大多数样本是通过轮询代理和通知生成的。
使用管道会在代码、测试和安装中产生可以避免的依赖关系。在代码中,我们必须包含管道模块和类。在测试和安装中,我们必须有一个 pipeline.yaml 文件。
在安装的情况下,如果有多个 API 服务器,pipeline.yaml 文件必须在安装这些服务器的主机上保持同步。这是一个不必要的负担。
提议的变更¶
解决此复杂性的一种方法是在 API 服务器中完全不使用管道。相反,当发布新的样本数据时,将其格式化为通知并推送到通知总线,由通知代理检索。该代理中的管道将执行任何预期的转换。
为了方便测试,将添加一个可选标志,可以启用将样本直接发布到存储,从而避免通知代理进程。
替代方案¶
另一种实现相同目标的方法是
一个更复杂的解决方案是在总线上创建针对特定转换服务的通知。这样的服务将只监听 Ceilometer 生成的测量通知,根据管道描述对其进行转换,然后将其进一步分发到存储或其他处理过程。这种模式将完全跳过通知代理。
优点:扩展了长期分解为更小部分的计划。缺点:增加了此更改的复杂性,增加了完成时间并增加了出错风险。
其他相关的替代方案包括
API 测试需要
pipeline.yaml的问题可以通过使用基于代码的管道默认设置来解决,这些默认设置在没有pipeline.yaml文件时使用(也可以用于生成默认pipeline.yaml文件)。
数据模型影响¶
该提案不会影响数据的结构,但会影响数据的流。需要进行测试以了解这对数据采集及时性的影响。
REST API 影响¶
通过 API 创建的样本将在 API 和其最终存储之间采取稍微不同的路径。
将向 post-samples API 添加一个可选的布尔参数“direct”,允许用户将样本直接发布到存储并避免通知代理处理(将跳过管道),这主要用于测试。
安全影响¶
除了现有的担忧之外,没有其他。
Pipeline 影响¶
之前发生在 api 服务器中的管道转换将在通知代理中发生。
其他最终用户影响¶
无。
性能/可扩展性影响¶
这可能会在样本发布到 API 和到达数据存储之间引入一些延迟。
其他部署影响¶
API 服务器的部署者不再需要在 API 服务器旁边部署 pipeline.yaml 文件。
并且部署者需要在 ceilometer.conf 中配置“notification_driver”,如果需要通过通知代理发布样本,例如
notification_driver = messaging
开发者影响¶
此更改可能会增加某些测试中的异步性。例如,发布样本和检索该样本之间的时间可能会变得更加不可预测。由于它已经不可预测,任何依赖于立即检索的测试本身就是不好的,因此我们应该修复它。
实现¶
负责人¶
- 主要负责人
liusheng
- 其他贡献者
chdent
- 持续维护者
liusheng, chdent
工作项¶
确保存在对通过管道转换的计量数据发布进行可靠测试。
用通知程序替换 API 代码中的基于管道的发布。
更新 API 测试以处理不再存在的模拟管道等问题。
API 选项,用于直接写入存储
未来生命周期¶
Telemetry 程序的成员将对该功能进行任何必要的持续维护。
依赖项¶
没有新的依赖项。
测试¶
除了 API 的现有单元测试外,还可以使用 声明式 http 测试 来确认发布的样本是否继续具有预期的转换。
文档影响¶
部署文档可能需要进行一些小的更新,以指示 API 服务器的配置文件要求的变化。
参考资料¶
无