原文链接:GridFTP: A Brief History of Fast File Transfer (globus.org)
原作者:John Bresnahan
GridFTP 如何成为科学界数据传输的事实标准
Globus 在科研生态系统中被广泛用于可靠、安全和高性能的数据传输。这项服务有两个关键方面:一个是管理这些传输的协调层,另一个是在源存储系统和目标存储系统之间传输数据的高性能协议 GridFTP。GridFTP 协议是 25 年前开发的,其设计和构建是为了在高度分布但又相互连接的系统间管理日益增长的科学数据量。在这篇博文中,我们将回顾 GridFTP 的发展历程,以及该系统作为科学数据移动的主力军所发挥的作用。
20 世纪 90 年代末,大量硬件资源上线,使网格计算成为必然的现实。重要的科学仪器在地理分布广泛的地区诞生。最典型的例子是欧洲核子研究中心的大型强子对撞机,但还有许多其他仪器,如阿贡国家实验室的先进光子源。这些仪器对全球广泛的科学研究至关重要(如今依然如此)。它们产生的数据量巨大,每月可达数百亿字节。在各个实验室和其他地方,还有强大的数据中心,能够处理 TB 级的数据。此外,在芝加哥伊利诺伊大学的CAVE等有限地点还设有图形中心,可以将处理过的数据可视化。
这些资源具有改变世界的潜在影响,比如(发现上帝粒子),它们提供了在海量数据中大海捞针的处理能力,以及加快人类理解结果的可视化系统。在大多数情况下,这些资源相隔数千英里,但却非常容易获取,这得益于另一项迅速崛起的技术:fast wide-area networks,,也称为Long Fat Networks或 LFN。
Courtesy
低频网络,如ESnet,以每秒千兆比特的线速连接全球实验室。这样,各机构就能以大大加快发现速度的速度向其计算农场提供数据。
虽然所有这些快速的硬件资源都是相互连接的,但它们之间的连接速度还勉强够快,没有周期可以浪费。我们缺少的是有效利用这些资源的软件,而 GridFTP 正是以接近线速在这些资源之间移动数据的解决方案。让我们来看看 GridFTP 是如何实现这一切的。
在科学研究场景中,一个典型的应用程序以流水线的形式运行(如下图所示)。首先,它调度一项任务,在源头收集原始数据。然后,它协调将数据传输到设备中进行处理。处理完成后,结果被发送到可视化中心。
需要注意的一个关键问题是,协调程序通常运行在一个与任何数据存储和处理系统都不同的系统上。它只需要提供指令和安排工作,而不需要看到数据在系统间移动的过程。事实上,它通常无法访问快速网络,因此通过该软件路由数据在性能上存在很大的劣势。
GridFTP 提供了 “third-party transfer” 的能力。third-party transfer(也称为托管文件传输或 MFT)现在已经是一个成熟的概念,也是当前 Globus 传输服务的基石,但在当时,情况还远非如此。我们需要设计一种解决方案,使协调程序可以联系数据的发送方和接收方,并向他们提供足够的信息,以便在协调程序看不到的情况下通过快速网络安全地传输数据。
毋庸置疑,数据传输必须安全可靠。传输的协调者必须安全地访问数据,确保未经授权的来源无法看到这些数据,最重要的是,确保目的地收到的数据与来源发送的数据相同。即使在数据并不敏感的情况下,数据在传输过程中不被坏人或故障系统篡改仍然至关重要。
第三方传输方法引入了一个注意事项:协调器安全地连接到源和目的地是众所周知的做法,但告诉发送方如何连接到接收方并代表协调器进行身份验证却并非如此。这就需要一个 “委托凭证”,协调者可以将其提供给发送者和接收者,其中包含足够的信息,以便他们可以向对方证明他们实际上是由协调者代表的。
在当时的技术水平下,连接计算站点的低频网络速度之快令人印象深刻(参见ESNet 功能时间表)。虽然速度很快,但只使用 50%、60% 甚至 80% 的带宽是不可接受的。应用程序需要全部带宽。性能是 GridFTP 最重要的设计要求。
此外,面对错误,可靠性也非常重要。网络本身就是有损的,即使是 GridFTP 的主要目标–非拥挤的科学网络。这种情况在广域网上更为严重,在低频网络上更是如此。
GridFTP 的作者以著名的FTP 协议 为起点。虽然 FTP 并不是一个被广泛使用的功能,但它能够通过使用双通道协议(将控制通道和数据通道分开)进行第三方传输。控制通道用于联系服务器并提出请求,而数据通道则用于传输所请求的数据。在大多数历史使用案例中,FTP 客户端会与服务器建立控制信道,请求向客户端发送文件,或由服务器接收文件,控制信道和数据信道使用相同的网络路径。不过,它们仍然是独立的通道,因此客户端完全可以建立两个控制通道,一个是源服务器通道,另一个是目标服务器通道,并指示它们在两者之间建立一个数据通道,如下图所示。
传统的 FTP 可以满足第三方传输的要求,但为了确保控制通道和数据通道的安全,仍然需要进行修改。在此不作详细讨论,只需说明控制通道被包裹在一个安全层中,一旦安全层建立,就可以将一个证书从客户端委托给每台服务器。然后,每一端的授权凭证可用于验证数据通道。
GridFTP 引入的最大变化是创建了一个新的数据通道协议。传统的 FTP 主要依赖于*流模式(Model S)*数据通道协议。数据流模式只是数据在其上流动的 TCP 通道。除了 TCP 提供的功能外,没有任何成帧或阻塞功能。虽然 TCP 过去是、现在仍然是大多数网络通信的骨干,但如果我们要设计高性能,这还有很多不足之处。
要理解 GridFTP 所带来的改进,在解释我们所做的设计选择之前,先从高层次理解一些 TCP 概念是很重要的。
流模式的最大问题在于,TCP 在设计时并没有考虑到高延迟网络。它也不是为了在不拥堵的网络上贪婪而设计的。TCP 的设计假设是,网络是许多活跃用户按需使用的资源,因此需要合作共享。GridFTP 所针对的网络是高延迟、不拥堵的网络。虽然它们是共享资源,但它们是专门为这些科学应用而设计的,因此,无论好坏,共享资源的优先级都比 TCP 低得多。
TCP 允许使用各种拥塞控制算法。这些算法使 TCP 能够在众多用户流之间公平地共享网络带宽。当时,TCP Reno 是应用最广泛的 TCP 拥塞控制算法。虽然它试图公平地共享网络,但实际上对高延迟的数据流非常不公平,比如那些穿越广域网或低频网络的数据流。
通过 TCP 发送数据的双方对连接它们的网络拓扑结构一无所知–有多少用户在争夺网络带宽更是个谜。因此,我们无法先验地了解数据的传输速度。如果发送方发送速度过快,网络将无法跟上,因此数据包将不得不被丢弃,然后重新传输,从而使传输速度变慢。另一方面,如果发送方速度太慢,网络资源就会闲置。
为了解决这个问题,TCP 采用窗口方式发送数据包。当数据流首次启动时,TCP 将发送一个数据包并等待确认(ACK)。收到后,它将发送两个数据包,并等待相应的 ACK。收到后,它会发送 4 个数据包,然后是 8 个,然后是 16 个,以此类推,以指数方式进行,直到丢失一个数据包(也称为拥塞事件)。当发生拥塞事件时,TCP 会假设找到了网络所能处理的最快传输速率,并保持这一速度。这就是所谓的 TCP 慢启动。
如果在 TCP 慢启动后发生拥塞事件,允许的窗口大小将减半,从而将传输速率降低一半。这里的假设是,数据包丢失是因为有其他人试图使用网络,但当前数据流占用了网络。因此,通过将线路速度减半,可以为其他数据流释放出合理的网络份额。此时,TCP Reno 会缓慢地增加窗口大小,每次增加一个数据包,直到遇到另一个拥塞事件,然后再次将窗口大小减半。这就是所谓的additive-increase-multiplicative-decrease (AIMD)。
上述过程是一种非常激进的后退和共享网络的方式。虽然它在互联网发展过程中异常有效,但对于 GridFTP 用例来说却远非理想,尤其是因为它对广域网不公平。
上图显示了在 1Gbps 网络上传输 2GB 文件的两个数据流。一个是延迟时间为 10 毫秒的局域网流量,另一个是延迟时间为 100 毫秒的广域网流量。这两个数据流是在不同时间模拟的,因此不会相互干扰。
从 x 轴上的 0 到大约 1,我们可以看到 TCP 慢启动算法。由于局域网中的往返时间比广域网中的往返时间短得多,我们可以看到局域网比广域网更快达到全速。不过,由于增长是指数式的,因此不会造成太大的影响。
再往下看 x 轴上的时间轴,我们会看到一个拥塞事件:流量都处于全速状态,丢失了一个数据包,然后降为半速。此时,广域网的损失更为明显。在这种情况下,数据包丢失并不是由于数据流长时间滞留造成的。要么是网络出现异常(这种情况在广域网上比局域网上更常见),要么是数据流太短。事件发生后,一半的网络再次开放供使用,两个数据流开始缓慢运行,每收到一个 ACK 就增加一个数据包的窗口大小。局域网在合理的时间内恢复到全速,但我们几乎看不到广域网的增长。这是因为广域网上每个 ACK 所需的时间是局域网的 10 倍。因此,对于广域网来说,加法增加的速度太慢,根本无法收回可用带宽。
GridFTP 专门针对广域网,因此需要克服 TCP 对广域网的固有偏见。与此同时,TCP 无处不在,而 GridFTP 则希望成为通用传输协议。为了使用 GridFTP,需要在操作系统内核中定制一个网络协议栈,这将给部署带来很大的障碍。因此,我们希望使用 TCP 作为基础可靠性层。
为了减轻广域网的影响,我们使用了一种称为并行流的技术。我们没有像流模式 S 那样使用单一 TCP 流,而是创建了模式 E(扩展块模式)。模式 E 允许发送方与接收方建立多个 TCP 连接。然后,发送方将根据可用性在每个数据流中发送数据块。虽然数据几乎总是通过相同的物理路径发送,但通过这种方式分割逻辑路径,可以减轻上述拥塞事件的影响。效果如下图所示。
Throughput of four
本图显示了四个并行数据流的吞吐量。顶部的绿线是四条数据流的总和,其他线条代表每条数据流的吞吐量。在第 10 秒左右,我们看到一个数据流发生了拥塞事件。虽然这个数据流遇到了挫折,但其他数据流并没有。由于我们将数据分散到不同的数据流中,因此传输的整体吞吐量受到的影响要小得多,约为单个数据流的 1/8。
这是并行数据流的一个重要优势,但不是唯一的优势。并行流还允许 GridFTP 通过并行加密每个流(参考文献)来利用多核机器,动态调整以适应流速度的差异,并更有效地利用并行文件系统。这是一个经过深入研究的课题,有兴趣的读者可以在 本文 等论文中阅读更多相关内容。
在 GridFTP 诞生后的几十年里,TCP 发生了很大的变化。GridFTP 采用了CUBIC 等拥塞控制算法,并将继续利用技术创新。
在这篇文章中,我们讨论了 GridFTP 的起源以及使其成为快速、安全和成功的传输协议的设计选择。该协议及其性能优势是提供高性能数据传输的关键支柱,而 Globus 传输服务则在该协议的基础上提供了新的功能,如安全数据共享和跨不同存储系统的统一接口。
更重要的是,它引入了fire-and-forget范式,让研究人员只需请求移动数据,而无需关心底层基础设施。将可靠性、性能优化和安全性外包给 Globus 服务,大大降低了使用此类高性能协议的门槛。Globus 不会止步于此,我们将继续打破阻碍科学研究和发现的数据管理障碍。随着远程计算和自动化等支持联合分布式工作流的最新功能的加入,Globus 将带来无限可能。