首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenStack Nova 按IP地址过滤虚拟机性能提升

对于云管理员来说,通过IP地址对虚拟机进行过滤在定位网络流量异常的虚拟机时十分有用。

OpenStack Nova就提供了这样的能力。但是由于数据模型的局限,目前通过IP地址对虚拟机进行过滤的性能较差,

本文就针对这个问题进行相应的分析、改进以及测试。

现状

  OpenStack Nova 提供了在获得虚拟机列表时按照IP地址进行过滤的功能,但是由于在Nova中,虚拟机的网络信息是存储在表中,且具体的IP地址等信息是打包在JSON体中的。因此当前通过IP的实现方案需要首先获得环境内所有的虚拟机obj,再依次反序列化JSON体,获得IP地址信息,再通过字符串比对的方式找到满足要求的虚拟机。

而由于这个限制所期望的结果是因此这个参数在此是无效的(就算指定了也需要首先获取所有的虚拟机obj,在找到能够满足条件的虚拟机后)

再返回其中的个。详见代码实现

解决方案

  这个问题在Nova中是一个老生常谈的话题了,出于种种原因一直没有解决。通过在Denver PTG上提出并讨论后,最终基本确定通过访问Neutron,按照IP地址过滤,再获得信息后,再通过其获得响应的虚拟机再在Nova中通过来对虚拟机进行过滤

  这个方案唯一的问题是目前Nova是支持以的方式来匹配IP地址的,也就是输入会匹配所有的虚拟机。而Neutron当前是只支持在过滤时对IP地址进行严格匹配的。在这个问题的实现具体实现细节上又通过Mail List讨论后最终敲定。

  简而言之,最终敲定的实现方案是:

Neutron侧增加pattern的IP地址过滤;为了保持前向兼容性,通过新增的filter来指定。

Neutron侧增加新的extension;由于Neutron没有采用Microversion机制,Nova需要检查Neutron侧是否支持来决定是否使用新方式过滤虚拟机。

Nova侧调用Neutron获取指定IP地址所对应的Port,获取求中的并作为来过滤虚拟机。

  对具体实现方案感兴趣的请移步:

Nova Spec

Nova Patch

Neutron Spec

Neutron Patch

Neutron-lib Patch

测试

  通过脚本在Nova数据库中插入2000条包含IP地址的虚拟机记录,同时在Neutron数据库中插入相应的2000个Port记录。

  未修改前,从2000台虚拟机中过滤一个IP:

  可以看到,从请求到收到响应总共耗时约4000ms。

  修改后,同样的请求:

  可以看到,响应时间大幅下降到400ms左右,提升明显。

  修改后即便是以的方式匹配大量虚拟机,响应时间上升的也并不过分,完全可以接受:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180413G1B4UZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券