热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络虚拟化简介

云计算就是计算虚拟化,而存储虚拟化已经在SAN上实现得很好了,那么为什么还要网络虚拟化呢?云计算多虚一时,所有的服务资源都成为了一个对外的虚拟资源,那么网络不管是从路径提供还是管理维护的角

      云计算就是计算虚拟化,而存储虚拟化已经在SAN上实现得很好了,那么为什么还要网络虚拟化呢?云计算多虚一时,所有的服务资源都成为了一个对外的虚拟资源,那么网络不管是从路径提供还是管理维护的角度来说,都得跟着把一些机框盒进行多虚一统一规划。而云计算一虚多的时候,物理服务器都变成了VM。


网络多虚一技术

      网络多虚一技术:最早的网络多虚一技术代表是交换机集群Cluster技术,多以盒式小交换机为主,较为古老,当前数据中心里面已经很少见了。而新的技术则主要分为两个方向,控制平面虚拟化与数据平面虚拟化。


控制平面虚拟化

      顾名思义,控制平面虚拟化将所有设备的控制平面合而为一,只由一个主体去处理整个虚拟交换机的协议处理,表项同步等工作。从结构上来说,控制平面虚拟化又可以分为纵向与横向虚拟化两种方向。

      纵向虚拟化指不同层次设备之间通过虚拟化合多为一,代表技术就是Cisco的Fabric Extender,相当于将下游交换机设备作为上游设备的接口扩展而存在,虚拟化后的交换机控制平面和转发平面都在上游设备上,下游设备只有一些简单的同步处理特性,报文转发也都需要上送到上游设备进行。可以理解为集中式转发的虚拟交换机。

      横向虚拟化多是将同一层次上的同类型交换机设备虚拟合一, Cisco的VSS/vPC和H3C的IRF都是比较成熟的技术代表,控制平面工作如纵向一般,都由一个主体去完成,但转发平面上所有的机框和盒子都可以对流量进行本地转发和处理,是典型分布式转发结构的虚拟交换机。Juniper的QFabric也属于此列,区别是单独弄了个Director盒子只作为控制平面存在,而所有的Node QFX3500交换机同样都有自己的转发平面可以处理报文进行本地转发。

      控制平面虚拟化从一定意义上来说是真正的虚拟交换机,能够同时解决统一管理与接口扩展的需求。但是有一个很严重的问题制约了其技术的发展。在前面的云计算多虚一的时候也提到过,服务器多虚一技术目前无法做到所有资源的灵活虚拟调配,而只能基于主机级别,当多机运行时,协调者的角色(等同于框式交换机的主控板控制平面)对同一应用来说,只能主备,无法做到负载均衡。网络设备虚拟化也同样如此,以框式设备举例,不管以后能够支持多少台设备虚拟合一,只要不能解决上述问题,从控制平面处理整个虚拟交换机运行的物理控制节点主控板都只能有一块为主,其他都是备份角色(类似于服务器多虚一中的HA Cluster结构)。总而言之,虚拟交换机支持的物理节点规模永远会受限于此控制节点的处理能力。这也是Cisco在6500系列交换机的VSS技术在更新换代到Nexus7000后被砍掉,只基于链路聚合做了个vPC的主要原因。三层IP网络多路径已经有等价路由可以用了,二层Ethernet网络的多路径技术在TRILL/SPB实用之前只有一个链路聚合,所以只做个vPC就足矣了。另外从Cisco的FEX技术只应用于数据中心接入层的产品设计,也能看出其对这种控制平面虚拟化后带来的规模限制以及技术应用位置是非常清晰的。


数据平面虚拟化

      前面说了控制平面虚拟化带来的规模限制问题,而且短时间内也没有办法解决,那么就想个法子躲过去。能不能只做数据平面的虚拟化呢,于是有了TRILL和SPB。关于两个协议的具体细节下文会进行展开,这里先简单说一下,它们都是用L2 ISIS作为控制协议在所有设备上进行拓扑路径计算,转发的时候会对原始报文进行外层封装,以不同的目的Tag在TRILL/SPB区域内部进行转发。对外界来说,可以认为TRILL/SPB区域网络就是一个大的虚拟交换机,Ethernet报文从入口进去后,完整的从出口吐出来,内部的转发过程对外是不可见且无意义的。

      这种数据平面虚拟化多合一已经是广泛意义上的多虚一了,相信看了下文技术理解一节会对此种技术思路有更深入的了解。此方式在二层Ethernet转发时可以有效的扩展规模范围,作为网络节点的N虚一来说,控制平面虚拟化目前N还在个位到十位数上晃悠,数据平面虚拟化的N已经可以轻松达到百位的范畴。但其缺点也很明显,引入了控制协议报文处理,增加了网络的复杂度,同时由于转发时对数据报文多了外层头的封包解包动作,降低了Ethernet的转发效率。

      从数据中心当前发展来看,规模扩充是首位的,带宽增长也是不可动摇的,因此在网络多虚一方面,控制平面多虚一的各种技术除非能够突破控制层多机协调工作的技术枷锁,否则只有在中小型数据中心里面刨食的份儿了,后期真正的大型云计算数据中心势必是属于TRILL/SPB此类数据平面多虚一技术的天地。当然Cisco的FEX这类定位于接入层以下的技术还是可以与部署在接入到核心层的TRILL/SPB相结合,拥有一定的生存空间。估计Cisco的云计算数据中心内部网络技术野望如下图所示:(Fabric Path是Cisco对其TRILL扩展后技术的最新称呼)

     


