Un moyen rentable de créer un serveur avec beaucoup de RAM

10

J'ai une application Java où l'évolutivité est principalement limitée par la RAM, que je voudrais exécuter sur un ou plusieurs serveurs dans un centre de données. Où dois-je chercher du matériel serveur pouvant accueillir 100 Go - 512 Go ou plus de RAM? Je ne suis pas un expert en la matière, donc je ne sais vraiment pas par où commencer.

S'agit-il d'un territoire de supercalculateur (6 chiffres ou plus), ou pourrais-je obtenir un tel serveur pour de faibles dollars à 5 chiffres?

Quelques notes basées sur quelques questions ci-dessous:

  • Oui, j'ai essayé de réfléchir à des moyens de supprimer cette exigence d'évolutivité, et ce n'est pas vraiment une option. L'application nécessite fondamentalement un accès aléatoire très rapide à de très grandes quantités de données, le stockage sur un disque dur (via une base de données peut-être) ne le coupera pas.
  • Je suis à peu près sûr que la JVM peut, au moins en théorie, évoluer jusque-là. J'exécute régulièrement mon code avec 10 Go alloués à la JVM Sun 1.6 sans problèmes notables.
santé mentale
la source

Réponses:

6

Des exigences inhabituelles bénéficient parfois de solutions inhabituelles. Bien sûr, vous pouvez donner 6 chiffres à Sun, Dell ou HP et en finir, mais ce n'est pas le seul jeu en ville.

Pour les solutions à boîtier unique, obtenir jusqu'à 128 Go est très bon marché (32 x 4 Go ~ 3 000 USD), même avec des cartes mères homebrew qui coûtent moins de 1 000 USD. (ne vous moquez pas des créateurs. Si c'est assez bon pour Google ...)

256 Go est beaucoup plus cher (32 x 8 Go ~ 18 000 USD), et au-delà ...

Sinon, avez-vous envisagé des boîtiers bon marché interconnectés Infiniband (10 Gbit / s) comme alternative?

Vous pouvez construire une machine à 4 nœuds, 16 processeurs (64 cœurs) et 512 Go de cette façon et avoir encore des modifications à partir de 25 000 USD.

