重新处理服务器详情的安全组

https://blueprints.launchpad.net/nova/+spec/rework-security-group-retrieving

问题描述

如果使用 neutron,生成 nova 服务器详情可能会显著变慢。原因是检索安全组 ID/名称需要额外的 neutron API 调用,调用的次数与实例关联的端口数成线性关系,并除以 100。

通过移除对 neutron API 的调用,服务器详情的性能提升了 30%。Nova 已经有一个 info_cache,用于保存端口名称,我们可以利用这一点,同时保存安全组名称。通过这样做,我们应该能够提升 API 性能。

用例

加速服务器详情列表的生成,并提高 API 的响应速度。

提议的变更

添加一个新的微版本,并允许用户检索服务器详情列表,但不包含安全组。用户仍然可以通过 neutron API 查询安全组信息,例如 openstack port list –server ${VM_UUID} -c security_group_ids

info_cache 中缓存每个绑定端口的安全组名称,以便直接从数据库检索安全组,而无需调用 neutron API。希望这能加快服务器详情查询的速度,前提是 info_cache 中填充了足够多的安全组名称。另外请注意,更新绑定端口也会导致 neutron 服务器回调 nova-api 并更新 info_cache 中的条目。

备选方案

数据模型影响

info_cache 对象将拥有一个新的属性,名为 security_group

REST API 影响

添加一个微版本,以移除在使用 neutron 网络插件时相关 API 中的安全组。同时,移除代理 API 以查询安全组,用户应该能够使用 neutron API 代替。

从以下 API 中移除安全组

  • GET /servers/details

  • GET /servers/{server_uuid}

  • PUT /servers/{server_uuid}

  • POST /servers/{server_id}/action where action is rebuild

以下 API 将被弃用:

  • GET /servers/{server_id}/os-security-groups

在创建实例时,仍然可以指定安全组。此行为未被修改。

安全影响

通知影响

其他最终用户影响

使用新的微版本后,用户需要查询 neutron API 以获取安全组

性能影响

查询服务器详情的速度将会加快。

其他部署者影响

nova API 层将处理缓存未命中,并仍然查询 neutron 以获取安全组。

开发人员影响

升级影响

实现

负责人

主要负责人

ushen

其他贡献者

功能联络人

功能联络人

Ghanshyam

功能联络人

Balazs Gibizer

工作项

  • API 更改以移除新微版本中的安全组信息

  • info_cache 中缓存安全组名称

  • 单元测试和功能测试

  • python-novaclient 和 osc 更改
    • 添加新的微版本

依赖项

测试

添加 API 功能示例和单元测试,以验证是否正确返回安全组。

文档影响

添加文档,并解释新的微版本,以及服务器详情在查询时可能返回过时数据。

参考资料

关于需要新 API 微版本的 IRC 讨论:https://etherpad.opendev.org/p/nova-xena-ptg

历史