我有一个 Java 应用程序,其可扩展性主要受 RAM 限制,我想在数据中心的一台或多台服务器上运行。我应该在哪里寻找可以容纳 100GB - 512GB 或更多 RAM 的服务器硬件?我不是这方面的专家,所以我真的不知道从哪里开始。
这是进入超级计算机领域(6 位数或更多),还是我可以以低 5 位数的价格获得这样的服务器?
基于以下一些问题的一些注释:
- 是的,我一直在努力想办法消除这种可扩展性要求,不,这不是一个真正的选择。该应用程序从根本上需要对大量数据进行非常快速的随机访问,存储在硬盘中(也许通过数据库)不会削减它。
- 我很确定 JVM 至少在理论上可以扩展到那么远。我经常使用分配给 Sun 1.6 JVM 的 10GB 运行我的代码,没有明显的问题。
不寻常的需求有时会从不寻常的解决方案中受益。当然,你可以给 Sun、Dell 或 HP 6 个数字并完成它,但它不是城里唯一的游戏。
对于单机解决方案,达到 128GB 非常便宜(32 x 4GB ~ 3.000 美元),即使使用成本低于 1.000 美元的自制主板也是如此。(不要嘲笑制造商。如果它对谷歌来说足够好......)
256GB 的价格要贵得多(32x8GB ~ 18.000 美元),除此之外......
或者,您是否考虑过 Infiniband (10Gbps) 互连廉价盒子作为替代方案?
你可以用这种方式构建一个 4 节点、16 个处理器(64 核)、512GB 的机器,但仍然有 25.000 美元起的变化。
此外,如果您的应用程序可以在其中一台发生故障的情况下在 3 台机器上运行,并且可能会在成本上线性扩展至 8 个节点(只需再添加 4 个节点),那么您还将获得优雅降级的额外好处。那时,您正在以低于 50.000 美元的价格购买一款酷炫的 128 核、1TB RAM 野兽。
在您将 Infiniband 提案视为异国情调之前,它不适用于您所要求的机器类型。例如,前 500 台超级计算机中有 141 台采用这种方式构建,包括前 10 名中的 4 台 ( http://top500.org/connfam/8 )
好吧,看。您不会找到具有您正在寻找的那种 RAM 占用空间的服务器,至少不会找到不需要自己的电网的服务器。
为什么不采用可扩展的方法,并使用 memcached?您可以将内存分散到网络上的不同机器上。数据永远不必接触磁盘驱动器,并且通过您可以用您所说的钱购买的那种超快速网络,延迟几乎不会成为问题。
这是一个用于 java 的 memcached 客户端:http: //www.whalin.com/memcached/
如果您不熟悉,这里是 memcached 的介绍:http ://www.danga.com/memcached/
了解更多。这将比构建具有大量 RAM 的单个怪物机器更具成本效益。此外,如果您正在做的事情有这种要求,它可能是关键任务,并且您不需要单点故障。
HP DL585 或 DL785 或 Sun X4600 等 4 或 8 插槽 Opteron 服务器可以占用 128-256GB 范围内的大量内存。尽管它们并不便宜,但它们肯定不会成为 6 位数的价格标签;一个 8 路、32 核、256GB RAM 的 Sun X4600 在他们的网站上标价约为 35,000 美元,这与这类系统的价格差不多。您可能会发现您可以以比网站上显示的标价略低的价格获得该系统。
尽管有 4Gb DIMM 可用,但它们的价格往往很高,因此升级到使用这些 DIMM 的系统会相当昂贵。
如果您想使用这种类型的系统,您将需要一个 64 位的操作系统。确保您还获得了 64 位 JVM,并检查它是否适用于您的应用程序。
我不会重复硬件建议(它们是合理的),但你可能想看看 Terracotta 看看它是否适合你的应用程序。
http://www.terracotta.org/
请绝对小心这样的 RAM 大小。我们已经将一台 HP 机器扩大到 64 GB(HP 表示这台机器可以占用 128 GB),但只是在添加了一个额外的转接板、一个冷却轴等之后(在与 HP 大量交谈之后)。
仅仅因为指定一台机器最多占用 n GB,这并不意味着它可以在没有额外更改的情况下工作。在我们的例子中,并不是所有的普通内存模块都能正常工作,因为它们变得很热,只有非常特定的模块才能工作。
RAM 的成本不会线性地扩展到大尺寸。仅仅因为我可以花 15 美元买一个 1GB DIMM 并不意味着我可以花 1,920 美元买一个 128GB 的服务器……一开始你不会找到一个有 128 个 DIMM 插槽的主板。
超过一定大小(~8 到 16GB)时,您会开始看到需要完全缓冲 DIMM(FB-DIMM)的主板,这将比标准台式机内存的每 GB 成本高得多。
我们经常使用具有 128GB 内存的机器,而且近年来价格已经下降了很长一段路,但我没有任何当前的数字……也没有任何关于 JVM 扩展到该内存大小的经验.
实际上,您有很多选择,仅从 HP 列表中可以看出,您的 BL680c 刀片可以占用 128GB,DL580/585 可以占用 256GB,DL785 可以占用 512GB。IBM 的一些高达 256GB,戴尔也是如此。
问题发生 3 年后,事情变得容易多了。
我一直在查找一些Siliconmechanics配置。
最便宜的方法是使用具有32 个调光器的 AMD 平台 - 512GB - 11.940$。
另一种选择,但每 GB 更昂贵的是具有 64 个调光器的英特尔平台 - 1TB - 48.769 美元。
我认为您将开始在传统硬件上遇到 64gb 的余量问题。如果你可以从那里向外扩展,你会没问题,但我的猜测是,更具成本效益的解决方案是质疑你的架构。当然,我说的是不知道你在做什么,但我只是把它扔在那里。
与 FusionIO 建议类似,您可以获得可让您将动态 RAM 连接到 SATA 接口的设备。像这样的东西(我对产品或公司没有经验,这只是“谷歌购物”搜索中的第一个选项)。
您可以使用其中的几个作为已挂载的文件系统来使用应用程序的逻辑来缓存数据(它由电池供电,因此应该能够在启动和其他中断中存活),或者您可以将它们用作交换空间并让内核使用决定如何使用它们(尽管通常假设所有交换位置都比实际 RAM 慢几个数量级且具有更多潜在性,因此 OS 内核通常会进行优化,那么这将是,您可能必须对其进行重大调整才能充分利用这种安排)。
如果你真的需要这么大的东西,FusionIO 选项会更物有所值,这种 RAM 驱动器作为折衷方案可能会更好。计算出在主板上具有 128Gb RAM 的服务器以及其中几个配备完整 64Gb 内存的服务器在价格和性能方面与直接支持 256Gb 或更高容量的专业服务器相比有多好,我将作为练习留给读者!