build立一个有大量内存的服务器的成本效益的方法

我有一个Java应用程序,其中可扩展性主要受RAM限制,我想运行在数据中心的一台或多台服务器上。 我应该在哪里寻找可容纳100GB-512GB或更多内存的服务器硬件? 我不是这方面的专家,所以我真的不知道从哪里开始。

这是进入超级计算机领域(6位数或更多),还是我可以获得这样一个低5位数美元的服务器?

基于以下几个问题的几个笔记:

  • 是的,我努力想办法消除这种可扩展性的要求,没有它不是一个真正的select。 该应用程序从根本上需要非常快速的随机访问大量的数据,存储在硬盘(也许通过数据库)不会削减它。
  • 我非常确定,至less在理论上,JVM可以扩展到那么多。 我经常使用分配给Sun 1.6 JVM的10GB代码运行代码,而不会出现明显的问题。

不寻常的要求有时会受益于不寻常的解决scheme 当然你可以给太阳,戴尔或惠普6个数字,并完成它,但它不是镇上唯一的游戏。

对于单盒解决scheme,即使使用价格低于1,000美元的自制主板,最高128GB的价格也非常便宜(32 x 4GB〜3.000美元)。 (不要嘲笑制作者,如果Google足够好的话…)

256GB更为昂贵(32x8GB〜18000美元),除此之外…

或者,您是否考虑过Infiniband(10Gbps)互连便宜盒?

你可以build立一个4节点,16个处理器(64核心),512GB的机器,并且从25000美元起仍然有变化。

如果您的应用程序可以在三台机器上运行,如果其中一台机器出现故障,您可能还会获得优雅性能下降的额外好处,并且可能会获得多达8个节点的线性扩展(仅增加4个节点)。 在这一点上, 你正在寻找一个很酷的128核心,1TB的RAM野兽<50,000美元

在您将Infiniband提案视为异国情调之前,请不要考虑您要求的机器types。 例如,前500名超级计算机中的141个是以这种方式构build的,其中包括前10名中的4个( http://top500.org/connfam/8

好吧,看。 你不会find一个你需要的那种内存占用的服务器,至less不是那个不需要自己的电网的服务器。

为什么不采取可扩展的方法,并使用memcached? 您可以将内存分散到整个networking的不同机器上。 数据永远不会碰到磁盘驱动器,而用你所谈论的钱购买那种超高速networking,延迟几乎不会成为问题。

这是一个Java的memcached客户端: http : //www.whalin.com/memcached/

以下是memcached的介绍,以防您不熟悉: http : //www.danga.com/memcached/

看看它。 这将比build立一个具有疯狂数量的RAM的单个怪兽机器更具成本效益。 此外,如果你正在做某些有这种要求的事情,那可能是关键任务,而且你不需要单点故障。

4个或8个插槽的Opteron服务器(如HP DL585或DL785或Sun X4600)可以占用128-256GB的大量内存。 虽然价格不便宜,但肯定不是六位数的价格标签; 一个8路32核心的Sun X4600,其256GB的内存在他们的网站上的价格约为35,000美元,这与这种types的系统相差无几。 您可能会发现,您可以使系统的价格略低于网站上显示的价格。

尽pipe4Gb DIMM是可用的,但它们倾向于以较高的价格进行支付,因此使用这些系统最多可能会更昂贵。

如果你想使用这种types的系统,你将需要一个64位的操作系统。 确保你也得到一个64位的JVM,并检查它与你的应用程序一起工作。

我不会重复硬件build议(这是正确的),但你可能想看看兵马俑,看看它是否适合你的应用程序。

http://www.terracotta.org/

绝对要小心哪种内存大小。 我们已经把一台惠普机器升级到了64GB(惠普表示这台机器可以用128GB),但是只有在增加了一个升级板,一个散热轴等(与惠普聊天之后)之后。
仅仅因为一台机器被指定占用n GB,这并不意味着它将在没有额外的改变的情况下工作。 在我们的例子中,并不是所有的普通内存模块都能工作,因为它们很热,只有特定的模块才能工作。

RAM的成本不能线性扩展到大尺寸。 仅仅因为我可以以15美元的价格购买1GB的DIMM,并不意味着我只能以1920美元的价格购买128GB的服务器……一开始,你不会find一个有128个DIMM插槽的主板。

超过一定的大小(〜8到16GB),您会发现主板需要完全缓冲DIMM(FB-DIMM),这比您的标准桌面内存每GB要贵得多。

我们经常使用内存为128GB的机器,近几年来这个价格已经下降很多了,但是我没有任何现有的数字……也没有任何关于JVM如何扩展到内存大小的经验。

您实际上有很多select,只是从HP列表中您可以获得128GB的BL680c刀片,其DL580 / 585可以占用256GB,DL785可以占用512GB。 IBM的一些产品可以达到256GB,戴尔也是如此。

我想你会开始在传统硬件上以64GB的速度遇到问题。 如果你可以从那里扩展,那么你就可以,但我的猜测是,更具成本效益的解决scheme是质疑你的架构。 诚然,我说,不知道你在做什么,但我只是把它扔在那里。

亚马逊的EC2解决scheme对你来说是否可行? 这当然是最具成本效益的解决scheme。

假设您可以将大量内存放入服务器(如果我没有弄错的话,标准硬件上的Linux限制为64GB,但我不确定)。

在大多数操作系统下,JVM被限制在1.4GB-1.6GB的堆空间,部分原因是因为需要连续的内存,部分是由于操作系统的限制。

因此,额外的RAM不会帮助您扩展一个应用程序,它只会让您运行应用程序的多个实例。 但是,您将需要多个内核并遇到各种其他问题。

你需要多less内存? 您可能能够find可以存储在内存中的数据库,或使用RAM驱动器,但是我不知道有一个JVM可以让您在内存中存储这些内容。

获得更多系统内存的一个典型方法是获得更多的系统。 如果内存真的是瓶颈,那么你的内存就不是那么多,而是你的数据与你的处理器的连接程度如何。 你需要扩展很多东西才能做到很好。

为了澄清,只需在系统内存中添加几个零就可能不会达到您想要的效果。 你会发现现在你的整个数据集都适合内存,甚至是更大的一块,你会遇到一些其他的瓶颈,比如caching失效。

扩展系统的正确方法是缓慢的。 如果你现在正在运行一个4核心系统,并且有8个ram,那么首先从你的应用程序中调出地狱,看看它真的在哪里花费时间,然后尝试碰撞12或16个ram,看看如何分析结果已经改变。

真正的问题是,为什么你需要大约100倍的系统内存相对于其他资源,而不是常见的。 如果您的数据访问模式在某种程度上是可预测的,那么您应该做的是增加磁盘带宽,几个带有多个条带磁盘的RAID控制器将实现这一点。

如果您的数据访问模式确实是随机的,那么可能有更好的优化algorithm的空间。

你可能需要一个专门的服务器。

尝试从Unisys看ES7000。 说明可能有点过时了。

它可以支持高达512GB的RAM。 它使用着名的O / S,如Windows和Linux Enterprise。

标准configuration将花费你大约30K美元,但是Itanium和所有的花里胡哨,可能会高达$ 60K。

有了这么多的RAM,你可以保留大量的热点数据,而不会触及磁盘空间。

您显然需要64位操作系统,但您不在超级计算机区域。 举个例子,戴尔的PowerEdge R900和R905可以使用256 GB内存,并使用普通的标准英特尔至强/ AMD Opteron处理器,并运行Linux,Solaris或Windows 2003和2008。

当然,直接在戴尔购买内存不是非常符合成本效益(他们想要35,000美元的32×8 GB,而你可以得到它约23,000美元,可能更less),但另一方面,你可能想如果你要购买一个4万美元的服务器(你不希望256GB的内存便宜,是吗?如果128GB也行,你可以节省约12,000美元)。

我没有任何经验select哪个操作系统,运行100 + GB的Java通常不是我所做的:)

