Kostengünstiger Weg, um einen Server mit viel RAM zu bauen

10

Ich habe eine Java-Anwendung, bei der die Skalierbarkeit hauptsächlich durch den Arbeitsspeicher eingeschränkt ist und die ich auf einem oder mehreren Servern in einem Rechenzentrum ausführen möchte. Wo sollte ich nach Serverhardware suchen, die 100 GB - 512 GB oder mehr RAM aufnehmen kann? Ich bin kein Experte in solchen Angelegenheiten, also weiß ich wirklich nicht, wo ich anfangen soll.

Kommt dies in das Gebiet der Supercomputer (6 oder mehr Ziffern) oder könnte ich einen solchen Server für niedrige 5-stellige Dollars bekommen?

Einige Anmerkungen zu den folgenden Fragen:

  • Ja, ich habe mich sehr bemüht, Möglichkeiten zu finden, um diese Skalierbarkeitsanforderung zu beseitigen, und nein, es ist nicht wirklich eine Option. Die Anwendung erfordert grundsätzlich einen sehr schnellen Direktzugriff auf sehr große Datenmengen. Das Speichern auf einer Festplatte (möglicherweise über eine Datenbank) schneidet sie nicht.
  • Ich bin mir ziemlich sicher, dass die JVM zumindest theoretisch so weit skalieren kann. Ich führe meinen Code regelmäßig mit 10 GB aus, die der Sun 1.6 JVM zugewiesen sind, ohne erkennbare Probleme.
geistige Gesundheit
quelle

Antworten:

6

Ungewöhnliche Anforderungen profitieren manchmal von ungewöhnlichen Lösungen. Natürlich können Sie Sun, Dell oder HP 6 Zahlen geben und damit fertig sein, aber es ist nicht das einzige Spiel in der Stadt.

Für Single-Box-Lösungen ist es sehr günstig, bis zu 128 GB zu erhalten (32 x 4 GB ~ 3.000 USD), selbst bei Homebrew-Motherboards, die weniger als 1.000 USD kosten. (Verspotten Sie nicht die Macher. Wenn es gut genug für Google ist ...)

256 GB sind erheblich teurer (32 x 8 GB ~ 18.000 USD) und darüber hinaus ...

Alternativ haben Sie Infiniband (10 Gbit / s) miteinander verbundene billige Boxen als Alternative in Betracht gezogen?

Auf diese Weise können Sie einen Computer mit 4 Knoten, 16 Prozessoren (64 Kerne) und 512 GB bauen und haben dennoch Änderungen von USD 25.000 vorgenommen.

Sie hätten außerdem die zusätzlichen Vorteile einer ordnungsgemäßen Verschlechterung, wenn Ihre Anwendung auf 3 Computern ausgeführt werden kann, wenn einer von ihnen ausfällt, und möglicherweise eine lineare Skalierung der Kosten von bis zu 8 Knoten erhalten (fügen Sie einfach 4 weitere Knoten hinzu). An diesem Punkt sehen Sie ein cooles 128-Kern-Biest mit 1 TB RAM für <USD 50.000 .

