这是一个软件设计问题

我曾经按照以下速度规则进行操作

cache memory > memory > disk > network


每步是5-10倍上一步(例如,缓存内存比主内存快10倍)。

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

在这个领域,任何人都没有经验/人数/建议吗?

是的,我知道找出答案的唯一真实方法是构建和测量,但是我想知道一般规则。

edit:

此是最有趣的数据:


同一数据中心内的往返500,000 ns
磁盘寻道10,000,000 ns

这对我来说是一个震惊;我的思维模型是网络往返本来就很慢。而且它不是-它比磁盘“往返”快10倍。

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

评论

有时是,有时不是。什么网络?什么磁盘?

最佳答案中的其他有趣数据:从网络与磁盘顺序读取1 MB。我怀疑“往返”时间会忽略任何重要的数据传输。

保罗:可以,取决于您的MTU。 (1MB MTU?太棒了!)

鉴于10Gbps网络设备广泛可用,我很乐意重新考虑其中的一些答案。

千兆网络vs突袭5?

#1 楼

以下是Google研究员Jeff Dean引用的您可能正在寻找的一些数字:





每个人都应该知道的数字

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





摘自他的演讲,题为《构建大型分布式系统的设计,教训和建议》,您可以在这里获得:



Jeff Dean博士主题演讲PDF或在slideshare.net


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

其他信息


Google Pro提示:使用后台信封计算来选择最佳设计
Stanford 295 Talk软件构建大型分布式系统的工程建议



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



评论


+1非常有趣!

– 9dan
2011-2-22在9:35

某些演示文稿的括号中显示了不同的值。我认为括号中的错误,并且他更新了值。

– David d C e Freitas
2011-2-22在12:56

这是所有前SSD时代吗?有关更多最新数字,请参见此处。

–马特
16年6月13日在19:26



实际上,我使用这些数字来构建演示文稿,以显示SSD驱动器为何物有所值,以说服我们的办公室经理,是的,我们需要更快的机器来工作。包括了技术信息的编号,但尽可能使其适用于非技术管理。

–白蛋白
17年4月14日在21:09

#2 楼

关于网络与磁盘,有很多变量,但是通常来说,磁盘速度更快。

SATA 3.0和SAS总线为6 Gbps,而网络为1 Gbps,减去协议开销。借助RAID-10 15k SAS,网络似乎变得很慢。此外,您还具有磁盘缓存以及固态硬盘驱动器的可能性,根据情况,这也可以提高速度。随机数据访问与顺序数据访问以及传输数据的块大小都起着重要的作用。这一切都取决于用于访问磁盘的应用程序。

现在,我什至都没有提到这样一个事实,无论您通过网络进行的传输是通过磁盘还是从磁盘进行。 ..so .......再次,磁盘速度更快。

评论


提到RAID的要点是可以并行读取,这是您不太可能很快在网络上获得的。当然,如果我们谈论的是本地笔记本电脑硬盘驱动器,那么快速SAN和快速网络的结合可能会更快。特别是该SAN中的SSD。

–迈克尔·狄龙(Michael Dillon)
2011-2-22在1:47

网络本质上是可并行化的-您在说什么?汇总读取网络上的多个系统非常简单。这就是Hadoop和MPI等系统背后的全部要点,更不用说显而易见的BitTorrent了。

– jgoldschrafe
2011-2-22在3:39



使用SONET / SDH,您可以拥有比SAS更快的38Gbps速度。网络聚合可以通过en.wikipedia.org/wiki/Link_aggregation之类的方法完成

– Mircea Vutcovici
2011-2-22在4:30



@Jake在谈到6 Gbps时,您可能希望在接口带宽和磁盘实际提供数据的速率之间进行明确区分。

– NPE
2011-2-22在9:28

我在我的问题中确实说过,我所说的是内存数据库中的远程与本地磁盘上的高速缓存相比

–pm100
2011-2-22在18:41

#3 楼

嗯,这取决于网络资源是否具有您所请求的数据(在内存中或类似数据中)随时可用,还是只是从磁盘读取它。在某些情况下吞吐量可能会更高,但我相信延迟会更高。

评论


您是说磁盘上的寻道时间大于10Gbit / s的请求?

– Mircea Vutcovici
2011-2-22在2:02



@Mircea,他的意思是10Gbit网络必须从某处获取数据,因此它将仅限于该源的延迟以及网络的延迟。

–克里斯S
2011-2-22在2:48

存储器可以是RAM磁盘。请参阅:en.wikipedia.org/wiki/Solid-state_drive#基于DRAM

– Mircea Vutcovici
2011-2-22在4:25

#4 楼

我的经验是,当您使用1Gbit连接并且尝试下载文件时,硬盘通常是瓶颈。不过,您要记住的一件事是,您必须首先建立连接,这也需要时间。因此,用于发送大块数据的网络实际上可能比磁盘快。

评论


除非磁盘也是网络连接另一端的瓶颈...

– Argote
2011-2-21在23:51

@Argote:是的,但是如果服务器软件编写正确,它将在写入磁盘之前缓冲到内存中。

–amphetamachine
2011-2-22在1:32

#5 楼

IMX磁盘仍然更快。网络的理论传输速率很高,但实际上您的传输速率还不高。

大约两年前,我的笔记本电脑出现了硬盘故障,DMA失灵了。这使硬盘驱动器显着变慢,尤其是比网络变慢。但是当我切换到另一台计算机时,我回到HDD的原始状态的速度比Internet快。

