作者简介:程成,曾就职于联想研究院、百度等公司,从事云计算网络方面的工作。
*本文含大量主观看法,请以辩证的态度看待,另外本人认知有限,也在不断地学习和接受新知识,保留自省的权利。*
正文开始前,我想简单提下我个人的经历,可能更容易有共感,也更易发现我观点中的偏执之处。一开始,我从事的是路由交换这样的传统网络工作,由于该方向在我个人职业规划上难看到较大发展,转型网络安全,后面随着SDN这个黑盒子的打开,兴趣所在,一头扎进了云计算网络相关的工作。
网络与云计算网络
什么是网络呢?有点难到我了,不知该从何处讲起。网络是埋在地下的光缆,是无处不在的电磁波,也是一个个的路由器、交换机,还是我们玩的微博、抖音。
得,直接搬维基百科吧:
>> *计算机网络*,通常也简称网络,是指容许节点分享资源的数字电信网络。在电脑网络,电脑设备会透过节点之间的连接互相交换数据。用于创建、路由及终止数据传输的电脑网络设备即为网络节点,比如个人电脑、电话、服务器、路由器等。当一个设备能够与另一设备交换信息时,便可视它们俩已连接成网络,而要维持网络的可靠性,便需要有一定的网络管理技能。
本文讨论的网络意指狭义上的二、三层网络,其作用简要说明一下,就是标识、收敛、寻址和控制转发,这里就不展开赘述了。
那什么是云计算网络呢?这里就计算、存储、网络三个最大的方面一块说了吧。
计算:云计算的目标是可以自由调度计算资源,简单说就是可以随时按需提供CPU、GPU。那这些资源哪里来,这就是虚拟化了,使用虚拟化技术将这些分散的CPU等虚拟化为一个资源池,然后按需从里面分割出资源。
存储:同样是把一堆存储设备,比如SSD、HHD通过虚拟化技术向用户按需提供,云计算的作用是调度。这里能看出虚拟化的另一好处便是,更容易进行备份冗余。
网络:当我们提供出计算、存储资源后,这些资源要怎么通信呢?这些虚拟的设备我们不能直接拿网线、交换机、路由器去连啊,这时候就到网络功能虚拟化(NFV)和网络虚拟化上场了,使用虚拟逻辑网元将这些虚拟资源进行连接,再通过网络协议栈或其他手段(如 openflow)实现连通。这时,网络不仅是端到端的互联,还相当于一个云的总线系统。
网络虚拟化与虚拟网络
网络虚拟化我从来都认为其不是一项向前发展的技术,而是定义好的网络标准逐渐向实际网络业务妥协的一个过程。网络提供的是一种“自下而上”的服务:受网络功能的约束,而不是受业务需求的驱动。简单来说,就是当我们在使用网络的过程中,需要某些功能,这些功能原有的网络标准字段无法支持,我们就使用封装或者映射的方式,即再包裹一层或者字段置换来给予支持。
所以,网络虚拟化技术看起来五花八门,说到底其实就两个——封装和映射。封装,最典型的就是各种VPN了,比如IPSec、GRE等,还有目前云计算的基石之一VXLAN;映射,常见的就是NAT、代理一类。
无出其右,虚拟网络又是一次无奈的妥协。由于网络硬件厂商们因种种原因没能支持适配云计算网络的需求,软件研发者们干脆把数据包再包裹一层,在内层天马行空,这就是虚拟网络了,也常称为overlay网络,外层就老老实实扮演好管道的角色,即underlay网络,最明显的代价就是再次封装带来的转发性能损耗。
SDN界的叛徒——openflow
接下来开始进入正题,谈SDN。其是一种思想,是为了实现网络控制平面和数据平面解耦的技术统称。
首先,来看看为什么要实现数控分离。在传统网络中,控制平面功能是分布式的运行在各个网络节点中的,如果想支持一个新的网络功能,就必须将所有网络设备进行升级,这极大地限制了网络创新,更不符合云计算网络中快速变更和迭代的需求。数控分离后,数据平面只需要关注通用的转发,尽可能的利用各种技术提高封包、拆包和转发的速率,控制平面则专注于抉择转发路径,同时扩展、迭代新功能以便支持业务需求。
既然说到SDN,就不得不提openflow。老实说,我个人是比较反感openflow的。我是对网络很感兴趣才入行的,网络最大的特性之一就是自愈性,当网元加入、离开网络,亦或是故障,网络会快速地自动重新收敛。原谅文笔糟糕的的我,不知道该怎么去形容它的美,让我如此痴迷,比如二层防环的生成树,OSPF最短路径的贪心算法,还有快速重路由等等,网元靠着这些算法、机制和协议,构建出一张张可靠的网络。提到的这些和我们沉浸刷LeetCode的快感并无二致,openflow虽然依葫芦画瓢也都能实现,但我在其中并没有感受到同样的快感。
然而,由于云计算的发展,前文有提到,二者一拍即合,有了现在的虚拟网络。SDN本是为了解放网络应运而生的,但在目前从业过程中,其让我的烦躁有过之而无不及,所以我将其称之为叛徒。
山海难平
看着DPDK、RDMA、SmartNIC、FPGA这些技术的发展,SDN的数据面可谓是一片光明,但控制面看着却让人糟心。
举个简单的例子,为了实现DVR,即点到点的二至三层转发,控制面我们既要同步mac信息,又要传递主机路由,为什么我们都已经重新封装了,还要笨拙的去模拟原先的网络协议栈,只有在不符合预期功能的时候才强行打破规则。
所以无关协议转发也是SDN的一个发展方向,另一个方向自然是去掉封装,向下打平,没错,说的就是Segment Routing,这种分布式智能加上集中控制的源路由方式又深深地吸引了我。
容器其实在这方面做过一些简单的尝试,比如flannel的vxlan模式较原生的vxlan模式,已经不是大二层的概念了,其根本是由路由控制的,减少了内层二层信息在三层上的泛滥,再比如calico考虑和实体网元交互信息从而打平网络,但这种全量的分发和隔离控制在大规模网络下并不可取,这些都是小打小闹了。反观云原生,其所谓的四层以上的SDN,ServiceMesh,好不热闹,二、三层却好像还是一地鸡毛。
另外在从业过程中,也发现一些比较奇怪的现象,比如大家好像总喜欢推崇虚拟网络,乐于去攻坚其中的复杂问题,undelay网络却不屑一顾。其实在我看来,虚拟网络反而是很简单的那一个,而且得益于现在大规模数据中心底层clos架构的推进,就算是公有云的规模,虚拟网络的控制层面在网络结构的复杂性上面还是远远不及传统网络的,正如前文所述,其意义更像是一个云系统的总线,也正由于此,很多人总向我说,控制面不就是简单的向下下发配置么,也是,overlay的组网目前都还较为简单,流量工程就更远了。但随着规模的增长、5G和边缘计算的发展、云网融合等,我们对于云网络的需求远远不是止步于此。目前的挑战就已经很严峻了,但更大的挑战还在后面,我们正因为此,勇攀高峰,行业也正因为此,蒸蒸日上。希望我们在解决云网络控制面的问题时,不要总是聚焦于传统互联网那一套解决方案,可以多多借鉴其本身的网络思想,说不定柳暗花明又一村呢。
愿海有舟可渡,山有路可行!