通过 IP 性能改进筛选实例

https://blueprints.launchpad.net/nova/+spec/improve-filter-instances-by-ip-performance

此功能的目标是改进通过 IP 地址筛选实例时的性能。

问题描述

Nova 允许在列出实例时按 IP 地址进行筛选。但这种筛选的性能较差,这是因为 IP 地址是实例 network_info JSON 的一部分,我们需要逐一迭代才能找到与请求匹配的实例。这使得这种筛选在大型部署中不可用。

用例

作为操作员,我希望能够高效地按 IP 筛选实例,以便能够定位在提供的 IP 地址上具有异常网络活动的实例。

提议的变更

正如在 Queens PTG 中讨论的 [1],一种可能的解决方案是从 Neutron 获取根据提供的 IP 地址筛选后的端口,然后从 port.device_id 获取实例 UUID,并将其合并到其他筛选器中。

Nova 当前支持使用正则表达式匹配的方式按 IP 地址筛选实例。但 Neutron 端口列表 API 不支持正则表达式匹配筛选。Neutron 中已提交一个 RFE [2] 以支持此功能。Nova 方面的更改将取决于 Neutron 方面的增强。

由于较新版本的 Nova 可能会与较旧版本的 Neutron 通信,我们还将添加逻辑来检查 Neutron 方面是否通过新的网络 API 扩展支持正则表达式匹配。如果该扩展不可用,我们将回退到现有行为,并避免错误地筛选掉所有实例。

Nova 当前还支持按 IP 地址列出和筛选已删除的实例,在此更改之后,用户将无法使用 IP 地址筛选已删除的实例,因为 Neutron 无法提供此类数据。这被认为是可接受的,因为操作员可以随时归档/清除已删除的实例,因此无法保证用户今天可以列出已删除的实例。

备选方案

在 Queens PTG 上提出的另一种方案是在 Nova 数据库中存储一个映射表来进行查询。这个问题是,我们已经在 instance_info_caces.network_info 列中存储了 IP 地址,并且需要努力保持其准确性。将数据存储在另一个地方可能会导致更多错误,因为我们需要在 3 个不同的位置管理状态:Neutron(事实来源)、实例信息缓存和新的映射表。

数据模型影响

REST API 影响

此更改后,用户将无法使用 IP 筛选器列出已删除的实例。

安全影响

通知影响

其他最终用户影响

性能影响

此更改将改进按 IP 地址筛选实例时的性能。

将使用 POC 执行规模(至少 1000 个实例)的基准测试和比较测试,并将提供测试结果。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Kevin Zheng <zhengzhenyu@huawei.com>

工作项

  • 添加逻辑以从 Neutron 查询筛选后的端口

  • 将结果与其他筛选器合并

  • 添加相关文档和 reno

依赖项

由于 Nova 提供正则表达式匹配方式的 IP 筛选,因此这取决于 Neutron 的更改,该更改为 GET /ports API 添加了正则表达式匹配方式 [2]

测试

添加以下测试。

  • 单元测试

文档影响

参考资料

历史

修订

发布名称

描述

Queens

提议