Vous auriez en outre les avantages supplémentaires d'une dégradation complète, si votre application peut s'exécuter sur 3 machines en cas de défaillance de l'une d'entre elles, et éventuellement obtenir une mise à l'échelle linéaire du coût jusqu'à 8 nœuds (il suffit d'ajouter 4 nœuds supplémentaires). À ce stade, vous regardez une bête RAM de 128 cœurs et 1 To pour <50 000 USD .

Avant de rejeter la proposition Infiniband comme exotique, ce n'est pas pour le type de machine que vous demandez. Par exemple, 141 des 500 premiers supercalculateurs sont construits de cette façon, dont 4 sur les 10 premiers ( http://top500.org/connfam/8 )

Peter Stuer
la source
Je ne sais pas si Infiniband est la bonne solution (je n'en ai aucune expérience), mais (en 2011) j'appellerais exotique un système exécutant Java avec 100 Go de RAM sur un seul serveur. Il est temps d'envisager des solutions exotiques.
Mike Miller
-1 pour être vraiment, vraiment trompeur. La plupart des superordinateurs du Top500 utilisent InfiniBand pour fournir un réseau à faible latence, pas pour fournir une seule image cohérente sur RDMA - cette utilisation est vraiment exotique. Pour utiliser cela, vous devez utiliser une image à système unique ou un produit vSMP. Bien que vous puissiez utiliser quelque chose comme Kerrighed ou OpenSSI pour cela, ces offres sont basées sur des noyaux modifiés et ne peuvent pas diviser une seule image de processus entre les nœuds. Seul ScaleMP, qui est une solution très coûteuse, peut fournir une véritable image système cohérente sur plusieurs serveurs connectés à RDMA.
jgoldschrafe
3

D'accord, regardez. Vous n'allez pas trouver un serveur qui a le type d'empreinte RAM que vous recherchez, du moins pas un qui ne nécessite pas son propre réseau électrique.

Pourquoi ne pas adopter une approche évolutive et utiliser memcached? Vous pouvez répartir la mémoire sur différentes machines sur le réseau. Les données ne doivent jamais toucher un lecteur de disque, et avec le type de réseau ultra-rapide que vous pouvez acheter avec l'argent dont vous parlez, la latence ne sera guère un problème.

Voici un client memcached pour java: http://www.whalin.com/memcached/

Et voici une introduction à memcached au cas où vous ne seriez pas familier: http://www.danga.com/memcached/

Regardez-y. Cela sera beaucoup plus rentable que de construire une seule machine monstre avec une quantité insensée de RAM. De plus, si vous faites quelque chose qui a ce genre d'exigence, c'est probablement essentiel à la mission, et vous n'avez pas besoin d'un seul point d'échec.

Matt Simmons
la source
Bonne idée. Je l'aime presque plus que ma propre idée.
phuzion
C'est absurde. Sandy Bridge, qui a été lancé la semaine dernière dans une partie serveur, peut évoluer jusqu'à 768 Go dans un package serveur 1U. Si vous cherchez à vous en tenir aux pièces Westmere, vous pouvez connecter deux serveurs IBM x3850 ou similaires ensemble via des liaisons QPI et les alimenter avec moins de 4000 watts. (C'est la même consommation d'énergie que quatre serveurs 2U dans le même espace de rack.) On peut supposer qu'AMD propose également des offres compétitives dans cet espace.
jgoldschrafe
4
@jgoldschrafe Cela a été demandé (et répondu) il y a 3 ans.
Matt Simmons
2

Les serveurs Opteron à 4 ou 8 sockets tels que le HP DL585 ou DL785 ou le Sun X4600 peuvent prendre de grandes quantités de mémoire dans la plage de 128 à 256 Go. Bien qu'ils ne soient pas bon marché, ils ne sont certainement pas dans les étiquettes de prix à 6 chiffres; Un Sun X4600 à 8 voies et 32 ​​cœurs avec 256 Go de listes de RAM à environ 35000 $ sur leur site Web, et c'est à peu près aussi gros que ce type de système. Vous constaterez probablement que vous pouvez obtenir le système pour un peu moins que le prix affiché sur le site Web.

Bien que des modules DIMM de 4 Go soient disponibles, ils ont tendance à coûter cher, de sorte que monter à un système optimisé avec ceux-ci serait considérablement plus cher.

Si vous souhaitez utiliser un système de ce type, vous aurez besoin d'un O / S 64 bits. Assurez-vous également d'obtenir une JVM 64 bits et vérifiez qu'elle fonctionne bien avec votre application.

ConcernedOfTunbridgeWells
la source
Je pense que vous voulez dire une JVM 64 bits, pas une JVM 54 bits: P
tegbains
2

Je ne répéterai pas les suggestions de matériel (qui sont saines) mais vous voudrez peut-être regarder Terracotta pour voir si cela convient à votre application.

http://www.terracotta.org/

Jauder Ho
la source
2

Faites absolument attention à ces tailles de RAM. Nous avions augmenté la taille d'une machine HP à 64 Go (HP a déclaré que la machine peut prendre 128 Go), mais seulement après avoir ajouté une carte de montage supplémentaire, un arbre de refroidissement, etc. (après avoir beaucoup discuté avec HP).
Uniquement parce qu'une machine est spécifiée pour prendre jusqu'à n Go, cela ne signifie pas qu'elle fonctionnera sans modifications supplémentaires. Dans notre cas, tous les modules de mémoire normaux ne fonctionnaient pas, car ils étaient trop chauds, seuls des modules très spécifiques fonctionnaient.

Shadok
la source
1

Le coût de la RAM ne s'adapte pas linéairement aux grandes tailles. Ce n'est pas parce que je peux acheter un DIMM 1 Go pour 15 $ que je peux obtenir un serveur avec 128 Go pour seulement 1 920 $ ... pour commencer, vous ne trouverez pas de carte mère avec 128 emplacements DIMM.

Au-dessus d'une certaine taille (~ 8 à 16 Go), vous commencez à voir des cartes mères nécessitant des modules DIMM entièrement tampons (FB-DIMM), ce qui vous coûtera considérablement plus par Go que la mémoire de bureau standard.

Nous utilisons régulièrement des machines avec 128 Go de mémoire et le prix a beaucoup baissé ces dernières années, mais je n'ai pas de chiffres actuels ... ni aucune expérience de la capacité de la JVM à s'adapter à cette taille de mémoire .

Rob Walker
la source
1

Vous avez en fait beaucoup d'options, juste à partir de la liste HP, vous avez leur lame BL680c qui peut prendre 128 Go, leurs DL580 / 585 peuvent prendre 256 Go et leur DL785 peut prendre 512 Go. Certains IBM vont jusqu'à 256 Go, tout comme Dell.

Chopper3
la source
0

Je pense que vous commencerez à rencontrer des problèmes de marge à 64 Go sur le matériel traditionnel. Si vous pouvez évoluer à partir de là, vous seriez d'accord, mais je suppose que la solution beaucoup plus rentable serait de remettre en question votre architecture. Certes, je dis cela sans savoir ce que vous faites, mais je ne fais que jeter cela là-bas.


la source
Malheureusement, il n'y a pas de moyen facile de contourner l'exigence de RAM, car l'application nécessite un accès aléatoire très rapide à de grandes quantités de données - le stockage des données sur le disque ne suffit pas :-(
0

La solution EC2 d'Amazon serait-elle viable pour vous? Ce serait certainement la solution la plus rentable.


la source
N'ayez pas peur - la quantité maximale de RAM qu'un serveur EC2 peut prendre en charge est de 14 Go, la dernière fois que j'ai vérifié de toute façon.
0

Disons que vous pouvez insérer autant de mémoire dans un serveur (si je ne me trompe pas, Linux sur le matériel standard est limité à 64 Go, mais je ne suis pas sûr).

Sous la plupart des systèmes d'exploitation, la machine virtuelle Java est limitée à un espace de stockage d'environ 1,4 Go à 1,6 Go, en partie parce que la mémoire contiguë est requise et en partie à cause des restrictions du système d'exploitation.

Par conséquent, une RAM supplémentaire ne vous aiderait pas à faire évoluer une application, elle vous permettrait uniquement d'exécuter plusieurs instances de l'application. Cependant, vous auriez alors besoin de plusieurs cœurs et rencontriez divers autres problèmes.

Pourquoi avez-vous besoin d'autant de RAM? Vous pouvez peut-être trouver des bases de données qui peuvent être stockées en mémoire ou utiliser un lecteur RAM, mais je ne connais pas de machine virtuelle Java qui vous permettrait de stocker autant de choses en mémoire.


la source
Je suis presque sûr que la JVM n'est pas limitée à un espace de tas de 1,6 Go, je l'exécute régulièrement avec 10 Go et plus avec la JVM de Sun, bien sûr, elle doit être sur une machine 64 bits.
Je ne suis pas d'accord. Voir: unixville.com/~moazam Et plusieurs questions ici sur SO. Je ne suis pas sûr des JVM 64 bits, AFAIK qui n'est pas pris en charge sur mon Mac 64 bits pour le moment, je ne connais pas Linux / Win 64 bits.
J'utilise une JVM 64 bits, en fait, j'en utilise une sur un Mac. Apple a publié Java 1.6 pour Mac 64 bits il y a un bon moment.
Je ne saurais pas, car Eclipse ne fonctionne pas sur 1.6 pour moi ... Mais ok, j'accepte cela. Quelle est la RAM maximale que vous pouvez mettre sur votre machine?
j'utilise jvms 64 bits avec 16 Go de tas tout le temps
0

Une façon typique d'obtenir plus de mémoire système consiste à obtenir plus de systèmes. Si la mémoire est vraiment le goulot d'étranglement, alors ce n'est pas tant la quantité de mémoire que vous avez, mais la qualité de la connexion de vos données à vos processeurs. Vous aurez besoin de faire évoluer beaucoup de choses pour que cela vous fasse beaucoup de bien.

Pour clarifier, le simple fait d'ajouter quelques zéros à la mémoire de votre système ne fera probablement pas ce que vous pensez qu'il fera. Ce que vous constaterez, c'est que maintenant que votre ensemble de données entier tient dans la mémoire, ou même une tranche légèrement plus grande de celui-ci, vous rencontrerez un autre goulot d'étranglement, comme l'invalidation du cache.

La bonne façon de faire évoluer votre système est lentement. Si vous utilisez actuellement, disons, un système à 4 cœurs avec 8 Go de RAM, commencez par dresser le profil de votre application pour voir où cela passe vraiment du temps, puis essayez d'augmenter jusqu'à 12 ou 16 Go de RAM et voyez comment les résultats du profilage ont changé.

La vraie question est, pourquoi auriez-vous besoin d'environ 100 fois la mémoire système, par rapport à d'autres ressources, que ce qui est couramment disponible. Si votre modèle d'accès aux données est en quelque sorte prévisible, ce que vous devriez faire est d'augmenter la bande passante du disque, plusieurs contrôleurs RAID avec plusieurs disques rayés y parviendront.

Si votre modèle d'accès aux données est vraiment, vraiment aléatoire, alors il y a probablement de la place pour un algorithme mieux optimisé.


la source
0

Vous avez probablement besoin d'un serveur spécialisé pour cela.

Essayez de regarder ES7000 d'Unisys. La description y est probablement un peu dépassée.

Il peut prendre en charge jusqu'à 512 Go de RAM. Il utilise des O / S bien connus, comme Windows et Linux Enterprise.

Cela vous coûtera ~ 30 000 $ pour la configuration standard, mais avec Itanium et toutes les cloches et les sifflets, cela pourrait aller jusqu'à ~ 600 000 $.

Avec autant de RAM, vous pouvez conserver beaucoup de données chaudes sans toucher à l'espace disque du tout.

KOkon
la source
0

Vous avez évidemment besoin de systèmes d'exploitation 64 bits, mais vous n'êtes pas dans le territoire du supercalculateur. À titre d'exemple, les PowerEdge R900 et R905 de Dell sont disponibles avec 256 Go de RAM et utilisent des processeurs Opteron standard Intel Xeon / AMD et exécutent Linux, Solaris ou Windows 2003 et 2008.

Bien sûr, acheter de la RAM directement chez Dell n'est pas très rentable (ils veulent environ 35 000 $ US pour 32 x 8 Go, alors que vous pouvez déjà l'obtenir pour environ 23 000 $ US, peut-être moins), mais d'un autre côté, vous voudrez peut-être pour vous assurer d'avoir un support approprié si vous achetez un serveur de 40000 $ US (vous ne vous attendiez pas à ce que 256 Go de RAM soient bon marché, n'est-ce pas? Si 128 Go sont également OK, vous pouvez économiser environ 12000 $ US).

Cependant, je n'ai aucune expérience sur le système d'exploitation à choisir, exécuter 100+ Go Java n'est généralement pas quelque chose que je fais :)

Michael Stum
la source
0

Que diriez-vous d'une solution complètement prête à l'emploi: une base de données. Je sais que vous avez dit que ce serait trop lent, mais cela dépend de ce qui l'héberge. Que diriez-vous de l'héberger sur une matrice RAID0 de suffisamment de ces derniers.

400 $ pour le gadget, Pricewatch répertorie les puces à 55 $ (je n'ai pas vérifié la compatibilité) pour 4 Go, c'est donc 440 $ de plus pour la mémoire. Cela vous donne 32 Go pour 840 $. (L'appareil peut en théorie prendre des puces de 8 Go pour un total de 64 Go, mais aucune puce n'est encore prise en charge.)

RAID0 4 de ceux-ci et vous êtes dans le bas de votre gamme pour un peu plus de 3000 $ + une boîte ordinaire. 16 d'entre eux obtiennent le haut de gamme pour 14 000 $.

Que ce soit utilisable ou non se résume également à la nature de vos données - ces appareils sont volatils et épuiseront leur batterie de secours en quelques heures bien qu'ils puissent sauvegarder sur une carte CF.

Loren Pechtel
la source
0

Je suis un grand fan de l'approche "de nombreux serveurs bon marché". Avez-vous envisagé de lancer ce type de processus sur la plate-forme Eucalyptus, disponible sur Ubuntu 9.04? Il est possible que vous puissiez exécuter ce type de programme sur quelques ordinateurs sur leur propre réseau gigabit dédié avec plusieurs serveurs exécutant 8, 16 ou 32 Go de RAM, et évoluer de manière linéaire, en ajoutant des serveurs moins chers lorsque vous en avez besoin.

phuzion
la source
0

J'ai lu votre commentaire sur la nature de votre candidature, mais vous pourriez néanmoins envisager des solutions alternatives.

FusionIO est une véritable alternative. Jetez un coup d'œil . À 10K $, il est encore beaucoup moins cher qu'un serveur haut de gamme. Écriture d'une bande passante de 1,0 Go / s - cela semble vraiment fou.

Une autre option est bien sûr le SSD. Juste au cas où vous auriez vu les spécifications du SSD Intel® X25-E Extreme:

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

En mettre un tas dans le tableau RAID 10 peut vous donner suffisamment de performances. Et avec 400 USD par 32 Go, c'est tellement moins cher que les serveurs alternatifs haut de gamme.

Taras Chuhay
la source
0

Dans le même esprit que la suggestion FusionIO, vous pouvez obtenir des périphériques qui vous permettent de connecter la RAM dynamique à une interface SATA. Quelque chose comme ça (je n'ai aucune expérience du produit ou de la société, ce n'est que la première option issue d'une recherche "Google Shopping").

Vous pouvez en utiliser deux en tant que systèmes de fichiers montés pour mettre en cache les données en utilisant la logique de votre application (elle est sauvegardée par batterie, donc elle devrait survivre au démarrage et à d'autres pannes) ou vous pouvez les utiliser comme espace d'échange et laisser le noyau utiliser décider comment les utiliser ( bien que les noyaux de système d'exploitation soient généralement optimisés en supposant que tous les emplacements de swap sont plus lents et plus latents que la RAM réelle, ce sera, vous devrez probablement l'ajuster considérablement pour tirer le meilleur parti d'un tel arrangement).

L'option FusionIO sera d'un meilleur rapport qualité / prix si vous avez vraiment besoin de quelque chose d'aussi gros, ce type de lecteur de RAM peut être meilleur comme compromis. Déterminer dans quelle mesure un serveur capable de 128 Go de RAM sur la carte mère et quelques-uns avec le 64 Go complet rempli compare le prix et les performances à un serveur spécialisé qui prend en charge 256 Go ou plus directement, je laisse un exercice au lecteur!

David Spillett
la source