接触网络虚拟化纯属偶然。作为研究院微博五毛小分队的成员,撰出一条微博是每天的任务。那天无意中抓取了一条新闻:Xsigo公司推出了业界第一个数据中心网络全虚拟化解决方案。巧的是Xsigo公司的方案是基于Infiniband技术的,而我最近的项目使我对Infiniband略懂,所以就重点关注了一下。这一关注不要紧,才发现里面水很深。不管是传统IT豪强还是网络巨人都对这一领域虎视眈眈,谋篇定局,更有无数的创业者们在此展开深耕。 抱着对技术要略懂的心态,我入水一探究竟。这篇博文算是对我这次涉水的总结,网络虚拟化发展到现在牵涉的技术非常多,每种技术都可以单独写一篇文章来介绍,限于我的精力和知识水平只能给大家做个整体的简单介绍,不足之处还请各位批评指正。如果读者对某种技术感兴趣可以搜索相关资料做更详细的了解。
什么是网络虚拟化
首先我们需要明确一个问题,什么是网络虚拟化,网络虚拟化简单来讲是指把逻辑网络从底层的物理网络分离开来。这个概念产生的比较久了,VLAN,VPN, VPLS等 都可以归为网络虚拟化的技术。近年来,云计算的浪潮席卷IT界。几乎所有的IT基础构架都在朝着云的方向发展。在云计算的发展中,虚拟化技术一直是重要的推动因素。作为基础构架,服务器和存储的虚拟化已经发展的有声有色,而同作为基础构架的网络却还是一直沿用老的套路。在这种环境下,网络确实期待一次变革,使之更加符合云计算和互联网发展的需求。云计算的大环境下,网络虚拟化的定义没有变,但是其包含的内容却大大增加了。
云计算环境下的网络虚拟化需要解决端到端的问题,笔者将其归纳为三个部分:
(一)第一部分是服务器内部。随着越来越多的服务器被虚拟化,网络已经延伸到Hypervisor内部,网络通信的端已经从以前的服务器变成了运行在服务器中的虚拟机,数据包从虚拟机的虚拟网卡流出,通过Hypervisor内部的虚拟交换机,在经过服务器的物理网卡流出到上联交换机。在整个过程中,虚拟交换机,网卡的I/O问题以及虚拟机的网络接入都是研究的重点。
(二)第二部分是服务器到网络的连接。10Gb以太网 和Infiniband等技术的发展使一根连接线上承载的带宽越来越高。为了简化,通过一种连接技术聚合互联网络和存储网络成为了一个趋势。
(三)第三部分是网络交换,需要将物理网络和逻辑网络有效的分离,满足云计算多租户,按需服务的特性,同时具有高度的扩展性。
下面我就围绕这三个方面来讲述网络虚拟化中的一些主要技术和标准。
服务器内部
I/O虚拟化
多个虚拟机共享服务器中的物理网卡,需要一种机制既能保证I/O的效率,又要保证多个虚拟机对用物理网卡共享使用。I/O虚拟化的出现就是为了解决这类问题。I/O虚拟化包括了从CPU到设备的一揽子解决方案。
从CPU的角度看,要解决虚拟机访问物理网卡等I/O设备的性能问题,能做的就是直接支持虚拟机内存到物理网卡的DMA操作。Intel的 VT-d技术及 AMD 的IOMMU技术通过DMARemapping 机制来解决这个问题。DMARemapping机制主要解决了两个问题,一方面为每个VM创建了一个DMA保护域并实现了安全的隔离,另一方面提供一种机制是将虚拟机的GuestPhysical Address翻译为物理机的HostPhysical Address。
从虚拟机对网卡等设备访问角度看,传统虚拟化的方案是虚拟机通过Hypervisor来共享的访问一个物理网卡,Hypervisor需要处理多虚拟机对设备的并发访问和隔离等。这样Hypervisor容易行成一个性能瓶颈。为了提高性能,一种 做法是虚拟机绕过Hypervisor直接操作物理网卡,这种做法通常称作PCIpass through,VMware,Xen和KVM都支持这种技术。但这种做法的问题是虚拟机通常需要独占一个PCI插槽,不是一个完整的解决方案,成本较高且扩展性不足。 另一种做法是设备如网卡直接对上层操作系统或Hypervisor提供虚拟化的功能,一个以太网卡可以对上层软件提供多个独立的虚拟的PCIe设备并提供虚拟通道来实现并发的访问。这种方法也是业界主流的做法和发展方向,目前已经形成了标准,主要包括SR-IOV(SingleRoot IO Virtualization)和MR-IOV(Multi-RootIO Virtualization)。这方面的技术在网上已有很好的文章来做介绍,推荐想进一步了解的同学读一读:http://t.cn/aK72XS
虚拟接入
在传统的服务器虚拟化方案中,从虚拟机的虚拟网卡发出的数据包在经过服务器的物理网卡传送到外部网络的上联交换机后,虚拟机的标识信息被屏蔽掉了,上联交换机只能感知从某个服务器的物理网卡流出的所有流量而无法感知服务器内某个虚拟机的流量,这样就不能从传统网络设备层面来保证QoS和安全隔离。虚拟接入要解决的问题是要把虚拟机的网络流量纳入传统网络交换设备的管理之中,需要对虚拟机的流量做标识。在解决虚拟接入的问题时,思科和惠普分别提出了自己的解决方案。思科的是VN-Tag, 惠普的方案是VEPA(VirtualEthernet Port Aggregator)。为了制定下一代网络接入的话语权,思科和惠普这两个巨头在各自的方案上都毫不让步,纷纷将自己的方案提交为标准,分别为 802.1Qbh和802.1Qbg。关于虚拟接入也有一篇很好的文章来介绍,想深入了解的可以看看:http://t.cn/hGWnOQ
网络连接
网络连接技术一直都在追求更高的带宽中发展。比如Infiniband和10Gb以太网。在传统的企业级数据中心IT构架中,服务器到存储网络和互联网络的连接是异构和分开的。存储网络用光纤,互联网用以太网线(ISCSI虽然能够在IP层上跑SCSI,但是性能与光纤比还是差的很远)。数据中心连接技术的发展趋势是用一种连接线将数据中心存储网络和互联网络聚合起来,使服务器可以灵活的配置网络端口,简化IT部署。以太网上的FCOE技术和 Infiniband技术本身都使这种趋势成为可能。
Infiniband
Infiniband 技术产生于上个世纪末,是由Compaq、惠普、IBM、戴尔、英特尔、微软和Sun七家公司共同研究发展的高速先进的I/O标准。最初的命名为 SystemI/O,1999年10月,正式改名为InfiniBand。InfiniBand是一种长缆线的连接方式,具有高速、低延迟的传输特性。基于InfiniBand技术的网卡的单端口带宽可达20Gbps,最初主要用在高性能计算系统中,近年来随着设备成本的下降,Infiniband也逐渐被用到企业数据中心。为了发挥Infiniband设备的性能,需要一整套的软件栈来驱动和使用,这其中最著名的就是OFED(OpenFabrics Enterprise Distribution) ,它基于Infiniband设备实现了RDMA(remote direct memoryaccess). RDMA的最主要的特点就是零拷贝和旁路操作系统,数据直接在设备和应用程序内存之间传递,这种传递不需要CPU的干预和上下文切换。OFED还实现了一系列的其它软件栈:IPoIB(IP over Infiniband), SRP(SCSI RDMA Protocol)等,这就为Infiniband聚合存储网络和互联网络提供了基础。OFED由OpenFabrics联盟负责开发。 OpenFabrics最初叫做OpenIB,从2006年开始OpenIB在Infiniband之外也开始支持以太网,业务做的大了名字也从 OpenIB改为OpenFabrics。OFED现已经被主流的Linux发行版本支持,并被整合到微软的windowsserver中。
图1 OFED 软件栈