将数据放置在各个机架中如何有助于利用机架内聚合带宽> = 机架间带宽这一事实?

将数据放置在各个机架中如何有助于利用机架内聚合带宽> = 机架间带宽这一事实?

GFS 研究论文快照

它说(我在阅读研究论文及其评论后的解释)“机架间带宽低于聚合机架内带宽(不确定聚合是什么意思,这种比较没有多大意义)。因此,通过将数据放置在各个机架之间,客户端可以利用从各个轨道读取的总带宽。比如怎么做?这是我的疑问。如果将数据放置在各个机架中,如何利用机架内聚合带宽?

如果发生客户端必须发送数据的突变,则多个机架是不利的,因为数据必须传输更长的距离。”...

我不明白它试图表达的关于带宽的观点。有人能解释一下吗?为什么读取和写入会有所不同?我理解写入。由于您在距离=0 处写入,因此如果您必须在距离=1000 处写入,那么您的数据需要传输更长的距离。但为什么这对读取有益?

一些背景信息-:

Rack 表示 chunkserver 的集合(30-40)。

Chunkservers 是 64MB 块的集合。

Chunks 是 64KB 块的集合。

以下是 GFS 架构: GFS 架构

参考-:

  1. https://static.googleusercontent.com/media/research.google.com/en//archive/gfs-sosp2003.pdf
  2. https://www.cnblogs.com/fxjwind/archive/2012/07/17/2595494.html
  3. https://csjourney.com/google-file-system-paper-explained-summary-part-3/

其他来源-:

我在网上看到的一些解决方案手册中是这样写的:

简单来说,您有每个块的多个副本,因此您可以从任何地方读取其中一个,但需要在任何地方写入所有副本。

但在某些情况下,您需要长途跋涉并花费大量带宽才能读取数据,因为数据可能未到位。此外,这些系统中还存在一些可调一致性。您不能只从一个地方读取数据并将结果发送给客户端。您需要从多个地方读取数据。

另一个博客给出了这个例子,但尽管我熟悉本科网络课程,但我对此并不十分清楚:

假设机架中有 10 个块服务器,所有块服务器都配有 NVMe 驱动器,传输速度高达 3,200MB/s。总速度(同时从机架中的所有块服务器读取)将为 32,000MB/s。现在,如果机架间网络是 SFP+,那么只能传输 10Gbps,这低于总带宽。

这是单个机架的理想情况。假设集群有 10 个机架,整个网络都是 SFP+。那么客户端仍然只能以 10Gbps 的速度消耗,但通过将读取分散到所有机架中,平均每个机架的速度变为 1Gbps。此外,考虑到拓扑可能不均匀,并且对于此客户端来说,某些机架的延迟可能比其他机架更大,客户端可以选择延迟最低(论文中为“最近”)的机架来完成大部分读取。

另一篇博客写道:

数据副本越多,最大读取带宽就越大。但是,数据副本越多,写入带宽就越大。

GFS 中的带宽是什么?它是如何定义的?我认为带宽是一次可以从网络设备传输的数据量。看起来博客试图表达的是“从任何地方读取,从任何地方写入”的意思,但使用的带宽术语让我感到困惑。

另一篇博客文章写道:

通常,单个机架中的服务器将通过机架顶部交换机连接,该交换机连接到该机架中的每个服务器。机架中的服务器将能够以其接口的链路速度相互通信,并且所有服务器都可以同时进行通信。机架顶部交换机将使用高带宽连接进一步连接到核心交换机。核心交换机连接到每个其他机架顶部交换机。但通常,与核心交换机的连接链路速度将小于与机架中每个服务器的连接链路速度的总和。

其结果是,同一机架内服务器的可用带宽高于与机架外服务器通信的带宽。(这并不总是正确的。Facebook 构建网络时,机架间带宽与机架内带宽相同。这以牺牲能效为代价,提供了灵活性。)

它确实带来了核心、接入和分布层的三层设计原则概念。其中,核心交换机具有最佳速度。但聚合分布/接入交换机的速度也可能比核心交换机更快。那又怎么样,我不明白。

当我们将数据放在多个块中时,读取如何利用多次读取的聚合带宽(根据研究论文)?这对我来说没有多大意义,而且令人困惑。

答案1

聚合是指许多节点通过相对较少的机架间结构链路与许多其他远程节点进行通信。一般而言,在计算中,较短的距离和较少的跳数更容易实现高带宽。

现代以太网交换机当然非常快,但根本问题仍然存在。它也不限于核心、接入和分布层的网络概念。让我们将一个示例升级到 2022 速度。假设在披萨盒交换机中,有 48 × 25 Gb 服务器加上少量 100 Gb 上行链路。然而,直接连接到交换机的主机之间的 TB 总数超过了机架间带宽。这种节能超额认购是有回报的,因为大多数设计都具有一定的物理位置。数据库服务器可能与某些应用程序服务器位于同一机架中,延迟低且带宽便宜。

分布式横向扩展应用程序可以利用节点之间的总带宽,因为它们是点对点应用程序。想象一下 RAID 阵列,只不过不是存储设备,而是数据被多次复制并分布在许多计算节点上。

提高分布式系统的整体规模和可靠性最终意味着要超越一个机架的设备。有时会发生不好的事情,可能是两个电源都断电,一个机架出现故障。为了解决这个问题,理想情况下,分布式存储会将数据块的副本分布在多个机架上。然而,这会给通常有限的机架间带宽带来压力。

基础设施感知型分布式应用程序可以了解数据局部性和持久性要求。从多个本地节点读取数据以利用廉价带宽。写入其他机架中的节点,以确保数据能够经受住机架故障。与存储阵列如何一次从其所有成员磁盘或缓存读取数据相比,但为了持久性,最终需要将写入提交到慢速磁盘。

或者,您可以设计成机架间带宽与机架内带宽相同。硬件、电力和布线成本更高。不用担心跨机架条带化会使机架顶部交换机饱和。

相关内容