Andromeda: Google 的网络虚拟化技术

我是怀着复杂的心情写这篇文章的,因为我们赶到大年三十的 SIGCOMM paper 因为与这个3月5日发表的演讲在架构上过于类似(事实上我们的 paper 里包含很多此演讲中没有提到的技术细节),被评审者认为 “nothing new”,只好撤回。要是 Google 晚两个月再发表他们的网络虚拟化技术多好啊!

这场演讲由 Google 网络技术总监 Amin Vahdat 发表于 Open Networking Summit 2014(视频链接),从概念上介绍了代号为 Andromeda 的 Google 网络虚拟化解决方案。

不为人知的云需求

关于云,众所周知的是按需计算。然而,很少为人所知的是,随着云规模的扩张,我们需要新的基础模型来应对规模扩展、软硬件故障、持续变化的网络拓扑,简化网络管理。一种服务即使达到 99.9% 的可用性也是很难的,更不要说 99.99% 的可用性,就连 Google 也只有少数服务能达到 99.999% 的可用性。高可用性需要架构、冗余等方面的专业知识。

对 Google 这么大的基础架构来说,存储、负载均衡、DoS 攻击防御等都不可能购买第三方的服务,只能靠自己开发,这当然需要很多专业知识。从 1G 到 10G 到 40G 再到 100G 的网络,从硬盘到 SSD 到内存的存储,并不是换用了新的硬件就能自动变得更快,要让这些新硬件发挥功力,需要专业人士的大量工作。Google 的关键经验是把这些专业知识做成公司内部的服务,在公司内共享。

Andromeda:网络系统作为服务

Andromeda 网络虚拟化是 Google 云平台的一个必要组件。从硬件到软件都需要软件定义的控制,包括服务质量、延迟、容错性。这种虚拟化的 SDN 是之前很少有人研究的。

CaptureCapture

如上图所示,三种颜色是三个客户,每个客户有一个虚拟网络。最下层的是 Google 的基础架构服务(如存储、负载均衡、DoS 防御)提供给每个客户,网络虚拟化需要为每个客户提供虚拟的负载均衡、DoS 防御、访问控制列表(ACL)、虚拟专用网络(VPN)等服务(Network Function Virtualization,NFV)。

Google 计划在全球投资 29 亿美元建造新数据中心。在 Google 的大型数据中心里能源的消耗可以比小型数据中心少两到三倍,即使这样在硬件的 2~5 年生命周期里,能源消耗的成本还是大于硬件本身消耗的成本。

CaptureCapture

为了降低用户与 Google 之间的几毫秒延迟,Google 在全球建设了大规模的 CDN 网络(如下图)。Google 还建设了世界上第一个大规模部署的 SDN 广域网络(发表在 SIGCOMM’13)。

CaptureCapture

Google 同时还是大数据处理方面软件创新的先驱(如下图)。

CaptureCapture

Google 需要把这些网络和软件方面的大型系统做成内部服务,提供给公司内的其他服务使用。包括 GFS、MapReduce、BigTable、Spanner、B4 SDN 在内的大型分布式系统都遵循了两点经验(当然 Andromeda 也不例外):

  • 逻辑上中心化或者层次化的控制层和 P2P 的数据层,胜过完全分布式的系统。
  • 水平可扩展性(增加机器)胜过垂直可扩展性(用更好的硬件)。

平衡计算、I/O 与网络

现在虚拟机的计算能力越来越强大,存储的带宽和延迟也越来越低(如下图)。Amdahl 1960 年代末提出了个并不为人熟知的定律:并行计算中每 1MHz 的计算需要 1Mbps 的 I/O。由于机械硬盘随机访问的缓慢,这条定律很难实现,也就逐渐被淡忘了。现代的 Flash 存储使之成为可能,但在云中虚拟机和存储并不是部署在同一台物理机器上,此时网络的带宽和延迟将成为瓶颈。Andromeda 的目标是构建一个计算、I/O 与网络平衡的系统,而不要让一种资源总是等待另一种资源。

CaptureCapture

如果我们想象上述 1000 台虚拟机接在一台虚拟的交换机上(数据中心里常用的 Clos 模型),相当于要构建一个 1000 口的虚拟网络。如何搭建这个高带宽、低延迟的虚拟网络,同时还要保证虚拟网络间的隔离,提供负载均衡、外部访问、虚拟机迁移、存储高可用性等功能?

软件定义网络(SDN)的最简单定义是区分控制层与数据层,使得控制层与数据层可以分别进化。控制层要运行在普通的服务器上而不需要专门的硬件。Andromeda 需要利用网卡、软件交换机、存储、包处理器(packet processor)、硬件交换机等多种网络组件实现隔离的、高性能的虚拟网络,以实现端到端的服务质量和可用性。

CaptureCapture

软件定义的虚拟网络带来的机会和挑战是逻辑上集中的网络管理,不能有不受中心控制的机器间通信协议,不能为“特殊作用”的网络组件开特例。网络中间件(middlebox)包括负载均衡、访问控制、防火墙、NAT、DoS 防御等,有的是有状态的,有的是无状态的;有的是软件实现的,有的是专门硬件,这些专门硬件有时是很难融入统一的全局模型的。Andromeda 需要在软件交换机和硬件包处理器间划分网络的虚拟功能。

实例1:网络中间件之链

设想我们需要下图所示的网络功能,一个包从虚拟机中出来之后,首先要经过防火墙,然后是限速,然后是记账,然后是路由,最后才会从物理网卡出去。

CaptureCapture

如果我们在主机里启动几个进程,分别负责这些功能,对于几百 Mbps 的流量也许没有问题。但如果需要接近线速甚至线速的性能,再考虑到延迟,就需要把上述数据通路用流水线的方式组织起来,如果一条流水线性能不够,还要拆成几条并行的流水线,每条流水线分担一定的负载。

还要考虑到局部性和流量特征,对有相同功能的网络组件,充分利用它们各自的特性,例如硬件防火墙性能高但规则的容量小,软件防火墙比较慢但规则的容量几乎是无穷的,就可以把热点规则“缓存”到硬件防火墙,而大部分较“冷”的规则放在软件防火墙里。

根据 Google 的测试,Andromeda 的性能是相当好的。基准测试是在同一台物理机器上用传统的全部基于软件、未经优化的网络虚拟化解决方案;Andromeda 指的是模拟实际部署的环境,即网络中间件与虚拟机不一定在同一台物理机器上;Andromeda Same Machine 是与基准测试对比的,假定网络中间件全部部署在虚拟化所在的物理机器上。

CaptureCapture

实例2:负载均衡

Google 搭建了廉价而高效的负载均衡系统。下图所示的 testbed 产生了 1M QPS(query per second)的请求,Google 负载均衡系统仅用 5 分钟就准备好了所需的网络资源(如建立中间件用的虚拟机),用 4 秒将这些流量切换过来,并在 120 秒后稳定下来了各网络组件的负载。整个过程的成本只需 10 美元。

CaptureCapture

小结

Andromeda 利用了 Google 在共享计算平台上实现高性能的超过10年的经验,使用逻辑上中心化的软件定义网络(SDN)控制各种网络组件,实现虚拟网络上端到端(end-to-end)的功能、服务质量(QoS)和高可用性,在提供隔离性的同时几乎没有性能损失。

遗憾的是,这场演讲主要是概念性的,没有透露很多技术细节,我们期待 Google 透露 Andromeda 的更多细节。