构建具有大量RAM的服务器的经济有效方法


10

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

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

基于以下一些问题的一些注意事项:

  • 是的,我已经尽力思考消除此可伸缩性要求的方法,但并不是一个真正的选择。从根本上说,该应用程序需要对大量数据进行非常快速的随机访问,将其存储在硬盘中(也许是通过数据库)不会削减它。
  • 我很确定,至少从理论上讲,JVM可以扩展到这一程度。我定期将代码分配给Sun 1.6 JVM使用10GB来运行,而不会出现明显的问题。

Answers:


6

异常需求有时会从异常解决方案中受益。当然,您可以给Sun,Dell或HP提供6个数字并完成此操作,但这并不是市面上唯一的游戏。

对于单盒解决方案,即使使用价格低于1.000美元的自制主板,高达128GB的价格也非常便宜(32 x 4GB〜3.000美元)。(不要嘲笑制造商。如果对Google来说足够好了……)

256GB的价格更为昂贵(32x8GB〜18.000美元),除此之外...

另外,您是否考虑过将Infiniband(10Gbps)互连廉价盒子作为替代方案?

您可以以这种方式构建一个4节点,16处理器(64核),512GB的计算机,并且价格从$ 25.000起。

如果您的应用程序可以在3台计算机上运行(如果其中一台发生故障),并且可以在最多8个节点的成本上进行线性扩展(只需再添加4个节点),则您还将具有宽容降级的其他好处。那时,您正在寻找价格低于5万美元的128核,1TB RAM野兽

