[转]Neutron演进
在OpenStack世界中,网络组件最初叫nova-network,它混迹于计算节点nova的代码库中。nova-network可以单独部 署在一台机器上,为了高性能HA也可以和nova-compute一样部署在计算节点上(这也就是所谓的multi-host功能)。nova- network实现简单,bug少,但性能可不弱哦,直接采用基于Linux内核的Linux网桥少了很多层抽象应该算强大的。不足之处是支持的插件少 (只支持Linux网桥),支持的网络拓扑少(只支持flat, vlan)。
为了支持更多的插件,支持更多的网络拓扑,更灵活的与nova交互,于是有了quantum工程。quantum插件不仅支持Linux网桥,也支 持OpenvSwitch,一些SDN的插件以及其他商业公司的插件。在网络拓扑上,除了支持flat,vlan外,还支持gre, vxlan。但quantum不支持关键的multi-host特性。
quantum因为和一家公司的名称冲突,于是,改名为neutron。
neutron继续演进,quantum之前的实现存在这么一个问题。我们说道说道。在quantum中,实现一种类型的插件一般包括两个部分,一
部分与数据库db打交道称之为plugin,一部分是调用具体的网络设备真正干活的称之为agent。像plugin就有linux bridge
plugin, opevswitch plugin, hyper-v
plugin等,这些plugin因为都是与db打交道,变化的字段并不多,所以代码绝大部分是重复的。这样也就出来了一个公共的plugin叫ml2
plugin(具体的代码实现就是TypeDriver)。
但这只是一个表象,ml2还有更大的作用,那就是它里面的MechanismDriver。我举个例子讲,之前没有ml2的时候,plugin只能
支持一种,用了linux
bridge,就不能用openvswitch了,想要都用那怎么办,那就需要MechanismDriver上场,MechanismDriver的作
用是将agent的类型agent_type和vif_type关联,这样vif_type就可以直接通过扩展api灵活设置了,所以这时候你想用
linux bridge你在vif_type里直接将port绑定成linux
bridge就行了,同理,想用openvswitch就将vif_type将port绑定成openvswitch就行。
除了让openvswitch, linux bridge这些不同的插件共存之外,ml2还能让不同的拓扑如flat, vlan, gre,
vxlan其乐融融和谐共存,直接在ml2_conf.ini这个配置文件里都配上即可。这样也就解决了一个问题,以前前端horizon中无法配置是用
flat还是vlan,因为你配了也没有用,那时候后端还不支持flat和vlan同时存在了,现在皆大欢喜了。
上面的ml2解决的只是网络中L2层的问题,对于L3层的路由功能neturon又单独整出个l3-agent,对于dhcp功能又单独整出个
dhcp-agent,不过它们归根结底仍属于实际真正干功能活的,对于和数据库db打交道的那部分则是通过提供扩展api来实现的。那么现在我们想加更
多的网络服务该怎么办呢,如L4-L7层的FwaaS, VPNaaS, DNATaaS,
DNSaaS,所以现在neutron又出来一个新的服务框架用于将所有这些除L2层以外的网络服务类似于上述ml2的思想在数据库这块一网打尽。并且这
些网络服务可能是有序的,例如可能需要先过FwaaS防火墙服务再过DNATaaS服务来提供浮动IP,所以也就有了service
chain的概念。目前这块代码只进去了firewall, loadbalance, metering,
vpn几块,但万变不离其宗,未来neutron就是朝这个思想继续往下做。想用哪些服务可以通过neutron.conf这个配置文件中的
service_provider项指定。
最后,需要一提的是,从性能角度讲,我认为目前neutron仍然不能用于大规模的生产环境,理由如下:
1)虽然增加了更多的插件,更多的网络服务,更多的网络拓扑,但它仍然不支持multi-host功能,对性能是极大影响
2)neutron-server不支持workers通过fork实现的利用cpu多核的多进程机制,仍然是单线程实现的,阻塞的话(python解释器是单进程的,使用greenlet保证每个线程在单进程下也是线性的),会延缓接受其他请求对性能产生影响。
3)neutron-server是无状态的服务,理论上讲是可以在多台机器上运行前端再加haproxy实现HA的,但实际代码中存在众多竞争条件的bug。当然这个问题不仅在neturon有,其他组件我看一样存在。
4)在遂道性能方面存在优化的可能,遂道如GRE,VXLAN等将虚拟L2层打通反而扩大了广播风暴的可能,实际上虚拟网桥或者hypervisor都是知道虚机的IP和MAC地址的映射的关系的,根本不需要仍使用传统的ARP广播方式来获得这种映射关系。
5)其他…
成熟的路上漫漫其修远兮,这也正好给各位爱好openstack的童鞋们提供了大显身手的好机会:)
文章来源:http://www.openstack.cn/p353.html
[转]Neutron演进的更多相关文章
- [译] OpenStack Kilo 版本中 Neutron 的新变化
OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...
- VMware + OpenStack: 从 Plugin 到 VIO (VMware Integrated OpenStack)的演进
VMware 做为实际上的企业虚拟化领导者,对 OpenStack 的态度一直在变化.一开始,VMware 表达出与 OpenStack 的竞争态度.随着 OpenStack 的逐步壮大并且一步一步进 ...
- (转)OpenStack Kilo 版本中 Neutron 的新变化
OpenStack Kilo 版本,OpenStack 这个开源项目的第11个版本,已经于2015年4月正式发布了.现在是个合适的时间来看看这个版本中Neutron到底发生了哪些变化了,以及引入了哪些 ...
- 数据中心网络架构的问题与演进 — NFV
目录 文章目录 目录 前文列表 前言 NFV NFV 的最终目标 NFV 的抽象框架 基础架构层与虚拟基础设施管理层 资源管理与业务流程编排层 OSS 层 SDN 控制层 NFV 的生态合作 NFV ...
- 我非要捅穿这 Neutron(一)网络实现模型篇
目录 文章目录 目录 前言 传统网络到虚拟化网络的演进 单一平面网络到混合平面网络的演进 Neutron 简述 Neutron 的网络实现模型 计算节点网络实现模型 内外 VID 转换 网络节点网络实 ...
- 【腾讯Bugly干货分享】微信热补丁Tinker的实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e Dev Club 是一个交流移动 ...
- 【腾讯bugly干货分享】微信Android热补丁实践演进之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=1264& ...
- Atitit 软件架构方法的进化与演进cs bs soa roa msa attilax总结
Atitit 软件架构方法的进化与演进cs bs soa roa msa attilax总结 1.1. 软件体系架构是沿着单机到 CS 架构,再到 BS 的三层架构甚至多层架构逐步发展过来的,关于 ...
- Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP
Atitit 编程语言编程方法的进化演进 sp COP ,AOP ,SOP 1.1. Sp oop>>COP ,AOP ,SOP1 1.2. Sp oop 结构化方法SP(Stru ...
随机推荐
- 代码管理工具TortoiseSVN
. TortoiseSVN TortoiseSVN与Windows Explorer集成可称为是一款功能齐全的SVN客户端,允许你管理SVN项目.其自身就包含客户端无需再安装额外的SVN客户端.它还提 ...
- ZPPR032-批量展BOM
*-----------------------------------------------------------------------REPORT zppr032 NO STANDARD P ...
- 209. Minimum Size Subarray Sum
Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...
- SQL根据现有表新建一张表
SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...
- (单选后,显示相对应的div)点击免费没有变化,点击收费出现输入框
<li> <label class="feiyonglabel">活动费用</label> <div class="textbo ...
- c#部分--- 一维数组放到集合中,在从集合中提取输出
输入班级人数,统计人名,性别,年龄: 建立一维数组,并放到集合中: //Console.Write("请输入班级人数:"); //int a = int.Parse(Console ...
- 创建kafkatopic和productor
cd 到kafka 目录下 创建topic create topicbin/kafka-topics.sh --zookeeper spark1:2181,spark2:2181,spark3:218 ...
- php MySQL数据库操作类源代码
php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...
- cron 配置计划任务的书写格式(quartz 时间配置)
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 1.秒(0~59) 2.分钟(0~59) 3.小时(0~23) 4.天(月)(0~31,但是你需要考虑你月的天数) 5 ...
- Win10 EPLAN新建项目出现“一个内部错误的解决方法”
[环境] Win10 64bits,EPLAN 2.4 64bits. [表现] 新建项目的时候出现"一个内部错误"的提示,然后软件卡死. [解决方案] 计算机管理--服务--EP ...