WHY SDN

近被几次问到,为什么要采用SDN,或者说SDN的能带来的好处是什么?这或许是在构建数据中心或者IaaS服务时无法回避的一个问题。直接回答可能就几句话,但是要真正通俗明了的解释,需要一定的篇幅展开。

首先,在构建数据中心或者IaaS(Infrastructure as a Service)时,网络是至关重要的。这不仅是因为,网络是IaaS提供的基础服务内容之一,例如我们常用到的DNS,DHCP,LB等,都属于网络服务;更是因为,网络本身,是其他服务,例如计算,存储的底层连接管道。如果没有网络,数据中心呈现给我们的只是一台台服务器。而网络,可以将服务器之间高速的连接在一起,在这个基础之上,才有在多个服务器上构建大型应用的可能。

网络架构基本决定了数据中心的架构,为数据中心选取一个合适网络架构或许是决定数据中心能否终成功的重要因素。SDN(Software Defined Networking)是近些年流行的网络架构,Google,Facebook,Amazon都在自己的数据中心内应用了SDN,那背后的原因究竟是什么?

SDN之前

数据中心早在SDN之前就存在,网络更是早在数据中心之前就存在。所以,SDN相对于网络来说是个比较新的事物。传统的网络设备是为了构建互联网(Internet)而创建的。互联网的大特点是去中心化,这使得互联网上每个区域之间都平等的存在。抛开人为因素,中国的互联网与美国的互联网没有什么区别。因为互联网的去中心化特点,互联网的发展不受一个集中中心的控制,受到的约束小。这是互联网能快速发展并获得成功的基础原因之一。

从opte project[1]生成的互联网连接图来看,互联网正是由一个个小的自治中心连接构成。

互联网的去中心化特点,从另一个角度来说,要求每个区域自治。中国互联网的运行,不依赖美国互联网的任何设备。为了满足区域自治的能力,大部分网络设备都被设计成了全能型,因为只有这样才能提供一个区域内所有的网络功能,以达到自治的目的。例如一个思科的路由器,除了三层转发之外,还具备OSPF,BGP,DHCP,DNS,DMVPN,IPSec VPN等功能。用不用没关系,关键是想用的时候必须要有。传统的网络设备就像是瑞士军刀一样的存在。

随着互联网的发展,网络协议,网络标准也越变越多。如今,一个商用路由器里面,有至少:5000万+行代码;7000+ RFC;100亿+ 晶体管。并且在新的型号,新的软件版本中,这些数字还在不停的增加。

在开始构建数据中心时,仍然采用的是这些网络设备或者是以这样思维构建的网络设备。这样,我们构建出来的网络拓扑如下图所示。每个网络设备都运行着5000万+行代码,5000+个RFC,并且能够独立的与其他网络设备交互。

这样构建的数据中心也没有问题。毕竟,能把事情办成,或者说从0到1,是难的。另一方面,能够承载互联网规模的网络设备,用在数据中心内部也是绰绰有余的。那还有SDN什么事吗?

既然SDN是在数据中心之后出现的,也就说明SDN不是构建数据中心的必要因素,这或许是大多数质疑SDN的声音的原因:我现在的东西跑的好好的,为什么要用SDN?这里不说什么控制层与数据层分离这类虚的理由,来看两个具体的问题。

个问题其实已经很明显了,那就是冗余。为了实现自治,每个网络设备都运行了几千万行代码,几千个标准,为了运行这些代码,网络设备本身需要设计额外的硬件。软件和硬件都是需要成本的,虽然对于设备厂商来说,边际成本很低,但是对于使用者来说,每一个网络设备因为运行了复杂的软件和硬件变得成本高昂。设备厂商是乐于看到这个现状的,因此思科的股票在91-99年的时候涨了200倍,即使跟现在的股价比,也是涨了100倍。但是应该没有一个用户乐于看到这个情况。

土豪或许会说,成本不是问题,只要东西好用就行。但是真正好用吗?网络设备的数据转发,简单来说是依赖查找FIB(Forwarding Information Database)完成。什么OSPF,BGP,终都要体现到FIB中才能生效。一个网络设备内的FIB可以达到数百万条,这些FIB是怎么生成的?传统上来说是由各种功能和协议生成的。前面说过,传统的网络设备被设计成瑞士军刀,全功能的背后,导致FIB的产生过程变得极为复杂。这使得FIB本身既难于被观察,也难于被控制。那网络出了问题怎么办?我们大部分时候只有有限的几个工具,ping,traceroute,tcpdump。所谓的CCIE (Cisco Certificated Internet Expert)troubleshooting也就是利用ping和traceroute来完成问题定位。因为工具的缺乏,网络问题的定位通常需要“网络专家”的介入,并且要花上一定的时间。所以,第二个问题是,传统网络设备的运维成本高。

什么是SDN

SDN全称是Software Defined Networking,我在专栏里面多次提到过。不过为了本文的完整性,再来看看什么是SDN?根据Open Networking Foundation新的解释[3],SDN是指将网络控制层与数据层物理分隔开,并且用一个控制层软件控制多个数据层设备。这里强调了2点,一是控制层和数据层的分离,另外就是分离之后采用集中的控制层来控制多个数据层设备。

