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.
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.
quelle
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.
quelle
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/
quelle
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.
quelle
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 .
quelle
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.
quelle
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
Wäre die EC2-Lösung von Amazon für Sie rentabel? Es wäre sicherlich die kostengünstigste Lösung.
quelle
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
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
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.
quelle
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 :)
quelle
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.
quelle
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.
quelle
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:
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.
quelle
Ä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!
quelle
3 Jahre nach dem Questio sind die Dinge viel einfacher.
Ich habe einige Siliconmechanics- Konfigurationen nachgeschlagen.
Der billigste Weg wäre, AMD-Plattformen mit 32 Dimms zu verwenden - 512 GB - 11.940 $ .
Eine Alternative, aber viel teurer pro GB ist eine Intel-Plattform mit 64 Dimms - 1 TB - 48,769 $ .
quelle