一个完全即开即用的解决scheme如何:一个数据库。 我知道你说这会太慢,但这是基于什么托pipe它。 如何将其托pipe在足够的这些RAID0arrays上。

价格为400美元的小配件,Pricewatch列出的芯片价格为55美元(我没有检查兼容性),因此4GB的价格是440美元。 这就得到了32GB的840美元。 (该器件理论上可以使用8GB芯片,总共64GB,但尚未支持芯片。)

RAID0 4这些,你的范围的低端超过$ 3000 +一个普通的盒子。 他们中的16人以14000美元获得了你的射程。

这是否可用也归结于您的数据的性质 – 这些设备是不稳定的,并将在几个小时后耗尽备用电池,尽pipe它们可以备份到CF卡。

我是“许多便宜的服务器”方法的粉丝。 你有没有考虑过在Ubuntu 9.04上可用的Eucalyptus平台上运行这样的一个进程? 您可以在几台计算机上运行这种程序,这些计算机可以在多台运行8,16或32GB内存的服务器的专用千兆networking上以线性方式扩展,在需要时添加更便宜的服务器。

我确实已经阅读了您对应用程序性质的评论,但是您仍然可以考虑其他解决scheme。

FusionIO是一个真正的select。 只要看看 。 在10K $,它仍然比高端服务器便宜。 写入1.0 GB / s的带宽 – 听起来真的很疯狂。

当然,另一种select是固态硬盘。 以防万一您看到了英特尔®X25-E Extreme SSD的规格:

Read Latency 75 microseconds I/O Per Second (IOPS) Random 4 KB reads: >35,000 IOPS Random 4 KB writes: >3,300 IOPS Sustained sequential read: up to 250 MB/s Sustained sequential write: up to 170 MB/s 

把他们一堆进入RAID 10arrays可以给你足够的性能。 每32 GB 400美元,比其他高端服务器要便宜得多。

与FusionIO的build议类似,您可以获得让您将dynamicRAM挂接到SATA接口的设备。 就像这样 (我没有产品或公司的经验,这只是“Google购物”search的第一个选项)。

你可以使用其中的一些作为挂载的文件系统来使用你的应用程序的逻辑来caching数据(它是电池支持的,所以应该可以在启动和其他中断的情况下),或者你可以把它们用作交换空间,让内核使用它们来决定如何使用它们虽然OS内核通常是优化的,假设所有的交换位置比实际的RAM要慢几个数量级,而且要比实际的内存更大,那么你可能不得不调整它以充分利用这种安排)。

如果你真的需要一些大的东西,FusionIO的select将会是更好的价值,这种内存驱动可能是更好的妥协。 计算出主板上128Gb RAM的服务器和64Gb的64Gb的服务器的性能如何,可以直接比较支持256Gb或更高的专业服务器的价格和性能,我将其作为读者的练习。

事情发生3年后,事情变得更容易了。

我一直在寻找一些硅机械configuration。

最便宜的方法是使用32个dimms的 AMD平台- 512GB – 11.940 $ 。

一个替代scheme,但每GB更昂贵的是64平方英寸的Intel平台 – 1TB – 48.769 $ 。