常规网络基础架构设计是不是就像是“一堆协议”?加州伯克利大学教授Scott Shenker是这样说的。Shenker是一位网络专家,也是Nicira的合作创始人以及软件定义网络(SDN)的主要支持者。他认为,与计算机科学的其他学科不同,网络连接和网络规模仍然与其底层协议和标准紧密耦合,而没有足够的抽象。
他的论断有一定的道理,但是我认为一定要分清Shenker所指的大网络学科究竟是什么。毕竟,我们已经在主机间的通信关系上实现了抽象。开放系统互连(Open Systems Interconnection)模型本身就是一种抽象。例如,在编写聊天应用程序时,应用开发者不需要重建用于执行流量控制的TCP功能,也不需要重建用于执行主机间通信的IP。相反,他们可以使用协议栈提供的抽象概念。
为什么要在这些网络层上引入抽象?
我认为,Shenker的观点集中在如何将数据从一个网络传输到另一个网络,以及这个过程对于物理网络的依赖关系。我一直听到有人在质疑,为什么一定要在这些网络层上继续引入抽象呢?
如果您查看网络的核心协议会发现,这些技术的创建和改进过程很有技术含量。例如,边界网关协议(BGP)一直是保持网络连接互连网的基础。在路由器出现之初,它就一直存在,而且它已经被证明是一种可伸缩的解决方案。而且,行业一直在寻找突破协议规模限制的方法。例如,当路由表太大,无法保存在路由器的内存时,我们就可以使用路由汇总技术去解决路由表溢出的问题。那么,Shenker的观点到底是什么?如果行业一直都在解决面临的技术难题,那么为什么要纯粹为了改变而改变呢?
我认为,一定要理清问题抽象真正要解决的问题。但是,我并不清楚这个问题是什么。这才是真正的问题。我们已经被技术淹没,以至于只见树木不见森林。本文很好地从非技术角度阐述了如何使用抽象方法去解决问题。简而言之,抽象使我们更好地使用自己的重要思考技能,从更高层次看待一个问题,而不是直接进入问题的细节。解决路由表大小的问题就像停留在树木上。完整的SDN则致力于消除路由限制问题,在理论上实现一种支持更大容量的网络框架。
SDN是否是最终解决方案?
SDN是否是处理网络中缺少抽象的解决方法?不是。和路由汇总技术相似,SDN只是一种针对具体网络问题的方法,而不是一种使用抽象方法的解决方案。网络控制层面只是使用SDN处理的一个特定的抽象领域。我们还需要考虑设备层面。现在已经不能将Windows或Linux服务器的工作负载一对一关联到物理硬件上。现在,一个“Web服务器”已经不是一个物理设备;它只是一个概念。通过使用这种曾经的物理概念,然后经过“虚拟化”,或者说对它们进行抽象,我们就能够改进运营效果,创建新的服务模型,如基于基础架构即服务的私有云或公共云。
虚拟设备是这种功能的一种扩展。虚拟设备可以运行在公共云基础架构上,也可以运行在数据中心的一台白盒设备上,因为它们已经从物理硬件上抽象出去。因此,安装一个内容管理系统可能就是简单的下载一个虚拟设备,然后将它导入到云管理程序的虚拟化集群中。
我们是时候离开由各种网络协议构成的小细节了,这些网络协议一直在为复杂系统增加抽象层次,我们将创建一些全新的产品和运营模型。我们目前还无法看到这一点,因为我们现在仍然挣扎于各种协议之中。