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.
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.
la source
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.
la source
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/
la source
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.
la source
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 .
la source
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.
la source
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
La solution EC2 d'Amazon serait-elle viable pour vous? Ce serait certainement la solution la plus rentable.
la source
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
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
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.
la source
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 :)
la source
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.
la source
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.
la source
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:
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.
la source
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!
la source
3 ans après la questio, les choses sont beaucoup plus faciles.
J'ai recherché certaines configurations de Siliconmechanics .
Le moyen le moins cher serait d'utiliser des plateformes AMD avec 32 dimms - 512 Go - 11.940 $ .
Une alternative, mais beaucoup plus chère par Go, est une plate-forme Intel avec 64 dimms - 1 To - 48,769 $ .
la source