强制 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 可能对他们来说已经损坏了。也就是说,这需要公开宣传。