以下是本次分享的内容整理。
大家好,我是 QingCloud 的工程师陈海泉,今天给大家分享一些 SDN/NFV 2.0 架构的网络技术。我解释一下什么是 SDN,SDN 就是软件定义网络。当然也不是所有网络定制一定要软件来实现,因为有很多硬件方案也可以做到 SDN 的效果。
青云QingCloud 用软件定义来实现虚拟网络,我们 2013 年的时候,在公有云上线了第一代产品。当时 SDN 还是一个比较新鲜的事情,用户用的还比较少。到了今天,SDN已经开始普及,连私有云用户也在使用基于SDN的VPC。
随着用户量越来越大,第一版的 SDN 提供的私有网络里面的 VM 超过一定的数量的时候,我们发现性能就有一个比较大的损失,已经无法满足企业用户的需求。所以我们在去年下半年的时候,花了很大功夫去做 SDN/NFV 2.0 的事情。
[attach]815[/attach]
考虑到很多人对计算机网络不熟悉,我先补充下网络基本原理:计算机网络分 7 层。 SDN 相关的主要是二层和三层网络。二层是数据链路层,使用 MAC 为地址通信,二层网络中的成员通过交换机连接起来。成员间的应用软件虽然以 IP 为地址通信,但是通信之前,操作系统会通过 ARP 协议,把目标 IP 转换成 MAC 地址,然后再发送数据包。交换机根据数据包的目标 MAC 地址,进行数据包的投递。二层网络中,会用到单播,广播和组播三种方式。
三层是网络层,使用 IP 为地址通信。三层网络就是用路由器将不同的二层网络连接在一起,形成一个可扩展的网络。通信方式可以是单播和组播,但不能是广播。路由器的作用就是根据路由表,找出目标 IP 对应的 MAC 地址。数据包往往通过多个路由器之间转发,才会送到目标地址。
基本知识介绍到这里,现在说一下为什么需要 SDN 。
首先,虚拟化技术带来的好处是用户的 VM 分布在物理机集群上面,出于负载均衡,和服务高可用的目的,需要在物理机之间迁移 VM ,并且迁移之后 IP 地址不变。
在早期的虚拟化方案中,物理机集群比较小,全部是一个二层网络, VM 使用物理设备分配的 IP 地址时,发生迁移之后, IP 本身就不会变化。但是随着云计算的发展,虚拟化的物理集群需要被部署在更大的三层网络上,这时候 VM 再使用物理 IP 地址,是不能够保证 IP 不变的,因为迁移到了别的二层网络,对应的路由器就不认识原来的地址了, VM 要继续工作,必须更换成当前网络的 IP 地址。
这个时候,就需要网络虚拟化技术,也就是通过 SDN 给 VM 定义虚拟的 IP 段,这个虚拟的网络可以分散在整个三层网络上,使得 VM 迁移后, IP 地址不变。这个IP地址跟物理的路由器,交换机没什么关系,可以随便定义。随着云计算的发展,单靠网络虚拟化技术,仍然满足不了用户大规模部署的需求,这时就需要有 VPC 。
VPC 是什么意思呢? VPC 是用户定义的一个专属的大型三层网络。在 VPC 网络内,用户可以自定义 IP 地址范围、创建子网,并在子网内创建主机/数据库/大数据等各种云资源。
简单的说,虚拟网络指的是虚拟二层网络, VPC 指的是虚拟三层网络。在 VPC 里面,还需要能做到不同 VPC 之间, IP 地址复用。因为私有 IP 段有限制,不同的用户,可以使用相同的 IP 地址,却不互相影响。
正是因为云计算需要虚拟网络,也需要 VPC 。所以需要一个 SDN 方案解决这两个需求,现有的 SDN 方案主要分成两个方向:
用软件来定义,但是用硬件来实现。比如某些带 SDN 功能的交换机,把它采购进来,部署到产品里,用硬件厂商提供的 API ,就能定义虚拟网络,实现 VPC 功能。
NFV,就是网络功能虚拟化,用软件的方式来实现虚拟的交换机和路由器,把他们组织,并管理起来,让上层应用能够定义虚拟网络。其代表有 VMware NSX 、 JuniperOpenContrail、OpenStackDVR 等等。
[attach]816[/attach]
QingCloud 在 SDN 方案的选型上也做过讨论,用软件还是用硬件方案?其中考虑的问题主要是以下三个方面:
成本。在公有云上面大家拼的是成本,谁的硬件成本低,谁就能把价格降到最低。如果我们采用硬件方案,在网络设备上面需要增加了很多投资,要替换掉几乎所有的网络设备。
设备依赖。我们的私有云卖的是软件,客户可以按照偏好选择自己的硬件,假如 QingCloud 的 SDN 绑定了某款硬件产品,那我们在面对企业客户的时候,可能连招标的机会都没有,因为客户往往有自己的采购渠道,指定的硬件品牌。
情怀。对于工程师来说,自然是想把产品做得更优秀。参考下优秀的传统行业,就能明白这一点。 其实,计算机网络跟传统快递行业非常的接近,我在后面解释网络知识时,也会拿快递打比方。
如上图所示,我们解释一下为什么需要 DVR 。左边是这张是物理拓扑图,物理世界中 A 和 B 通信,需要把信息发送到 A 的交换机,然后到路由器,然后路由器转给 B 的交换机,B 的交换机再发送给 B ,A 和 B 通常需要 4 跳才能发一个数据包。
我们 1.0 的时候,也是用 NFV 实现的 SDN ,我们会模仿物理世界,发明出虚拟的路由器和交换机提供给用户。请看中间这张图,如果 A、B、C、D、E 这五个设备分别位于五个不同的物理机上,在逻辑上,A-> B 的包经过 C、E、D 才能到 B ,逻辑上是 4 跳。但是虚拟设备每一跳都要通过物理机去转发,而物理机之间发包都需要 4 跳,这样总得转发量实际上需要 16 跳。
这也就是为什么我们 SDN 1.0 的性能总是上不去。随着规模增加,逻辑上每增加 1 跳,物理上就增加 4 跳,性能随规模衰减得厉害。
为了解决这个问题,我们引入了 DVR 。请看右边这张图, A 和 B 的物理机都有 DVR ,从 A 到 B 只在两个 DVR 之间直接交换一下数据就可以了,这样在逻辑上只有一跳。所以物理层面上跟左边的图一样, 4 跳完成一个数据包的转换,这样就可以非常接近物理机的性能,在大规模部署时,保持高性能。
使用 DVR 的另外一个原因,就是虚拟网络设备性能弱于物理设备,在物理设备部署拓扑上,经常有汇聚节点,成为网络瓶颈。由于物理设备能力很强,很容易就能达到 40 G ,或更高带宽,汇聚几次没什么关系;而虚拟设备作为汇聚节点时,往往就限制了它管理的网络整体能力,因为虚拟汇聚设备会成为性能瓶颈。使用 DVR 同时意味着不再有汇聚节点,因为所有成员都是点对点直接通信。
这个在物理设备上无法实现,因为不可能把所有设备连成一个大网,而虚拟网络设备上,是可以实现的,因为他们相连,只是加几条转发规则而已,而不是真的需要去点对点地连接网线。
有了上面三个功能,就是通常意义上的 SDN 了。然而我们在做云计算平台时,通过长时间的积累,还发现了很多需求:
[attach]820[/attach]
VPC,并且 VPC 主机直接绑定公网 IP 。
负载均衡器。可在公网网关上对入流量进行分流,转发到多个负载均衡器节点。
VM 使用基础网络时,也就是物理网络的 IP 地址在迁移后不变。
VPC 和物理网络高效连接。 下面分别解释。