用最精炼语言介绍OpenStack网络代码演进的前世今生
原文见:http://www.openstack.cn/p353.html
作者:Joshua
在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的童鞋们提供了大显身手的好机会:)
用最精炼语言介绍OpenStack网络代码演进的前世今生相关推荐
- IT人的5G网络架构视点:从网络架构演进的前世今生详解5G各NF网络功能体
一.引言 以前从来没关注电信无线上网网络的具体架构(也即PS域架构),现在开始学5G接触这些东西时,理解起来很痛苦,资料也少,于是一方面到处找人咨询,一方面到处查资料,最后发现应该从3G.4G时代的架 ...
- GO语言实现P2P网络-服务端代码实现
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第7天,点击查看活动详情 GO语言实现P2P网络 P2P是区块链节点通信的基础协议,使用起来比TCP协议要麻烦一些.因为通信的两个节 ...
- OpenStack网络介绍
OpenStack网络介绍 OpenStack里面的网络相对复杂.经常有人对几个网络概念搞混淆.因此,本文对OpenStack里面的Provider network 和 Tenant netw ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- 《OpenStack实战》——第1章 介绍OpenStack 1.1OpenStack是什么
本节书摘来自异步社区<OpenStack实战>一书中的第1章,第1.1节,作者: [美]V. K. Cody Bumgardner(V. K. 科迪•布姆加德纳)著,更多章节内容可以访问云 ...
- python语言简介-Python语言介绍
原标题:Python语言介绍 Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其 ...
- 【转载】用平常语言介绍神经网络
http://wenku.baidu.com/link?url=23jM13V3Qe9Zx84FuEMebOMbTSk4i0Oaa5YPAVL1dfbSFC4G20GYDkUbbRvcJILgTGli ...
- [转载] python中pass的使用_Python pass详细介绍及实例代码
参考链接: Python pass语句 Python pass详细介绍及实例代码 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++ ...
- 前后端及常用语言介绍
前后端及常用语言介绍 珞闻 来自: 珞闻(知行.) 2015-04-19 23:25:13 前后端的划分,可以简单地理解为凡是运行在用户设备上的技术都可以称为前端技术( 比如 HTML / CSS / ...
最新文章
- 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...
- Dialog、Toast、Snackbar,你真的了解它们吗?
- HyperLogLog 算法的原理讲解以及 Redis 是如何应用它的
- C# 关闭正在执行的文件
- 设置Collection 或 Map 只读
- boost::phoenix::val相关的测试程序
- (转载)7个去伪存真的JavaScript面试题
- HTTP 应用层过滤的兼容性问题及解决方案
- 豆瓣电影 Top 250
- 安卓手机端、PC电脑端的微信文件存储位置:
- 原创 | 最近程序员频繁被抓,如何避免面向监狱编程?!
- autoCAD2014安装激活
- Java IO流中偏移量是什么意思
- 开发测试环境 k8s node节点磁盘不足运维
- 打印机显示检查打印服务器,win10系统打开打印机提示再次检查打印机的名称怎么办...
- WEB前端之html img标签引用本地图片
- 2021高考成绩等位线查询四川,泸州医学院的麻醉专业收分请问下四川考生一 – 手机爱问...
- 【GitHub学生包优惠申请】学生党“白嫖”GitHub攻略2022年6月
- 医疗时鲜资讯:第二十三届中国国际医用仪器设备展览会暨技术交流会 有感
- 网易2019年Q3财报净利47.26亿元 从财报看网易的长期主义