New Stack 曾经在软件自定义网络方面发表了一系列的文章。今天的这篇文章可以算是这个系列的一部分。在part 1中,我们对SDN进行了定义,并且详尽地说明了各种SDN控制器及相关框架之间的区别。在我们这个系列的part 2 ,我们介绍了Trema,这是一个用开发OpenFlow控制器的框架,是用Ruby和C语言所写的。在Part 3中,我们探索了NOX,这个是最开始的OpenFlow控制器。在part4中,我们介绍了Ryu,这是一个由NTT实验室所维护的开源SDN控制器。在part5,我们了解了FloodLight,这也是一个OpenFlow控制器,有着超过15000的下载次数。在part6中,我们主要像介绍的是OpenDayLight,这也是一个SDN控制器,被很多厂家所支持。
在不久之前,一个同行告诉我,他发现许多人都希望把传统的网络转化成软件自定义网络。
我同意他的观点,那么对于Docker呢?在SDN之前,Docker已经带来了许多新的变化,让资源密度和新的计算理念变成了焦点话题。由于Docker所带来的影响,传统应用和各层服务平台正发生着不同程度的改变,这些不同层次的服务如何被SDN所影响,反过来它们又如何影响SDN?
当越来越多的服务和软件开始运行在复杂的、快速的、分布式的基础设施上,问题就出现了。越来越多的应用在架构设计上可能需要跨数据中心进行同步。这些应用可能由一些可交互的服务构成,并且对于实时流数据的处理上(processing real-time streaming data)具有事件驱动能力。监控服务也会变得越来越重要,用户需要来检测运行在OpenStack、AWS云服务或者其他基础设施平台上的容器所发生的异常。
这些新的应用在架构上的复杂性对于大多数开发者而言将是不可见的。我们也也希望网络可以在没有服务人员帮助的状态下正常工作。目前为止,大家的注意力主要集中在Docker上,Docker被视为是一个新的堆栈转化(stack’s transformation)的标志。随着Docker及相关技术的到来,在技术栈(technology stack)的各个层面上将会产生许多新的需求。
在过去的几周,Sridhar Rao对软件自定义网络的相关内容进行了一系列的介绍。内容从市场上的***代SDN工具开始,一直到SDN是如何走向成熟。现在我们将兴趣转移到容器相关技术上。Docker以及其相关的应用平台的出现,让我们对于网络模式的思考有了一种既熟悉又陌生的感觉。Docker中所使用的新的网络技术一方面可以作为SDN应用的一个先例,另一方面,它还对其他因素进行了考虑,比如资源利用密度以及数据引力(data gravity),这些议题也随着轻量级容器技术和微服务理念的发展逐渐产生。
SocketPlane是一个正在发展中的混合的网路模型,它基于SDN的原则构建,并且可以被应用到了Docker的环境中。
SocketPlane正在逐渐发展成为一个可编程的平台,它把DevOps放在一个网络环境中。这里有一篇关于SocketPlane的不错的文章。文中介绍了 SocketPlane如何在不同的主机之间建立一个 VXLAN隧道,以此来将不同主机上的Docker容器连接起来,使其处在同一个虚拟逻辑网络中,整个过程并不需要远程或者额外的 SDN控制器进行控制。
用户可以通过命令行工具与Docker容器进行交互,也可以使用socketplane的相关命令来创建、删除虚拟网络或进行其他的操作。
SocketPlane使用Hashicorp的Consul工具,使其作为一个轻量级的控制平台。在网络的连通性上,SocketPlane通过Open vSwitch来连接到Consul集群上。一旦Docker主机被加入进来,代理程序就会启动一个Docker实例,并且连接到集群中。之后容器看起来就像一个虚拟机。
由于Docker相关技术带来的变化,新一代的网络技术将会被重新定义,容器在跨多服务器、多主机的环境中的协同工作能力也会得到加强。产业界预期容器的数目的使用上可能至少有两个数量级的增长,随着容器使用数目的增加,后续的容器的相关管理技术也会不断发展,这将有可能在相关领域产生更多的创新。
“你可能会看到,对于短时间周期内执行的大量的计算任务,容器数目可能会达到一个新的数量级 ” SocketPlane的John Willis这样说,“现在所关注的问题可以算是‘纳秒级计算任务’,在每一周,开启或者停止运行的实例的数目级别可能会从1000个实例到1亿个不等。
在去年12月份的Dockercon Europe上,Wills让我们了解了他的观点,Willis从供应商的角度上进行了反思,告诉我们接下来的网络世界可能会发生什么。许多其他的供应商也做了演讲,我们可能会在接下来的文章中进行具体的介绍。特别地,Weave作为一个使用以容器为中心的网络技术的例子,也引起了一些关注。CoreOS也开发了Flannel,包括Docker也有其自己相关的网络配置功能。
Wills认为 SDN这个术语需要包含的内容太多,因此可以从各种不同的角度对其进行解释。为什么会这样?因为网络的确很难管理,并且适应性很差,发展更新也很困难,理解起来也不太容易。如果把这些因素都考虑进来,网络问题的确会变得非常复杂。在另一方面,SDN期望数据层可以有更好的适应性,并且可以将控制层从物理设备上移除。但是这样做会使控制层的集中化的程度过高,以这样的方式管理一个以容器为中心的生态系统是不切实际的。
“中央大脑”模式所存在的问题
MarkBurgess的这篇文章很有启发,集中化的网络可能就像是以下这样:我们需要一个大脑,但是大脑实际上能处理的内容是有限的。因此我们需要许多大脑来一起工作。这好比我们通过创建一个社群来继承我们的知识,而不仅仅是依赖一个单独个体来掌握全部的知识。
长久以来,集中化的模型一直发挥着作用。比如你可以通过硬件来构建一个网络,这个网络可能由一个中心结点来控制。SDN通常就是基于这个原则来创建的。它所依赖的理念是:将集中化的控制层和数据层相分离。但更有意义的一种情况应该是使用一个非集中化(de-centralized)的网络,这个思路借用了我们社会构成中的“集中式的大脑”和“分散式的知识存储”的原理。在现实社会中,从来没有一个大脑可以控制我们生活和工作的方式。正是由于社会的“集群性质”(collective nature of society),于是我们就产生出了一系列的概念和想法,这也反应出了人类社会的本质。更进一步来说,一个大脑所能处理的信息是有限的,而一个有集体智慧的社会群体是由进行成千上万个协同工作的大脑所组成的。Burgess通过下面的方式来说明:
Burgess帮助构建了CF引擎,并且和SocketPlane一同工作了几个月。Burgess把这个问题比作,我们如何把工作负载推动到边缘(push the loads to the edges)。暴力模型可能看起来更有效率但是它们实际上很慢并且容易产生很多问题:
对于我们的问题,用社会模型打比方可能比用大脑模型要更恰当,因为在一个社会中,可以形成许多局部的“团体” ,这些“团体”之间可以在边界处进行微弱的交互,或者信息的交换。如果其中某一个连接失败,并没有必要把它与剩余的部分切断,它有一定的自治能力来重新配置并且适应。也没有必要把系统的每个部分之间都连通起来,这样的话,对于负载的处理和决策的制定就可能变成一个纯粹的暴力破解问题。
Docker很好地融入了SocketPlane提供的这种混合的网络模式。如果Docker的网络模式仅仅依赖于一个中央化的,“单一大脑”的方式,情况可能会变得很难处理。比如:一个服务器上有50台虚拟机,则一个集中式的SDN平台大约可以支持500个主机,每台主机上有50个虚拟机。如果每一个虚拟机上有5000个容器,你将怎样操作?在这种环境下,集中化的操作可能会变得难以实施。因此我们需要新的方法来应对网络行为的固有的变化,这种网络行为所发生的变化可能是由容器的数量增减或者挂载的数据卷增减所引起的。
Wills还指出了Docker的两个发展趋势:
- 资源密度:正如他的同事Brent Salisbury在上周所写的那样,操作系统正变得越来越碎片化。由于Docker相关技术的到来,资源的利用状况会发生变化,这将会改变应用在网络环境中的行为方式。现今,OS之间相互合并的趋势变得越来越强,或许最终会从客户端上消失。在一个有成百上千个主机的环境中,可能会有几千个容器运行在同一个物理服务器上,
- 数据重力:这个概念由Basho CTO Dave McCrory所提出,这个概念是指数据应该被看成是一种能够吸引更多其他事物的东西。更多的数据会吸引更多的服务和应用。随着搜集到的数据越来越多,不可避免的,我们需要更多的计算资源,需要更多的方式来调用服务。计算能力可能是流式的或者是集群式的,就像是在AWS Lambda中已经实现的那样。
Adrian Cockcroft在Dockercon Europe的演讲中也谈到了这一点:
SocketPlane把它们的解决方案称为 retro-SDN,控制层有一个逻辑可以填充到数据层。它符合flow tables 的要求。举例来说,当一个packet经过的时候,按照程序对其进行路由,允许为其进行动态的决策。VMware把这称为微分段(micro-segmentation),Willis说。它将每一个分段隔离,创建隧道。VLAN是一个在交换机上多租户的抽象。但是这个是基于硬件的解决方案。在云端,用户的计算资源并没有在某一个具体的服务器上,而是动态地分布在虚拟的网络中。这从更广泛的层面而言,就涉及到Willis如何定义他所说的叠加网络(overlay network),创建这样一个逻辑上的网络并不需要与任何物理交换机耦合,并且能很容易地进行修改,这些操作可以由控制层到数据层全部完成。这就是SDN所希望实现的。服务可以移动到数据层并且被操纵。在Github上,SocketPlane的叠加网络被这样描述:
叠加网络在主机端点之间建立起隧道,在我们的例子中,这些端点都是Open vSwitch。对于这样的场景,优势是用户不需要担心 子网/vlan 或者其他任何的第二层网络的使用限制。这只是我们提出的在网络中部署容器的其中一种方法。Open vSwitch的重要性在于网络的性能和一些用于高级网络配置的API。 |
Willis认为容器的使用可能会达到一个新的数量级,上千个容器可能在一个服务器上,这会引起很多的问题。随着微服务理念的发展,任何数量的服务都可能运行在容器上。这意味着以数据重力、资源密度等概念为理念的新的设计模式将会创建一个完全不同的方法来对计算资源进行分配。
新的准则可能是:计算资源只生存几分钟或者几秒。(“The norm may be compute living for minutes or maybe seconds.”) |
以后不再需要集中控制的网络。就像一个社会的组织形态。也没有必要去进行集中化的组织以专制的形式运行。我们需要考虑的是如何构建中心枢纽。我们看到在一些极客社区中,并没有一个人试图去掌握所有的知识,社区的知识深度更多的通过集体智慧的形式来体现。
这提供了一种不同的方法来看待我们的网络本身。它不是一个“单一大脑”的形式,更像是一个集中数据平台的网络,可以动态地进行决策。
或许这对我们而言,可以用一种不同的方式来思考底层基础设施,网络作为一个社区的形式并非是一个单一的个体,我们可以参考这种新的思路来构建新的系统。