网络现在比磁盘快吗?

pm1*_*100 146 performance io

这是一个软件设计问题

我曾经按照以下速度规则工作

cache memory > memory > disk > network
Run Code Online (Sandbox Code Playgroud)

每一步都是前一步的 5-10 倍(例如,高速缓存比主存储器快 10 倍)。

现在,似乎千兆以太网的延迟比本地磁盘少。因此,也许读取大型远程内存数据库的操作比本地磁盘读取快。对于像我这样的老前辈来说,这感觉就像异端邪说。(我只是花了一些时间在磁盘上构建本地缓存以避免必须进行网络往返 - 因此我的问题)

有人在这方面有任何经验/数字/建议吗?

是的,我知道唯一真正的方法是构建和测量,但我想知道一般规则。

编辑

这是来自顶级答案的有趣数据:

  • 同一数据中心内的往返 500,000 ns

  • 磁盘寻道 10,000,000 ns

这对我来说是一个冲击;我的心智模型是网络往返本质上是缓慢的。它不是 - 它比磁盘“往返”快 10 倍。

Jeff attwood 在http://blog.codinghorror.com/the-infinite-space-between-words/上发布了这个很好的博客

Dav*_*tas 155

以下是您可能正在寻找的一些数字,正如谷歌研究员杰夫迪恩所引用的那样:

每个人都应该知道的数字

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns
Run Code Online (Sandbox Code Playgroud)

它来自他的演讲,标题为“构建大型分布式系统的设计、经验教训和建议”,您可以在此处获取:

该演讲是在2009 年大规模分布式系统和中间件 (LADIS) 上进行的

其他信息


据说gcc -O4 会将您的代码通过电子邮件发送给 Jeff Dean 进行重写。


  • 这都是前SSD时代吗?请参阅[此处](https://gist.github.com/jboner/2841832)了解更多最新数字。 (3认同)

Jak*_*son 22

网络与磁盘之间存在很多变数,但总的来说,磁盘更快。

SATA 3.0 和 SAS 总线为 6 Gbps,而网络为 1Gbps 减去协议开销。使用 RAID-10 15k SAS,网络看起来会很慢。此外,您还拥有磁盘缓存以及固态硬盘的可能性,这取决于具体情况,也可以提高速度。随机与顺序数据访问以及传输数据的块大小都有影响。这一切都取决于用于访问磁盘的应用程序。

现在,我什至还没有提到这样一个事实,即无论您通过网络传输的任何内容都将到达或来自磁盘……所以……再说一次,磁盘速度更快。

  • 网络本质上是可并行化的——你在说什么?从网络上的多个系统中聚合读取数据非常简单;这是 Hadoop 和 MPI 等系统背后的全部要点,更不用说明显的 BitTorrent。 (13认同)
  • @Jake 在谈到 6 Gbps 时,您可能希望明确区分接口带宽和磁盘实际提供数据的速率。 (11认同)
  • 我确实在我的问题中说过,与本地磁盘缓存相比,我在谈论远程内存数据库 (4认同)
  • 使用 SONET/SDH,您可以获得比 SAS 还要快的 38Gbps。网络聚合可以通过类似 http://en.wikipedia.org/wiki/Link_aggregation 的方式完成 (2认同)

小智 11

嗯,这取决于网络资源是否具有您请求的数据随时可用(在内存中或类似的地方),或者它是否会反过来从磁盘读取它。

无论如何,在某些情况下吞吐量可能更高,但我相信延迟会更高。

  • @Mircea,他的意思是 10Gbit 网络必须从某个地方获取它的数据,因此它将被限制为该源的延迟以及网络的延迟。 (2认同)