编辑注:本文系InfoQ中文站对盛科网络软件总监张卫峰的约稿。作者从自身做过的方案和所了解的业界情况为出发点,经过仔细思考,得出本文中对SDN当前现状的判断,所以文中难免涉及到作者所在公司之方案、产品,出于参考价值的考虑并未进行删节。若您就这个话题也有希望分享的内容,欢迎向我们投稿!
以下为正文:
半年之前写过一篇文章讨论SDN的本质,当时就说这会是一个系列文章,后面还要写一下SDN的落地。这一等就是半年多,其间有朋友问过我为什么还不写——不是我不想写,是有些问题还没想清楚。直到现在我也不敢说我完全想清楚了,但是毕竟有了更多的实践,实践过程中不停地思考,加上不断有媒体朋友找我约稿,我想还是写一写吧。这篇文章可以看作是对我三年SDN工作历程的一个总结和反思。我在这篇文章会回顾一下人们对SDN定义的争议,SDN的落地实践,阻碍SDN落地的一些障碍,给出一些对SDN落地的建议和看法。
现在大多数人对SDN的定义是控制跟转发分离+开放的编程接口,包括Gartner也是这样的定义。Gartner的数据中心云计算行业分析总监曾绍清告诉我,他们认为思科的ACI不是SDN,因为ACI并非是控制和转发分离,它只是把策略管理的功能分离到了控制器上,控制协议(OSPF、BGP等)仍然运行在交换机上。但是我曾经在国外著名的通信技术媒体lightreading上看到他们综合一些专家的意见给出的定义,该定义里面只提到了开放的可编程接口以及由此带来的业务敏捷性。就我个人的观点来看,我更倾向于lightreading的定义(具体请参阅我的第一篇文章)。不过,正如青云CEO Richard接受InfoQ采访的时候说过的,每个人对SDN都有不同的定义,这个并不重要,我深以为然,重要的是SDN带来的价值。所以,以后大家不要把精力浪费在讨论SDN的定义上吧。
总有人说没看到SDN有落地案例,但是你去看一些国外专业的咨询机构,总能看到他们的报告中,SDN的市场份额在逐年增加,且趋势向好。是有人在撒谎吗?No。
咨询报告中说的SDN市场份额在增加,主要是强调SDN现在最大的一个应用场景——网络虚拟化中的应用。很多人说没看到SDN有落地案例,那是因为他们潜意识里面只把控制器+硬件SDN交换机的应用认为是SDN应用,云平台+虚拟交换机他们认为不是SDN。而事实上,以VMware的NSX为代表的网络虚拟化的应用早已经是被广泛认可的SDN的典型落地案例。
目前看到的基于SDN的网络虚拟化解决方案有以下三种:
纯软件方式,以VMware的NSX为代表。除了NSX,还有Juniper的Contrail、Midokura的MidoNet以及Vyatta、Nuage、Plumgrid等公司的商业网络虚拟化方案。这些公司的实现方式都不太一样,但是都在不同程度上用到了SDN技术。有的只是把一些策略管理的东西放在控制器上,转发表项还是由虚拟交换机自己来生成,而有的则是控制器来下发转发表项。而目前影响最广泛的OpenStack的网络组件Neutron,则两种方式都支持,Neutron更是一种标准的SDN架构。由于本文的目的不是介绍技术细节,所以这里就不深入展开来讲了。
硬件方式,以思科的ACI为代表,即将网络虚拟化在硬件中实现(当然也不排除会用到vRouter)。具体ACI的架构,我之前也写过一篇文章,可以参阅一下。
软件+硬件方式。盛科网络推出的SDN方案即属于此类(Arista也有类似方案),本质上它是一个软件方案的思路,只是把部分对性能影响最大的操作offload到硬件SDN交换机,可以认为是一个超级网卡。并且它为NSX之类的软件方案提供了SDN交换机作为Tunnel Gateway来满足物理服务器跟虚机混合组网的需求。
华为和华三也都相应的都有自己的解决方案,只是目前看到的他们都是推整体云计算解决方案,没有把网络部分整出一个方案来单独卖。
无论纯软件还是硬件的SDN解决方案,在云计算数据中心里面,应用的越来越广泛,所以如果要谈SDN的落地,这是目前最大的,最不容忽视的一个。
除了在网络虚拟化领域的应用,SDN交换机在别的领域也有一些应用,但是从应用广度和影响力来看,都比不上在网络虚拟化中的应用。从我们自己以及国外一些案例来看,落地的SDN的应用,其驱动力主要可以归结为两大类:业务层面灵活性的需求,转发层面灵活性的需求。前者的价值要远大于后者。
这主要是强调可编程。通过开放的可编程接口,提供给用户原来无法获得的对网络配置管理和策略部署的灵活性控制。前段时间著名的运营商亚太环通(Pacnet)宣布在天津的一个IDC正式启用,他们宣称里面使用了SDN技术来为用户提供自助调整带宽的功能,其实该功能早就部署在了他们新加坡、澳大利亚,香港等国家和地区的其他数据中心。该功能是通过定制化的SDN交换机实现的,其中的千兆交换机是盛科提供的。这是一个很典型的体现业务灵活性的例子。用户可以在他们提供的一个界面上,随时按需修改自己的出口带宽。而且不仅如此,一个用户可能租用了他们多个数据中心,通过SDN创建的MPLS隧道把用户在多地的数据连通之后,可以通过SDN动态调整这些隧道的带宽,一旦出现故障或者拥塞,还可以自动重新选路。没有SDN,要做到这一步很难。
但是大家更关心的是SDN在企业网里面如何用。并不是所有企业网都适合使用SDN,什么样的企业网需要用SDN呢?这个问题后面再分析。国外一个著名设备商N,他们有挺多的SDN案例,特别是有些案例规模还是较大的,不像某些公司挂羊头卖狗肉的宣传,我至少知道他们有一个案例是很值得拿出来讲一讲的(这个案例在国外网站上也有介绍)。他们给某电视台的一个新的网络进行了SDN化设计,该网络有一个特点,就是拓扑和策略都是灵活易变的,比如这个星期是为一个大型演出节目准备的,而下个星期就变成为一个体育节目准备,如果没有SDN,他们需要靠人工去插拔线修改拓扑,重新划分物理和逻辑网络等,非常麻烦,在人工很贵的国外,这个问题特别突出。使用了SDN之后,整个物理网络基本不动,每次就依靠SDN将网络重构。这个案例还包括无线AP,也是SDN化的。而且值得关注的是,他们并非全部使用SDN,而是一个混合的网络,既有SDN,又有传统的。即在需要SDN的时候SDN,不需要的时候就用传统,深得SDN的精髓。
在我们碰到的案例中,也有一个复杂度没这么高,但是需要对网络灵活控制的。该网络管理员说他管理了一个较大的实验室,每天都有人在里面做不同的实验,对这些不同的人,网络中都需要有一些不同的安全控制策略,每次都去找他该配置,他不胜其烦。而这个时候,如果建立一套用户权限体系,用户可以自行登录申请,一旦认证通过,根据他的权限,控制器可以自行下发安全控制策略到交换机上,SDN的业务灵活性充分体现出来。
这主要是针对一些非常特定的场景,主要是为了匹配或者修改特定字段,通常是传统交换机不支持的(其实芯片也许能支持,只是交换机系统没做)。这些场景我们也碰到不少,比如用来做DDoS防攻击(日本Sakura Internet的应用),用来做负载均衡+NAT,用来做TAP应用(价格是专业的TAP设备的至少1/5),用来将PPPoE跟IP区分开并灵活控制等等。还有一些用户提出来过,但是需要辅助FPGA或者NP才能做到的。这类应用主要的灵活性体现在转发面上而不是控制面。
硬件SDN的落地进展并不顺利。虽然现在慢慢有了一些更多的案例,但是离规模部署还很远。我跟Gartner的曾绍清一起探讨过原因,曾说Gartner经过调查,形成了一些他们的看法。
Gartner的观点认为,以下几个问题阻碍了SDN的落地:
我个人觉得Gartner的观点都很有道理,相对来说看得比较宏观。我根据我们的客户交流和项目实践中碰到过的一些问题,也谈谈我的看法。我的观点其实跟Gartner有不少相通之处,算是一枚硬币的两个面。我认为一个用户要想把SDN在他的网络中落地,必须同时满足这三个条件,缺一不可。而现实中,这三个条件同时满足的不多,这也导致了SDN的落地缓慢。
OpenFlow是最广为人知的SDN技术,但是并非唯一。而且实践证明,仅仅靠OpenFlow,很多事情做不了,OpenFlow可以应用的场景非常狭窄。
关于OpenFlow本身的技术缺陷,很多文章都提过,我之前的书和文章里面也都详细分析过,诸如当前交换芯片支持的流表数量都有限,报文匹配和动作都不够灵活,都无法支持很多级流表等等。这些分析都是对的,但是我要告诉大家的是,这些限制根本不足为惧。为什么这么说?因为这些都是从OpenFlow技术规范出发得出来的结论,而不是从SDN应用的角度得出来的结论,换句话说,SDN的应用,未必真的需要OpenFlow规范里面提到的所有技术,所以就算有限制,问题也不大。OpenFlow真正的限制在别的地方。
还是以我们给那个互联网大厂做的项目为例,该厂所要求的一个核心技术点别的交换机都做不到,只有盛科的能做到(因为盛科是用自己的芯片,恰好支持该功能),而且该技术也能按照客户要求使用OpenFlow配置出来,一时皆大欢喜。但是当该产品要转运维的时候,问题来了,运维部门要求所有入网的设备,都要满足他们的运维要求,诸如SNMP管理、能够查看统计、能够ping通该设备、能够telnet该设备、能够通过Radius到远程服务器进行管理员身份认证等,这些对交换机来说是再正常不过的基本需求了,但是所有这些东西在OpenFlow上都没有定义。当然你可以辩论说这属于管理面的,不属于OpenFlow的定义范畴,OpenFlow只定义转发面和控制面功能,但是管理层面的不少功能依赖于转发面,比如管理员想通过带内口ping通交换机以便检验路径的可达。还有运维人员希望交换机能支持基本的LLDP协议来进行邻居发现。另外一个互联网公司也给我们提出过类似的要求。
运维管理功能的缺失导致了传统运维人员的抵触是可想而知了。这光靠OpenFlow是无法解决的,需要引入传统的东西。
用户网络中通常都是存在很多传统设备的,不太可能为了引入SDN而把这些设备都抛弃,所以这就涉及到一个问题,需要SDN设备跟传统设备互通。比如有一个三层汇聚交换机,该交换机会向下发送ARP获取下联设备的Mac,如果下面是个传统的主机或者三层设备,它会自动回复ARP请求,但是OpenFlow交换机没这能力,它只能把报文发送到控制器,让控制器回复,但是很多用户不想在控制器上进行开发来支持这种非核心业务。而且,实事求是的说,最高效的做法肯定是在交换机上进行回复。
还有更复杂的例子。曾经有一个软件开发商,使用盛科的交换机给一个电商开发WAN网的流量调度,它需要跟传统交换机进行路由协议交互,如果不在交换机上运行路由协议,就要在控制器上运行。在控制器上运行路由协议,会让控制器很复杂,而且效率低下,况且,这也并非该软件提供商的核心价值,他们也没这个能力去在控制器上做一个路由协议并把它做稳定,所以他们希望交换机上做。SDN交换机对他们来说,核心价值是让他们可以控制报文的转发路径,从而动态调度流量,至于跟传统网络的交互,他们不希望重复发明轮子,而是希望借用交换机的传统能力。
以上两个问题,并非是说靠纯OpenFlow交换机完全无法满足,如果在控制器上做得足够复杂且不考虑效率,也是可以做到的。我们就有一个云计算的客户,使用我们的纯OpenFlow交换机,完全靠自己开发的控制器去进行必要协议报文交互(主要是ARP)和各种其它必要的控制,他们之所以能做到这一点,就是因为他们本身有很强的研发团队。对于大多数人来说,要走这条路是很难的,那解决方案是什么呢?就是同时支持OpenFlow和传统二三层处理的混合型交换机。
根据以上的分析,为了加快SDN落地,对用户、对SDN提供商、对整个行业,我有如下建议。
我们要正确地认识SDN,不要过高估计SDN的能力,也不要对SDN丧失信心。SDN不会取代传统网络,甚至看不到它有占据垄断地位的可能,但是它肯定会是现有网络的一个强力补充。SDN落地不要太在乎标准化,要着眼于开放性。SDN落地不仅呼吁第三方应用提供商的出现,更重要的是,SDN用户企业中的决策者,要有足够魄力,敢于承担风险,愿意在使用中完善SDN,要勇于拍板。国外的Google,Facebook有这个魄力,NTT有这个魄力,Verizon有这个魄力,Pacnet有这个魄力,国内的公司没理由在这方面落后于他们。我们欣喜地看到国内某些公司已经在赶上,腾讯就是一个很好的榜样。
最后也要给所有要学习SDN的朋友,特别是学生朋友一个建议:学习SDN,必须要有基本的网络知识作为基础,不懂网络就想学习SDN这是不现实的。
张卫峰(@盛科张卫峰),盛科网络软件总监,数据通信和芯片设计领域资深专家,有十几年的网络实践经验,对SDN、传统二三层交换机、数据传输设备(PTN和IPRAN),从管理面到协议控制面一直到芯片转发面都有着深刻的理解。