强制 API 查询限制

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/ceilometer/+spec/mandatory-api-limit

目前,Ceilometer 的 api 允许用户查询任意数量的数据。他们也被允许查询所有数据,无论结果大小如何。

问题描述

允许返回所有数据并非实际使用场景。虽然理论上查询所有数据更容易,但实际上这是不可行的,因为它会对 CPU 和内存造成很大的压力来管理所需的所有数据。此外,这些查询需要大量时间来计算,即使系统有足够的资源,也总是会超时。

由于 Ceilometer 打算移除未使用的分页功能,因此需要另一种查询限制形式。

提议的变更

必须对查询强制执行限制,无论是限制值。如果未提供任何值,将应用默认限制 100。这与其他数据库(如 ElasticSearch)类似,如果未提供任何限制,它们会限制返回的结果数量。

用户仍然可以选择查询整个数据集,但与当前功能不同,用户需要显式地执行此操作,而不是隐式地执行。

这些限制将适用于事件和计量 API。

替代方案

什么也不做,让用户责怪 Ceilometer 提出的荒谬查询。

数据模型影响

REST API 影响

所有 GET 查询都需要一个限制值。如果未提供,将应用默认值 100。

安全影响

Pipeline 影响

其他最终用户影响

需要一个限制值才能按预期获取数据。如果未提供,返回的结果可能会被截断。每当应用默认限制时,将记录一条警告。

性能/可扩展性影响

这将限制由无意的大量查询造成的负载。

其他部署影响

将定义一个新的选项,允许操作员控制默认返回限制是什么。

开发者影响

需要编写单元测试来考虑此限制。

实现

负责人

主要负责人

gordc

其他贡献者

持续维护者

工作项

  • 添加选项以控制默认限制值

  • 将限制检查应用于计量查询并修复 UT

  • 将限制检查应用于事件查询并修复 UT

  • 更新文档

未来生命周期

我们可以根据返回数据集的最后一个时间戳值推导出一个查询链接,该链接返回下一组数据。

依赖项

测试

单元测试以测试是否应用了默认限制。

文档影响

这对于某些人来说可能是一个破坏性更改——Ceilometer 可能对他们来说已经损坏了。也就是说,这需要公开宣传。

参考资料