这是官方的解释,我相信很多人眼看到这个解释是一头雾水,什么是控制层,什么是数据层,为什么要分离。。。我们来回顾一下上一个图中,传统网络中,软件和硬件是怎么运行的?是运行在一起(好像是废话,软件也脱离不了硬件)。为了达到自治的能力,每个网络设备运行着庞大的软件。这个庞大的软件包含了多个网络功能和网络协议,并且这个庞大的软件会终生成FIB下发到网络转发硬件,使得网络设备能够正确转发网络数据。这个就相当于每个网络设备运行着一套庞大的FIB编程软件。这个庞大的软件就是网络控制层,而网络转发硬件就是数据层。

SDN提出的控制层和数据层分离,就是将这个庞大的软件,从网络设备中剥离出来,并且在一个集中的地方去实现。剥离之后,网络转发硬件不再具备自编程FIB的能力。集中的控制层软件,通过约定好的接口,给网络转发硬件,也就是数据层下发FIB数据。所以传统网络设备自己运行控制层软件,给自己的FIB编程。而SDN提出的是,将控制层和数据层分离,用一个集中的控制层软件,给数据层进行FIB编程。具体效果如下所示:

这就是SDN的一个基础的解释。但是到此为止,我还没有回答开始那个问题:为什么要用SDN?

WHY SDN

这部分来看看SDN架构能带来的影响。

SDN架构的直接结果是,网络设备变得更简单了。在SDN架构中,网络设备不需要运行几千万行代码,不需要实现几千个网络标准(RFC),只需要实现一个与集中的控制层软件约定的接口。这样,集中的控制层软件可以通过这个约定的接口,更新网络设备的FIB。因为这个原因,网络设备只需要运行少得多的代码,硬件和软件也因此变得简单,成本得到下降。

这里提到约定的接口,具代表性的就是OpenFlow。OpenFlow是个被广泛采用的,开放的,控制层与数据层之间的接口。这是OpenFlow与SDN的关系,所以常说OpenFlow不是SDN。因为OpenFlow只是SDN的一个(甚至都不是必须的)组成元素。

SDN的第二个结果是,因为FIB现在由集中的控制层软件下发,这使得FIB能更容易的被管理。例如,通过OpenFlow实现了DHCP,防火墙,proxy,L2,L3等功能,在网络出现故障的时候,一般分析OpenFlow规则就能完成troubleshooting。我们不再需要,ping,traceroute,检查 RIB(Routing Information Database),检查各种配置,分析FIB等等一些列传统的步骤。所以,现在网络运维变得简单了。

但是SDN的主要思想与互联网的大特点:去中心化,是背道而驰的。SDN很明显的提倡一个集中的控制中心,网络设备的自治能力被回收了。但是数据中心网络与互联网本身就有很大的区别。互联网不属于特定的人或者组织,只有去中心化,各个区域才能平等相处。而数据中心的拥有者很容易找到,对于数据中心的拥有者来说,一个集中的网络控制软件,有助于更简单的管理,运维,监控整个数据中心网络。因此,在数据中心内部,集中控制比去中心化更有优势,所以在数据中心内采用SDN更具有优势。

SDN的优势除了前面提到的成本(包括资金成本和运维成本)的降低之外,还包括降低对厂商的依赖。在传统的网络架构下,网络设备厂商基本决定了数据中心的网络架构,因为网络设备厂商会根据自己的设备提供相应的网络架构,网络的维护,升级,扩容,都严重依赖网络设备厂商。采用SDN架构之后,因为网络设备只暴露FIB的编程接口(例如OpenFlow)网络设备变成了一个个“白盒”交换机。当需要升级,扩容的时候,因为接口都是统一的OpenFlow,没有必要再依赖特定的厂商。所以SDN的第三个好处是,降低了对厂商的依赖。

此外,SDN提出采用一个集中的软件来控制数据中心的网络设备。这个集中的软件可以运行在服务器上,并借助软件开发里的方法论来保持功能的稳定。例如文档,实现,测试,静态代码检测,CI(Continue Integration)等等。这套方法论使得SDN比传统网络设备更加的稳定,可靠。

当然,任何事物不可能全是优点,SDN也有自己要面临的挑战。大的挑战在于,需要重新实现一个集中的控制层软件。一些好的开源项目可以帮助用户更快起步,当然厂商也有自己的软件。另一个挑战就是集中的控制多个网络设备,将要面临的性能瓶颈问题。具体的问题涉及到SDN的设计和实现,这里就不展开了。

总之,SDN之路绝不会是一帆风顺的,但是通过这部分的描述,应该已经回答了本文开始那个问题。

服务器发展的借鉴

似乎本文已经可以结束了,但是还有一个有趣的观点想跟大家分享一下。我们来回顾一下服务器的发展历程。

