重新处理服务器详情的安全组¶
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/detailsGET /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