#6 楼

我在千兆位网络上的经验是,如果配备了正确的服务器,就吞吐量和延迟而言,您可以击败本地性能。请参阅网络测试:我们正在获得千兆位性能吗?

出于所有实际目的,我建议将网络和本地存储视为等效的,并且仅使用内存缓存。

标准提示提到的是正确的,因为没有通用规则;实际上,大多数时候应该使用配置良好的服务器,并使用度量标准来评估最佳的数据传输方法。

如果您使用的是低端计算机且硬盘速度慢,则几乎可以肯定,使用千兆位网络连接到具有快速存储阵列的服务器会更快。

同样,如果您正在使用两台硬件几乎相同的机器,则延迟和网络开销会使本地储存更快;真的是常识。

#7 楼

这取决于。如果您的I / O主要是随机访问,那么与可用的网络带宽相比,其固定吞吐量可能不会那么大。但是,大多数网络流量最终都是由涉及I / O的进程生成的。如果正在生成网络流量的任何进程的工作集都适合高速缓存,那么它将不受磁盘带宽的限制。如果它破坏了缓存,那么磁盘将成为瓶颈。

我在数据仓库系统上工作,规范的DW查询是表扫描。如果查询命中事实表(或分区)中百分之几的行,那么使用顺序I / O进行表或分区扫描将比使用索引查找和查找的随机访问查询计划更为有效。 >
除非对其进行适当的调整,否则网络存储(SAN)在流工作负载上往往表现不佳。如果将SAN用于通用合并环境,则几乎可以肯定地将其调整为次最佳状态,以适应数据仓库等流媒体,尖峰负载。我见过一个供应商白皮书建议,您需要大约3倍的磁盘数量才能在未针对流I / O进行调整的SAN上获得与未调整的吞吐量相同的SAN。

我的经验与此相吻合。实际上,我从未将数据仓库部署到无法在台式机上显着加快运行相同ETL流程的整合环境中。我还曾有一家主要的SAN设备供应商的销售代表说,由于SAN的速度不够快,他们的许多客户都将直接附加存储用于DW系统,这是有记录的。

对于随机访问工作负载,网络存储的每个IOPS成本比直接连接存储至少高一个数量级,而流传输的成本则高出近两个数量级。

#8 楼

是的,通常来说,网络现在比硬盘驱动器更快,但是随着时间的流逝,它可能会发生变化。

我认为,因此我是

当应用程序正在运行时意味着主机正在工作,而通过网络工作时则需要一个通用协议,检查对等方可用性,通道安全性...
如果对等方使用不同的平台,则很难在一台计算机上实现您的功能。

我宁愿权衡看待这个问题,而不是谁是最强的...

评论


我怀疑,因此我可能会。

–约翰·加迪尼尔
2011-2-22在2:49

#9 楼

您必须描述此比较的确切用例。硬盘具有寻道时间+传输速率和缓存。网络有延迟,传输速率和协议开销...

我认为您的原始缓存>内存>磁盘>网络在总体上仍然是正确的

#10 楼

磁盘通过SCSI,SAS或IDE总线与CPU连接。这是运行特定协议(SCSI或ATAPI)的内部网络。以太网被设计为在更长的距离上工作,并且可能比SAS / SCSI / IDE慢得多。因此,哪一种速度更快,取决于您比较的技术。如果将拥有20年历史的笔记本电脑硬盘与10Gbps RAM存储进行比较,赢家将永远是网络。而且,当您购买存储时,必须将其与价格和可管理性进行比较。

#11 楼

好吧,Light Peak的目标是100GBps的网络速度,已经接近RAM速度。当然,网络只能以发送方生成数据的速度传输数据,即,如果发送方正在从硬盘读取数据,则接收方将仅以与读取磁盘相同的速度获取数据,即使超高速网络。

#12 楼

要记住的一件事是,它取决于网络。举例来说,您要负责网站的性能。该网站当然是通过本地网络连接到数据库服务器,也通过互联网(也是一种网络)连接到网上冲浪者。

在许多情况下,专用链接可以通过静态IP和交叉电缆或automdx在Web服务器和数据库服务器之间建立网络,以降低延迟并为流量提供专用链接,因为您希望它非常快。数据库服务器会进行各种工作,以将尽可能多的db保留在内存中,并且在许多情况下,通常会成功获取全部内容以及一些索引。对这个数据库的查询将与对磁盘的查询一样快甚至更快。

另一方面,某些Web技术(asp.net webforms viewstate,我在看着你)就像来将大量信息作为缓存(往返)推送到客户端Web浏览器或从客户端Web浏览器推送。如果这是本地局域网连接(在asp.net Webform的辩护中多数时间是正确的),那还不算太坏,但是在公共Internet上这绝对可以破坏性能,因此您最好在推动此操作的同时更好而不是数据库或本地磁盘。

#13 楼

我个人认为有几个因素需要考虑。例如,您在本地访问的内存或磁盘与通过网络访问的内存或磁盘有多快?如果远程数据位于非常快的SSD上,并且比端到端安装的千兆网络更快,那么远程处理大型流文件的速度可能会更快。

但是,如果您随机访问少量数据和网络并非完美无缺,或者跳数很多,而且不仅仅是访问它,我敢打赌,即使在机械磁盘驱动器上,本地缓存的速度几乎也有100%更快。但是您提出了一个有趣的观点,如果网络速度继续增长,什么东西需要本地存储多长时间?