网络一虚多技术

      网络一虚多,这个可是根源久远,从Ethernet的VLAN到IP的VPN都是大家耳熟能详的成熟技术,FC里面也有对应的VSAN技术。此类技术特点就是给转发报文里面多插入一个Tag,供不同设备统一进行识别,然后对报文进行分类转发。代表如只能手工配置的VLAN ID和可以自协商的MPLS Label。传统技术都是基于转发层面的,虽然在管理上也可以根据VPN进行区分,但是CPU/转发芯片/内存这些基础部件都是只能共享的。目前最新的一虚多技术就是Cisco在X86架构的Nexus7000上实现的VDC,和VM一样可以建立多个VDC并将物理资源独立分配,目前的实现是最多可建立4个VDC,其中还有一个是做管理的,推测有可能是通过前面讲到过的OS-Level虚拟化实现的。

      从现有阶段来看,VDC应该是Cisco推出的一项实验性技术,因为目前看不到大规模应用的场景需求。首先转发层面的流量隔离(VLAN/VPN等)已经做得很好了,没有必要搞个VDC专门做业务隔离,况且从当前VDC的实现数量(4个)上也肯定不是打算向这个方向使劲。如果不搞隔离的话,一机多用也没有看出什么实用性,虚拟成多个数据中心核心设备后,一个物理节点故障导致多个逻辑节点歇菜,整体网络可靠性明显降低。另外服务器建VM是为了把物理服务器空余的计算能力都用上,而在云计算数据中心里面网络设备的接口数应该始终是供不应求的,哪里有多少富裕的还给你搞什么虚拟化呢。作者个人对类似VDC技术在云计算数据中心里面的发展前景是存疑的。


SR-IOV

      对网络一虚多这里还有个东西要补充一下,就是服务器网卡的IO虚拟化技术。单根虚拟化SR-IOV是由PCI SIG Work Group提出的标准,Intel已经在多款网卡上提供了对此技术的支持,Cisco也推出了支持IO虚拟化的网卡硬件Palo。Palo网卡同时能够封装VN-Tag(VN的意思都是Virtual Network),用于支撑其FEX+VN-Link技术体系。现阶段Cisco还是以UCS系列刀片服务器集成网卡为主,后续计划向盒式服务器网卡推进,但估计会受到传统服务器和网卡厂商们的联手狙击。

      SR-IOV就是要在物理网卡上建立多个虚拟IO通道,并使其能够直接一一对应到多个VM的虚拟网卡上,用以提高虚拟服务器的转发效率。具体说是对进入服务器的报文,通过网卡的硬件查表取代服务器中间Hypervisor层的VSwitch软件查表进行转发。另外SR-IOV物理网卡理论上加块转发芯片,应该可以支持VM本地交换(其实就是个小交换机啦),但个人目前还没有看到实际产品。SR(Single Root)里面的Root是指服务器中间的Hypervisor,单根就是说目前一块硬件网卡只能支持一个Hypervisor。有单根就有多根,多根指可以支持多个Hypervisor,但貌似目前单物理服务器里面跑多个Hypervisor还很遥远,所以多根IO虚拟化MR-IOV也是个未来未来时。摘录Cisco胶片对MR-IOV描述如下:(HW为Hardware,PF为Physical Function,VF为Virtual Functions)

     

      SR-IOV只定义了物理网卡到VM之间的联系,而对外层网络设备来说,如果想识别具体的VM上面的虚拟网卡vNIC,则还要定义一个Tag在物理网卡到接入层交换机之间区分不同vNIC。此时物理网卡提供的就是一个通道作用,可以帮助交换机将虚拟网络接口延伸至服务器内部对应到每个vNIC。Cisco UCS服务器中的VIC(Virtual Interface Card)M81-KR网卡(Palo),就是通过封装VN-Tag使接入交换机(UCS6100)识别vNIC的对应虚拟网络接口。

      网络虚拟化技术在下一个十年中必定会成为网络技术发展的重中之重,谁能占领制高点谁就能引领数据中心网络的前进。从现在能看到的技术信息分析,Cisco在下个十年中的地位仍然不可动摇。


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
author-avatar
coco2冰冰
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有