Bevor Sie den Infiniband-Vorschlag als exotisch abtun, gilt er nicht für den von Ihnen gewünschten Maschinentyp. zB 141 der Top 500 Supercomputer werden auf diese Weise gebaut, darunter 4 der Top 10 ( http://top500.org/connfam/8 )

Peter Stuer
quelle
Ich weiß nicht, ob Infiniband die richtige Lösung ist (ich habe keine Erfahrung damit), aber (2011) würde ich ein System mit Java mit 100 GB + RAM auf einem einzelnen Server als exotisch bezeichnen. Es ist Zeit, über exotische Lösungen nachzudenken.
Mike Miller
-1 für wirklich, wirklich irreführend. Die meisten Supercomputer in den Top500 verwenden InfiniBand, um Netzwerke mit geringer Latenz bereitzustellen, und nicht , um ein einziges kohärentes Bild über RDMA bereitzustellen - diese Verwendung ist wirklich exotisch. Um dies nutzen zu können, müssen Sie ein Single-System-Image oder ein vSMP-Produkt verwenden. Sie können hierfür beispielsweise Kerrighed oder OpenSSI verwenden. Diese Angebote basieren jedoch auf modifizierten Kerneln und können kein einzelnes Prozessabbild auf mehrere Knoten aufteilen. Nur ScaleMP, eine sehr teure Lösung, kann ein wirklich kohärentes Systemabbild über mehrere mit RDMA verbundene Server liefern.
Jgoldschrafe
3

Okay, schau. Sie werden keinen Server finden, der den gewünschten RAM-Platzbedarf hat, zumindest keinen, der kein eigenes Stromnetz benötigt.

Warum nicht einen skalierbaren Ansatz wählen und memcached verwenden? Sie können den Speicher auf verschiedene Computer im Netzwerk verteilen. Die Daten müssen niemals ein Festplattenlaufwerk berühren, und mit der Art von ultraschnellem Netzwerk, das Sie mit dem Geld kaufen können, über das Sie sprechen, wird die Latenz kaum ein Problem sein.

Hier ist ein Memcached-Client für Java: http://www.whalin.com/memcached/

Und hier ist eine Einführung in memcached, falls Sie nicht vertraut sind: http://www.danga.com/memcached/

Schau in Es hinein. Es wird viel kostengünstiger sein, als eine einzelne Monstermaschine mit einer wahnsinnigen Menge an RAM zu bauen. Außerdem ist es wahrscheinlich geschäftskritisch, wenn Sie etwas tun, das diese Anforderungen stellt, und Sie brauchen keinen einzigen Fehlerpunkt.

Matt Simmons
quelle
Gute Idee. Ich mag es fast mehr als meine eigene Idee.
Phuzion
Das ist Unsinn. Sandy Bridge, das letzte Woche in einem Serverteil gestartet wurde, kann in einem 1U-Serverpaket auf bis zu 768 GB skaliert werden. Wenn Sie bei Westmere-Teilen bleiben möchten, können Sie zwei IBM x3850 oder ähnliche Server über QPI-Verbindungen miteinander verbinden und mit weniger als 4000 Watt versorgen. (Dies entspricht dem Stromverbrauch von vier 2U-Servern im selben Rack.) Vermutlich bietet AMD auch in diesem Bereich einige wettbewerbsfähige Angebote.
Jgoldschrafe
4
@jgoldschrafe Dies wurde vor 3 Jahren gefragt (und beantwortet).
Matt Simmons
2

Opteron-Server mit 4 oder 8 Sockeln wie der HP DL585 oder DL785 oder der Sun X4600 können im Bereich von 128 bis 256 GB viel Speicher belegen. Obwohl sie nicht billig sind, sind sie sicherlich nicht in 6-stelligen Preisschildern; Ein 8-Wege-Sun X4600 mit 32 Kernen und 256 GB RAM kostet auf seiner Website rund 35.000 US-Dollar, und das ist ungefähr so ​​groß wie diese Art von System. Sie werden wahrscheinlich feststellen, dass Sie das System für etwas weniger als den auf der Website angegebenen Listenpreis erhalten können.

Obwohl 4-Gbit-DIMMs verfügbar sind, sind sie in der Regel mit einem hohen Preisaufschlag verbunden. Daher wäre es erheblich teurer, auf ein System zuzugreifen, das mit diesen maximal ausgelastet ist.

Wenn Sie ein System dieses Typs verwenden möchten, benötigen Sie ein 64-Bit-Betriebssystem. Stellen Sie sicher, dass Sie auch eine 64-Bit-JVM erhalten, und überprüfen Sie, ob diese mit Ihrer Anwendung gut funktioniert.

ConcernedOfTunbridgeWells
quelle
Ich denke, Sie meinen eine 64-Bit-JVM, keine 54-Bit-JVM: P
Tegbains
2

Ich werde die Hardware-Vorschläge (die Sound sind) nicht wiederholen, aber vielleicht möchten Sie sich Terracotta ansehen, um zu sehen, ob es für Ihre App passt.

http://www.terracotta.org/

Jauder Ho
quelle
2

Seien Sie absolut vorsichtig, welche RAM-Größen. Wir hatten eine HP-Maschine auf 64 GB skaliert (HP gab an, dass die Maschine 128 GB aufnehmen kann), jedoch nur nach dem Hinzufügen einer zusätzlichen Riser-Platine, einer Kühlwelle usw. (nach vielen Gesprächen mit HP).
Nur weil ein Computer bis zu n GB aufnehmen soll, bedeutet dies nicht, dass er ohne zusätzliche Änderungen funktioniert. In unserem Fall funktionierten nicht alle normalen Speichermodule, da sie zu heiß wurden, sondern nur sehr spezifische Module.

Shadok
quelle
1

Die RAM-Kosten lassen sich nicht linear auf große Größen skalieren. Nur weil ich ein 1-GB-DIMM für 15 US-Dollar kaufen kann, heißt das nicht, dass ich einen Server mit 128 GB für nur 1.920 US-Dollar bekommen kann. Zunächst einmal finden Sie kein Motherboard mit 128 DIMM-Steckplätzen.

Ab einer bestimmten Größe (~ 8 bis 16 GB) sehen Sie Motherboards, die vollständig gepufferte DIMMs (FB-DIMMs) benötigen , was Sie pro GB erheblich mehr kostet als Standard-Desktop-Speicher.

Wir verwenden regelmäßig Maschinen mit 128 GB Arbeitsspeicher, und der Preis ist in den letzten Jahren stark gesunken, aber ich habe keine aktuellen Zahlen ... und keine Erfahrung darüber, wie gut sich die JVM auf diese Speichergröße skalieren lässt .

Rob Walker
quelle
1

Sie haben tatsächlich viele Optionen, nur aus der HP-Liste haben Sie das BL680c-Blade, das 128 GB aufnehmen kann, das DL580 / 585, das 256 GB aufnehmen kann, und das DL785, das 512 GB aufnehmen kann. Einige von IBMs haben eine Größe von bis zu 256 GB, ebenso ein Dell.

Chopper3
quelle
0

Ich denke, Sie werden bei 64 GB auf herkömmlicher Hardware auf Headroom-Probleme stoßen. Wenn Sie von dort aus skalieren können, wären Sie in Ordnung, aber ich vermute, dass die weitaus kostengünstigere Lösung darin besteht, Ihre Architektur in Frage zu stellen. Zugegeben, ich sage das ohne zu wissen, was Sie tun, aber ich werfe das einfach da raus.


quelle
Leider gibt es keine einfache Möglichkeit, die RAM-Anforderungen zu umgehen, da die Anwendung einen sehr schnellen Direktzugriff auf große Datenmengen erfordert - das Speichern der Daten auf der Festplatte wird sie einfach nicht beeinträchtigen :-(
0

Wäre die EC2-Lösung von Amazon für Sie rentabel? Es wäre sicherlich die kostengünstigste Lösung.


quelle
Keine Angst - die maximale RAM-Größe, die ein EC2-Server unterstützen kann, beträgt 14 GB. Das letzte Mal habe ich es trotzdem überprüft.
0

Nehmen wir an, Sie könnten so viel Speicher in einen Server einbauen (wenn ich mich nicht irre, ist Linux auf Standardhardware auf 64 GB beschränkt, aber ich bin mir nicht sicher).

Unter den meisten Betriebssystemen ist die JVM auf einen Heap-Speicherplatz von etwa 1,4 bis 1,6 GB beschränkt, teilweise weil zusammenhängender Speicher erforderlich ist und teilweise aufgrund von Betriebssystembeschränkungen.

Ein zusätzlicher Arbeitsspeicher würde Ihnen daher nicht helfen, eine Anwendung zu skalieren, sondern nur mehrere Instanzen der Anwendung ausführen. Sie würden dann jedoch mehrere Kerne benötigen und auf verschiedene andere Probleme stoßen.

Wofür brauchst du so viel RAM? Möglicherweise können Sie Datenbanken finden, die im Speicher gespeichert werden können, oder ein RAM-Laufwerk verwenden, aber mir ist keine JVM bekannt, mit der Sie so viel Material im Speicher speichern können.


quelle
Ich bin mir ziemlich sicher, dass die JVM nicht auf einen Heap-Speicherplatz von 1,6 GB beschränkt ist. Ich führe sie regelmäßig mit 10 GB und mehr mit der JVM von Sun aus. Natürlich muss sie sich auf einem 64-Bit-Computer befinden.
Ich stimme dir nicht zu. Siehe: unixville.com/~moazam Und einige Fragen hier auf SO. Ich bin mir nicht sicher über 64-Bit-JVMs, AFAIK, die derzeit auf meinem 64-Bit-Mac nicht unterstützt werden, weiß nichts über 64-Bit-Linux / Win.
Ich verwende eine 64-Bit-JVM, tatsächlich verwende ich eine auf einem Mac. Apple hat vor einiger Zeit Java 1.6 für 64-Bit-Macs veröffentlicht.
Ich würde es nicht wissen, da Eclipse für mich nicht auf 1.6 läuft ... Aber ok, das akzeptiere ich. Was ist der maximale Arbeitsspeicher, den Sie auf Ihrem Computer installieren können?
Ich benutze 64-Bit-JVMS mit 16 GB Heaps die ganze Zeit
0

Ein typischer Weg, um mehr Systemspeicher zu erhalten, besteht darin, mehr Systeme zu erhalten. Wenn Speicher wirklich der Engpass ist, dann ist es nicht so sehr, wie viel Speicher Sie haben, sondern wie gut Ihre Daten mit Ihren Prozessoren verbunden sind. Sie müssen eine Menge Dinge skalieren, damit Sie viel Gutes tun.

Zur Verdeutlichung: Wenn Sie Ihrem Systemspeicher nur ein paar Nullen hinzufügen, wird dies wahrscheinlich nicht das tun, was Sie denken. Sie werden feststellen, dass jetzt, da Ihr gesamtes Dataset in den Speicher passt oder sogar ein etwas größerer Teil davon, ein anderer Engpass auftritt, z. B. die Ungültigmachung des Caches.

Der richtige Weg, um Ihr System zu skalieren, ist langsam. Wenn Sie derzeit beispielsweise auf einem 4-Kern-System mit 8 GB RAM arbeiten, profilieren Sie zuerst die Hölle aus Ihrer App, um zu sehen, wo wirklich Zeit verbracht wird, und versuchen Sie dann, bis zu 12 oder 16 GB RAM zu erreichen, und sehen Sie, wie Die Profilerstellungsergebnisse haben sich geändert.

Die eigentliche Frage ist, warum Sie im Vergleich zu anderen Ressourcen etwa das 100-fache des Systemspeichers benötigen als allgemein verfügbar. Wenn Ihr Datenzugriffsmuster in irgendeiner Weise vorhersehbar ist, sollten Sie die Festplattenbandbreite erhöhen. Dies erreichen mehrere RAID-Controller mit mehreren gestreiften Festplatten.

Wenn Ihr Datenzugriffsmuster wirklich, wirklich zufällig ist, gibt es wahrscheinlich Raum für einen besser optimierten Algorithmus.


quelle
0

Sie benötigen wahrscheinlich einen speziellen Server dafür.

Versuchen Sie, sich ES7000 von Unisys anzusehen. Die Beschreibung dort ist wahrscheinlich etwas veraltet.

Es kann bis zu 512 GB RAM unterstützen. Es verwendet bekannte Betriebssysteme wie Windows und Linux Enterprise.

Die Standardkonfiguration kostet ca. 30.000 US-Dollar, aber mit Itanium und allen Schnickschnack kann es bis zu 600.000 US-Dollar kosten.

Mit so viel RAM können Sie viele heiße Daten speichern, ohne den Speicherplatz zu berühren.

KOkon
quelle
0

Sie benötigen natürlich 64-Bit-Betriebssysteme, befinden sich jedoch nicht im Supercomputer-Gebiet. Die PowerEdge R900 und R905 von Dell sind beispielsweise mit 256 GB RAM erhältlich und verwenden Standard-Intel Xeon / AMD Opteron-Prozessoren sowie Linux, Solaris oder Windows 2003 und 2008.

Natürlich ist der Kauf von RAM direkt bei Dell nicht sehr kostengünstig (sie möchten ~ 35.000 US-Dollar für 32 x 8 GB, während Sie ihn bereits für etwa 23.000 US-Dollar erhalten können, möglicherweise weniger), aber andererseits möchten Sie vielleicht um sicherzustellen, dass Sie beim Kauf eines Servers mit 40.000 US-Dollar angemessenen Support haben (Sie haben nicht erwartet, dass 256 GB RAM billig sind, oder? Wenn 128 GB ebenfalls in Ordnung sind, können Sie ~ 12.000 US-Dollar sparen).

Ich habe keine Erfahrung mit dem Betriebssystem, das ich wählen soll. Das Ausführen von Java mit mehr als 100 GB ist normalerweise nichts, was ich mache :)

Michael Stum
quelle
0

Wie wäre es mit einer sofort einsatzbereiten Lösung: Eine Datenbank. Ich weiß, dass Sie gesagt haben, es wäre zu langsam, aber das hängt davon ab, was es hostet. Wie wäre es mit einem Hosting auf einem RAID0-Array von genug davon.

$ 400 für das Gadget, Pricewatch listet Chips bei $ 55 (ich habe die Kompatibilität nicht überprüft) für 4 GB auf, das sind also weitere $ 440 für den Speicher. Das bringt Ihnen 32 GB für 840 US-Dollar. (Das Gerät kann theoretisch 8 GB Chips für insgesamt 64 GB aufnehmen, es werden jedoch noch keine Chips unterstützt.)

RAID0 4 davon und Sie sind im unteren Bereich Ihres Bereichs für etwas mehr als $ 3000 + eine gewöhnliche Box. 16 von ihnen erhalten das obere Ende Ihrer Reichweite für 14.000 US-Dollar.

Ob dies verwendbar ist oder nicht, hängt auch von der Art Ihrer Daten ab. Diese Geräte sind flüchtig und verbrauchen ihre Backup-Batterie in wenigen Stunden, obwohl sie auf einer CF-Karte gesichert werden können.

Loren Pechtel
quelle
0

Ich bin ein großer Fan des Ansatzes "Viele billige Server". Haben Sie darüber nachgedacht, einen solchen Prozess möglicherweise auf der Eucalyptus-Plattform auszuführen, die unter Ubuntu 9.04 verfügbar ist? Es ist möglich, dass Sie diese Art von Programm über einige Computer in einem eigenen dedizierten Gigabit-Netzwerk mit mehreren Servern mit 8, 16 oder 32 GB RAM ausführen und linear skalieren können, um bei Bedarf günstigere Server hinzuzufügen.

Phuzion
quelle
0

Ich habe Ihren Kommentar zur Art Ihrer Bewerbung gelesen, aber Sie könnten dennoch alternative Lösungen in Betracht ziehen.

FusionIO ist eine echte Alternative. Schau mal rein . Mit 10.000 US-Dollar ist es immer noch viel billiger als ein High-End-Server. Schreibbandbreite von 1,0 GB / s - das klingt wirklich verrückt.

Eine andere Option ist natürlich SSD. Nur für den Fall, dass Sie die technischen Daten für Intel® X25-E Extreme SSD gesehen haben:

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

Wenn Sie ein paar davon in das Raid 10-Array einfügen, erhalten Sie genügend Leistung. Und mit USD 400 pro 32 GB ist es so viel billiger als alternative High-End-Server.

Taras Chuhay
quelle
0

Ähnlich wie beim FusionIO-Vorschlag können Sie Geräte erwerben, mit denen Sie dynamisches RAM an eine SATA-Schnittstelle anschließen können. So etwas wie diese (Ich habe keine Erfahrung mit dem Produkt oder Unternehmen, es ist nur die erste Option , die von einer „Google Shopping“ Suche herauskam).

Sie können einige davon als gemountete Dateisysteme verwenden, um Daten mithilfe der Logik Ihrer App zwischenzuspeichern (sie ist batteriegepuffert, um Boot- und andere Ausfälle zu überstehen), oder Sie können sie als Swap Space verwenden und den Kernel entscheiden lassen, wie sie verwendet werden sollen ( Da Betriebssystem-Kernel normalerweise optimiert werden, vorausgesetzt, alle Swap-Positionen sind um Größenordnungen langsamer und latenter als der echte RAM, müssen Sie sie wahrscheinlich erheblich optimieren, um eine solche Anordnung optimal nutzen zu können.

Die FusionIO-Option bietet ein besseres Preis-Leistungs-Verhältnis, wenn Sie wirklich etwas so Großes benötigen. Diese Art von RAM-Laufwerk ist möglicherweise besser als Kompromiss geeignet. Wenn ich herausfinde, wie gut ein Server mit 128 GB RAM auf dem Motherboard und einige davon mit den vollen 64 GB im Vergleich zu Preis und Leistung mit einem Spezialserver verglichen werden können, der 256 GB oder mehr direkt unterstützt, überlasse ich dies dem Leser als Übung!

David Spillett
quelle