本文仅代表个人观点,请以辩证的态度看待

没错,我就是来吐槽的。

提到 openflow,大多数人应该觉得就是 SDN 的一个典型代表吧,但其实是由于云计算的崛起让它发了意外之财。openflow 抛弃了已经很成熟的网络协议栈,去让控制器给背锅,这就注定了路不好走,再加上纯粹的集中控制模式,目前看来是没啥发展了。

首先要吐槽的就是,Neutron 虽然是用了在应用层去实现网络基本机制的 openflow,但对网络技术用语的不严谨搞得我懵过不止一次。我明白,作为一个产品在面向最终用户的时候,把实现的某些功能抽象呈献给用户是个不错的选择。正向案例我记得比较深刻的一个是「快照」这个东西,从名字上来看感觉就是给现有状态做个完整的备份,一般来看就是复制一份吧,然而大多数实现是「写时复制」,恍然大悟。那现在来看看 Neutron 在这方面做了哪些?floating ip,这个还比较形象,也很容易联想到是用静态映射实现的;flat网络,这个就有点混乱了,本来这个是相对于使用虚拟化封装过的多层次网络来说的平面网络,比如没有使用 802.1q 封装,但注意不是没有打 tag 就不是 vlan 了,这跟链路类型也有关系,也就是说外部的 vlan 在某种情况下也是可以给 Neutron 提供 flat 网络的(比如本征 vlan);代理 arp,这是把我搞得最懵的,其本身是三层设备为连接的广播域提供代理的,而 Neutron 是在 openflow 实现 vtep 的二层网关时提到的,我是一直不能理解,很久之后才明白那是 arp 广播抑制,技术实现、封包完全不一样好么!

回归主旨,谈谈为什么我说 openflow 使 Neutorn 走上了歧路。

还是由于 openflow 抛弃了原有的成熟网络协议栈,在使用 vxlan 协议时,它只实现了作为 vtep 的一半功能,即没有三层路由(那时还没有 OVN)。于是,Neutron 搞了个网络节点,使用 namespace 进行路由,这蛮不错的。但随着功能的增多,比如 VPNaaS、FWaaS 等使 namespace 的压力越来越大,这也还好。我重点要吐槽的是下面两个(尽管这俩被很多人推崇备至):

  • L2 Population

    本来是想提高 vxlan 网络 Scalability的,说白了,就是 Neutron 在 vxlan 控制层面上的增强,应该是想要达到 BGP EVPN 那样的效果。然而效果不咋滴,却造成 qrouter 经常脑裂。

  • DVR

    我觉得这是想模仿 vxlan 的三层分布式网关效果吧。但人家能这么搞,是因为有相关网络协议栈的支持,DVR 就直接 copy namespace,数据包处理还是那一套,然后根据端口复用、静态映射、路由等进行了分工,还使用了策略路由进行导流,没进行路由就强行修改 mac (openflow 在实现其它功能上也做了类似处理),无话可说。

最后,引用一句曾看到的相关评论:

SDN王冠上的钻石Openflow并没有如愿成为主流的南向接口,纯种的集中控制看起来也不如物理上分布逻辑上集中的控制模式更有吸引力。再后来,被SDNer们诟病已久的OSPF和BGP,居然杀了个回马枪,渗透进了数据中心网络,成了LAN\WAN通吃的控制平面。而曾经风光无两的ODL和ONOS,也从参谋长联席会议主席的位置上隐退,稳稳当当地在神坛上被供了起来,靠着三心二意的支持者们心不在焉的香火钱维持存在感。