作者:Sanjay Ghemawat
          Howard Gobioff
          Shun-Tak Leung
翻译:tinyfool

3.2 数据流

为了提高网络的效率我们把数据流和控制流分开。控制流从客户机到主块然后再到所有二级副本的同时,数据顺序推送到一个精心选择的管道形式的块服务器链。我们的目标是完全利用每个机器的带宽,避免网络瓶颈和延迟过长的连接,最小化推送所有数据的耗时。

为了完全利用每个机器的带宽,数据顺序推送到一个块服务器链,而不是分布在其他的拓扑下(例如,树)。这样,每个机器的带宽就会完全用于尽快的传输数据,而不是分散在多个副本间。

为了避免网络瓶颈和延迟过长的连接,每个机器都把数据传送到在网络拓扑中最近的机器。假设客户推送数据到块服务器S1至S4。它把数据传送给最近的块服务器S1。S1把数据传递给S2到S4之间最近的机器S2。同样的,S2把数据传递给S3和S4之间更近的机器。我们的网络拓扑非常简单,简单到用IP地址就可以计算出节点的远近。

最后,我们利用在TCP连接上管道化数据传输来最小化延迟。块服务器一旦得到一些数据,马上开始传递它们。管道化对我们帮助极大,因为我们使用全双工连接的交换网络。马上发送数据不会降低接收的速度。没有网络拥塞的情况下,传送B字节的数据到R个副本的理想时间是 B/T+RL ,T是网络的吞吐量,L是两台机器传输字节的延迟。我们的网络连接是100Mbps(T),L远小于1ms。这样,1MB的数据理想情况下会在80ms左右分发出去。


<< 3.1 租约和变更顺序 | 3.3 原子性的记录追加 >>