服务器开始的出现就是大型机,这其中的代表公司是IBM。IBM的大型机占据了服务器市场主要份额几十年,至今仍有一定的市场。随着Intel和Motorola开发出X86架构CPU,Dell和HP等公司相继推出了基于X86架构的服务器,打破了IBM对于服务器的垄断。X86服务器开始占据中低端市场。但是这个时候的X86服务器仍然是IBM的模式,即软件硬件打包出售。对于用户来说,只是使用成本,性能的不同,使用模式都是一样的。用户依然严重依赖服务器厂商提供服务。这与现在的网络设备的销售模式一样,设备厂商打包出售软件,硬件,服务。

2005年,白盒服务器开始推出,服务器领域才出现了根本性的变革。服务器不再打包软件,只是作为一个通用的硬件出售。这个通用硬件提供开放的标准,使得各种操作系统,例如Linux,Windows都可以运行在其之上。而用户的应用程序,再运行在操作系统之上。

白盒服务器的出现,使得用户真正摆脱了对于服务器厂商的依赖,并且服务器的成本大幅降低。在这个过程中,生产通用硬件的厂家例如Intel,提供操作系统的组织,例如Linux是大的受益者。而传统服务器厂商,例如HP,IBM,Dell,利润持续萎缩。

反过来再看网络设备,现在仍然处于软件,硬件和服务打包出售占据主导的阶段。SDN想要做的,就是打破这个模式,就是采用通用的网络硬件,在这之上构建网络操作系统(集中的控制层软件)。终用户的各种网络应用(各种网络功能)运行在网络操作系统之上。这就是为什么主流的网络操作系统,例如OpenDaylight,Ryu,都在强调自己构建“Application”的能力。所以,SDN对于网络设备的改变,如下图所示:

不过话还是要说回来,现阶段还没有出现一个类似Linux或者Windows一样杀手级别的网络操作系统(控制层软件)。因为没有一个统一的网络操作系统,Application的开发就显得分散,相应的SDN的前进动力也被分散。不过,如果服务器的发展之路是有道理的,那么SDN的思路就是想重走这条路。

SDN分化

似乎可以结束了,但是还有个观点想补充一下。前面介绍的所有内容都是在说硬件如何如何,但是在SDN领域里面,还存在着另一大分支,例如OpenVSwitch或者OpenContrail或者NSX,这些软件产品似乎跟硬件没有关系。那为什么他们也被称为SDN?

SDN的发展,开始是源于网络设备的演进。但是之后,SDN的发展道路分为了两条。一个是软件SDN(又叫做overlay SDN),另一个是硬件SDN(又叫做underlay SDN)。

硬件SDN就是上面描述的内容,希望我已经说清楚了。而软件SDN是为什么能存在?

在很多场景下,物理网络已经构建完成,这个时候要做SDN改造并且替换所有的网络硬件设备明显不现实。所以软件SDN提出,将数据层(网络转发设备)通过软件在服务器之上实现。例如OpenVSwitch就是这样一个软件(虽然OpenVSwitch也可以跑在交换机硬件上)。也就是说软件SDN不改变硬件网络,同时在服务器上再虚拟出一层网络设备,并在这个虚拟出来的网络设备(虚拟交换机)上,实现FIB的编程。

既然这样,从直观上来说,软件SDN既不能带来成本上的降低,因为硬件设备还是那些;又要占用服务器资源,毕竟虚机交换机的运行,网络数据转发都要消耗一定的服务器资源。

那我们又回到了开始那个问题,对于软件SDN来说,Why SDN?

软件SDN

软件SDN有其特定的应用场景,就是SDDC(Software Defined Data Center)。SDDC里面,应用程序都跑在虚拟机上。一般情况下,一个物理服务器上运行着多个虚拟机,这多个虚拟机通过虚机交换机连接到物理网络。所以对于SDDC来说,虚拟交换机的资源消耗本身就存在。

另一方面,虽然看起来网络硬件设备的成本没有降低。但是软件SDN还是具备SDN的其他优点,例如提供统一监控,管理的平台,降低对厂商的依赖,能利用软件领域的方法论提供更稳定的控制层软件。 这对于构建SDDC尤为重要。

后,网络设备的成本真的没有降低吗?软件SDN是构建在传统网络硬件设备之上,但是在软件SDN下,网络应用(DHCP,DNS,LB)等,已经在SDN中实现。也就是说,采用软件SDN之后,不再需要在网络硬件上实现相应的功能,对网络设备的要求(内存,CPU)要求降低了。并且,如果采用Overlay网络,例如VXLAN,一个主机就算有再多的虚拟机。对于物理网络来说,看不到相应的虚拟机流量,物理网络只需要保证一个相对较小的网络稳定运行。反过来说,如果不采用Overlay网络,虚机的流量被物理网络可见,假设一个服务器虚拟只4个虚机,那么物理网络设备需要比之前处理4倍的FIB,ARP等等转发表项,这对现有的物理网络设备将是一个挑战。编排Overlay网络,是少不了借助软件SDN的。所以,虽然采用软件SDN,不能降低已经发生的成本,但是在同等情况下,软件SDN使得SDDC对物理网络设备的要求降低了。这其实也是一种成本的降低。

[1] opte.org/the-internet/

[2] learningnetwork.cisco.com

[3] opennetworking.org/sdn-

[4] yuba.stanford.edu/~nick

相关文章