支持 ETSI NFV 处理大型查询结果¶
https://blueprints.launchpad.net/tacker/+spec/paging-query-result
本提案旨在根据 ETSI NFV SOL013 [1] 支持处理大型查询结果。
问题描述¶
根据 ETSI NFV SOL013,如果大量查询结果影响服务器性能,则应返回 400 Bad Request 或使用 URI 查询参数“nextpage_opaque_marker”将其作为子集结果处理。当前 Tacker 中存在的目标 API 如下。
SOL002 [2]
{apiRoot}/vnflcm/v1/vnf_lcm_op_occs
SOL003 [3]
{apiRoot}/vnflcm/v1/vnf_instances
{apiRoot}/vnflcm/v1/vnf_lcm_op_occs
{apiRoot}/vnflcm/v1/subscriptions
{apiRoot}/vnfpkgm/v1/vnf_packages
SOL005 [4]
{apiRoot}/vnfpkgm/v1/vnf_packages
然而,即使使用上述 API,当前的 Tacker 仍然将所有查询结果作为单个查询处理。此外,即使存在大量查询结果,每个 API 也无法返回 400 Bad Request。
提议的变更¶
根据 SOL013 分页查询结果¶
在上述两种方案中,我们选择分页查询结果作为 Tacker 的行为。
当搜索数量达到某个值(为每个 API 设置)时,提供分页功能的 API 将已搜索的结果作为响应返回。在响应的 Link 标头中,包含一个查询参数“nextpage_opque_marker”及其任意值(UUID 格式),以及如下所示的 URL。
<http://example.com:9890/vnflcm/v1/vnf_lcm_op_occs?nextpage_opaque_marker=603b2a59-2483-4d0d-ad13-25b2a7e87eac>; rel="next"
客户端访问此 URL 并获取下一页。
Tacker 通过“nextpage_opaque_marker”参数的值识别之前的查询,然后通过检查已获取的搜索结果,返回属于下一页的子集。 此时,如果下一页也存在,Tacker 将以类似的方式将带有“nextpage_opaque 参数”的 URL 添加到 Link 标头中。 如果没有下一页,Tacker 将不再在响应中提供 Link 标头。
如果已返回的页面中存在已返回的页面,则这些页面将被删除。 此外,如果有未返回的页面并且经过了一定的时间段,这些页面也将被删除。 删除的时间段可以配置。
将整个记录作为结果获取¶
如果查询参数中存在“all_records=yes”,则 Tacker 即使设置了特定查询值,也会返回所有记录,而不进行分页行为。
上述描述的两种响应行为彼此不同,如下所示。
首先,每个目标 API 都有一个可配置的值,指示分页响应中包含的最大记录数。
如果 API 请求中没有查询参数,并且要响应的所有记录数不超过最大记录值,则 Tacker 将所有记录作为单个响应返回。 在类似的情况下,如果要响应的所有记录数超过最大记录值,Tacker 将根据该值分隔记录并返回。
另一方面,如果 API 请求中存在查询参数“all_records=yes”,则 Tacker 无论要响应的所有记录数是多少,都将所有记录作为单个响应返回,即使设置了最大记录值。
数据模型影响¶
无
REST API 影响¶
本规范为目标 API 添加了以下功能。
新的查询参数“nextpage_opaque_marker”和“all_records=yes”可以设置为 URI。
可以选择一次性接收所有查询结果。
在分页的情况下,客户端和 Tacker 之间可以发生 REST API 的多次请求和响应。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
API 请求的大型查询结果被分成较小的部分。 它可以提高服务器在 API 响应过程中的性能。
IPv6 影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
社区影响¶
无
备选方案¶
无
实现¶
负责人¶
- 主要负责人
Koichi Edagawa <edagawa.kc@nec.com>
- 其他贡献者
井上 司 <inoue.tsk@nec.com>
工作项¶
为每个目标 API 配置页面中记录的最大值。
更改现有代码,以便在请求期间使用“nextpage_opaque_marker”以分页响应的形式显示目标 API 响应中的记录。
更改现有代码,以便在请求中设置“all_records=yes”的情况下,将目标 API 响应中的所有记录作为单个查询结果显示。
依赖项¶
无
测试¶
将添加单元和功能测试。
文档影响¶
将在贡献者指南中添加完整的 API 文档,以解释每个目标 API 的新查询作为请求参数。