在您将Infiniband提案视为异国情调之前,它并不是针对您所要求的机器类型。例如,以这种方式构建了前500强超级计算机中的141台,包括前10强中的4台(http://top500.org/connfam/8


我不知道Infiniband是否是正确的解决方案(我对此没有经验),但是(在2011年)我将在单台服务器上将运行Java且具有100GB +内存的Java称为系统。现在是时候考虑异国情调的解决方案了。
Mike Miller

-1表示非常,非常误导。大多数在500强超级计算机中使用的InfiniBand提供低延迟的网络,超过RDMA提供一个单一的连贯的形象-那种用法真正的异国情调。要使用它,您需要使用单系统映像或vSMP产品。尽管您可以使用Kerrighed或OpenSSI之类的东西,但是这些产品基于修改后的内核,不能在节点之间拆分单个过程映像。只有ScaleMP(这是一种非常昂贵的解决方案)才能在连接多个RDMA的服务器之间提供真实一致的系统映像。
jgoldschrafe 2012年

3

好吧,看 您不会找到一台具有所需RAM占用空间的服务器,至少没有一台不需要自己的电网的服务器。

为什么不采用可扩展的方法并使用memcached?您可以将内存分布到整个网络的不同计算机上。数据永远不必接触磁盘驱动器,而且通过您可以用所谈论的钱来购买的那种超高速网络,延迟根本就不会成为问题。

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

如果您不熟悉,这里是memcached的简介:http : //www.danga.com/memcached/

了解更多。这将比构建带有大量RAM的单个怪物机器更具成本效益。此外,如果您要执行的工作具有此类要求,那么这可能是关键任务,并且您不需要单点故障。


好主意。我几乎比我自己的想法更喜欢它。
phuzion

废话 上周在服务器部分中启动的Sandy Bridge在1U服务器软件包中可扩展到768 GB。如果您希望使用Westmere部件,则可以通过QPI链接将两台IBM x3850或类似服务器连接在一起,并为它们提供小于4000瓦的功率。(这与在相同机架空间中的四台2U服务器的功耗相同。)大概AMD在此空间中也具有一些竞争优势。
jgoldschrafe 2012年

4
@jgoldschrafe这是3年前问过的(并回答了)。
马特·西蒙斯

2

4或8个插槽的Opteron服务器(例如HP DL585或DL785或Sun X4600)可以占用128-256GB范围内的大量内存。尽管它们并不便宜,但它们肯定不会成为6位数的价格标签;带有256GB RAM的8路32核Sun X4600在其网站上的售价约为35,000美元,这与此类系统的价格差不多。您可能会发现,以低于网站上标价的价格购买该系统。

尽管有可用的4Gb DIMM,但它们的价格往往较高,因此升级到最大容量的系统将要昂贵得多。

如果要使用这种类型的系统,则需要64位O / S。确保您还获得了64位JVM,并检查它与您的应用程序是否兼容。


我认为您的意思是64位JVM,而不是54位JVM:P
tegbains 2009年


2

绝对要注意哪种RAM大小。我们已经将一台HP机器扩展到64 GB(HP表示该机器可以占用128 GB),但是只有在添加了额外的提升板,冷却轴等之后(与HP进行了很多交谈之后)。
仅仅因为指定一台机器最多占用n GB内存,并不意味着它无需其他更改即可工作。在我们的案例中,并非所有正常的内存模块都能正常工作,因为它们变得很热,只有非常特殊的模块才能正常工作。


1

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

超过一定大小(约8至16GB)时,您会开始看到需要完全缓冲DIMM(FB-DIMM)的主板,与标准台式机内存相比,每GB的成本要高得多。

我们经常使用其中具有128GB内存的机器,并且价格在最近几年已经下降了很长一段时间,但是我目前没有任何数字……也没有关于JVM能够扩展到那种内存大小的经验。 。


1

实际上,您有很多选择,仅在HP列表中,您的BL680c刀片服务器就可以使用128GB,DL580 / 585的刀片服务器可以使用256GB,而DL785的刀片服务器可以使用512GB。IBM的某些容量最高可达256GB,一台Dell的容量也最高。


0

我认为您将开始在传统硬件上遇到64gb的净空问题。如果您可以从那里进行扩展,那您就可以了,但是我猜想,更具成本效益的解决方案将是质疑您的体系结构。当然,我说的是不知道您在做什么,但我只是把它扔在那里。


不幸的是,没有任何简单的方法可以解决RAM的需求,因为该应用程序需要非常快速地随机访问大量数据-将数据存储在磁盘上不会削减它:-(

0

亚马逊的EC2解决方案对您来说可行吗?当然,这将是最具成本效益的解决方案。


不怕-EC2服务器可以支持的最大RAM量为14GB,无论如何我还是上次检查过。

0

假设您可以在服务器中容纳这么多的内存(如果我没记错的话,标准硬件上的Linux限制为64GB,但我不确定)。

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

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

您需要那么多的RAM用于什么?您也许可以找到可以存储在内存中或使用RAM驱动器的数据库,但是我不知道可以让您在内存中存储这么多东西的JVM。


我非常确定JVM不会限制为1.6GB的堆空间,我会定期以10GB的空间运行它,并使用Sun的JVM来运行它,当然,它必须在64位计算机上运行。

我不同意。参见: unixville.com/~moazam有关SO的几个问题。我不确定64位JVM,目前我的64位mac上不支持AFAIK,也不知道64位Linux / Win。

我正在使用64位JVM,实际上,我在Mac上正在使用一个。苹果很早以前就发布了针对64位Mac的Java 1.6。

我不知道,因为Eclipse不能在我的1.6上运行...但是,好的,我接受。但是,您可以在计算机上放置的最大RAM是多少?

我一直使用带有16 GB堆的64位jvms

0

获取更多系统内存的典型方法是获取更多系统。如果内存确实是瓶颈,那么与其说拥有多少内存,不如说是数据与处理器之间的良好连接。您需要扩展很多东西,以使自己受益匪浅。

需要澄清的是,仅将两个零添加到系统内存中可能不会做您认为会做的事情。您会发现,既然整个数据集都可以容纳在内存中,甚至可以容纳更大的一部分,那么您将遇到其他瓶颈,例如缓存失效。

扩展系统的正确方法是缓慢的。例如,如果您当前正在运行具有8个内存的4核系统,请首先从应用程序中剖析地狱,以了解它真正花费的时间,然后尝试增加12或16个内存的内存,并了解如何分析结果已更改。

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

如果您的数据访问模式是非常随机的,那么可能存在更好的优化算法的空间。


0

您可能需要专门的服务器。

尝试查看Unisys的ES7000。那里的描述可能有点过时了。

它最多可支持512GB RAM。它使用Windows和Linux Enterprise等著名的O / S。

对于标准配置,这将花费您约3万美元,但是如果使用Itanium和所有花哨的功能,则可能需要花费约60万美元。

有了那么多的RAM,您可以保留大量的热数据,而完全不占用磁盘空间。


0

您显然需要64位操作系统,但您不在超级计算机领域。举例来说,戴尔的PowerEdge R900和R905配备256 GB RAM,并使用普通的标准Intel Xeon / AMD Opteron处理器,并运行Linux,Solaris或Windows 2003和2008。

当然,直接在Dell购买RAM并不是很划算(他们想要325,000 x 8GB的价格为35,000美元,而您已经可以以23,000美元的价格获得它,甚至可能更少),但是另一方面,您可能想要如果要购买40,000美元的服务器,可以确保获得适当的支持(您没想到256 GB的RAM会便宜吗?如果128 GB的容量还可以,您可以节省大约12,000美元)。

我没有选择哪种操作系统的经验,但是我通常不会运行100 GB以上的Java :)


0

完全现成的解决方案:数据库。我知道您说过这太慢了,但这是基于托管它的原因。如何将它们托管在足够多的RAID0阵列上。

价格为400美元的小工具,Pricewatch列出的价格为55美元的4GB芯片(我还没有检查兼容性),所以这又是440美元的内存。840美元即可获得32gb。(该设备理论上可以使用8gb芯片,总共64gb,但尚不支持任何芯片。)

RAID0 4,而您处于价格范围的低端,价格超过$ 3000 +一个普通包装盒。其中有16个以$ 14k的价格成为您价格范围的高端。

这是否可用还取决于数据的性质-这些设备易失性,尽管可以备份到CF卡,但它们会在几个小时内耗尽备用电池。


0

我是“许多廉价服务器”方法的忠实拥护者。您是否考虑过在Ubuntu 9.04上可用的Eucalyptus平台上运行这种过程?您可能会在自己专用的千兆网络上的几台计算机上运行这种程序,其中多台服务器运行8、16或32GB RAM,并以线性方式扩展,并在需要时添加更多廉价服务器。


0

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

FusionIO是一种真正的选择。看看吧。1万美元的价格仍然比高端服务器便宜得多。写入带宽为1.0 GB / s-听起来确实很疯狂。

当然,另一个选择是SSD。以防万一您已经看到了英特尔®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 10阵列可以为您提供足够的性能。每32 GB 400美元,比其他高端服务器便宜得多。


0

类似于FusionIO的建议,您可以获得的设备可以将动态RAM挂接到SATA接口。喜欢的东西,(我没有任何的产品或公司的经验,它只是来了一个“谷歌购物”搜索出来的第一个选项)。

您可以将其中几个用作已挂载的文件系统,以使用应用程序的逻辑来缓存数据(它由电池供电,因此应能在启动和其他中断情况下幸存),也可以将它们用作交换空间,并由内核使用来决定如何使用它们(尽管由于通常假设所有交换位置都比实际RAM慢得多且数量级更大,并且通常会优化OS内核,所以您可能必须对它进行重大调整才能最好地利用这种安排。

如果您确实需要大容量的东西,FusionIO选件将物有所值,作为一种妥协,这种RAM驱动器可能会更好。要弄清楚一个能够在主板上支持128Gb RAM的服务器以及其中几个配备完整的64Gb内存的服务器,在价格和性能方面都比不上直接支持256Gb或更高级的专业服务器,我留给读者练习!


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.