Modo economico per costruire un server con molta RAM


10

Ho un'applicazione Java in cui la scalabilità è limitata principalmente dalla RAM, che vorrei eseguire su uno o più server in un datacenter. Dove devo cercare l'hardware del server in grado di supportare 100 GB - 512 GB o più di RAM? Non sono un esperto in tali questioni, quindi non so davvero da dove cominciare.

Sta entrando nel territorio del supercomputer (6 cifre o più) o potrei ottenere un server del genere per dollari a 5 cifre bassi?

Alcune note basate su alcune domande di seguito:

  • Sì, ho fatto del mio meglio per pensare a come rimuovere questo requisito di scalabilità e no, non è proprio un'opzione. L'applicazione richiede fondamentalmente un accesso casuale molto veloce a grandi quantità di dati, la memorizzazione su un disco rigido (forse tramite un database) non lo taglierà.
  • Sono abbastanza sicuro che la JVM possa, almeno in teoria, espandersi fino a quel punto. Eseguo regolarmente il mio codice con 10 GB assegnati al Sun 1.6 JVM senza problemi evidenti.

Risposte:


6

Requisiti insoliti a volte beneficiano di soluzioni insolite. Sicuramente puoi dare 6 cifre a Sun, Dell o HP e farcela, ma non è l'unico gioco in città.

Per le soluzioni a scatola singola, ottenere fino a 128 GB è molto economico (32 x 4 GB ~ 3.000 USD), anche con schede madri homebrew che costano meno di 1.000 USD. (Non deridere i produttori. Se è abbastanza buono per Google ...)

256 GB è molto più costoso (32x8 GB ~ 18.000 USD) e oltre ...

In alternativa, hai considerato le scatole economiche interconnesse Infiniband (10 Gbps) come alternativa?

In questo modo è possibile creare una macchina a 4 nodi, 16 processori (64 core), 512 GB e comunque cambiare da $ 25.000.

Avresti inoltre i vantaggi aggiuntivi di un grazioso degrado, se la tua applicazione può essere eseguita su 3 macchine in caso di errore di una di esse e possibilmente ottenere un ridimensionamento lineare del costo fino a 8 nodi (basta aggiungere altri 4 nodi). A quel punto stai guardando un fantastico 128 core, 1 TB RAM bestia per <USD 50.000 .

Prima di respingere la proposta Infiniband come esotica, non è per il tipo di macchina che stai chiedendo. ad esempio, 141 dei primi 500 supercomputer sono stati costruiti in questo modo, inclusi 4 dei primi 10 ( http://top500.org/connfam/8 )


Non so se Infiniband sia la soluzione giusta (non ne ho esperienza), ma (nel 2011) definirei esotico un sistema che esegue Java con 100 GB + RAM su un singolo server. È tempo di considerare soluzioni esotiche.
Mike Miller,

-1 per essere davvero, davvero fuorviante. La maggior parte dei supercomputer nella Top500 utilizza InfiniBand per fornire reti a bassa latenza, non per fornire un'unica immagine coerente su RDMA: l'utilizzo è davvero esotico. Per farne uso, è necessario utilizzare un'immagine a sistema singolo o un prodotto vSMP. Mentre puoi usare qualcosa come Kerrighed o OpenSSI per questo, queste offerte sono basate su kernel modificati e non possono dividere una singola immagine di processo su nodi. Solo ScaleMP, che è una soluzione molto costosa, può fornire un'immagine di sistema realmente coerente su più server connessi a RDMA.
jgoldschrafe,

3

Va bene, guarda. Non troverai un server con il tipo di footprint RAM che stai cercando, almeno non uno che non richiede una propria rete elettrica.

Perché non adottare un approccio scalabile e utilizzare memcached? È possibile distribuire la memoria su diversi computer attraverso la rete. I dati non devono mai toccare un'unità disco e con il tipo di rete ultraveloce che puoi acquistare con i soldi di cui stai parlando, la latenza non sarà affatto un problema.

Ecco un client memcached per java: http://www.whalin.com/memcached/

Ed ecco un'introduzione a memcached nel caso in cui non si abbia familiarità: http://www.danga.com/memcached/

Guardaci dentro. Sarà molto più conveniente rispetto alla costruzione di una singola macchina mostro con una quantità folle di RAM. Inoltre, se stai facendo qualcosa che ha quel tipo di requisito, è probabilmente mission-critical e non hai bisogno di un singolo punto di errore.


Buona idea. Mi piace quasi più della mia idea.
phuzion,

Questa è una sciocchezza. Sandy Bridge, che è stato lanciato la scorsa settimana in una parte server, può scalare fino a 768 GB in un pacchetto server 1U. Se stai cercando di attaccare con parti Westmere, puoi collegare due server IBM x3850 o simili insieme tramite collegamenti QPI e alimentarli con meno di 4000 watt. (È la stessa impronta energetica di quattro server 2U nello stesso spazio rack.) Presumibilmente AMD offre anche alcune offerte competitive in questo spazio.
jgoldschrafe,

4
@jgoldschrafe Questo è stato chiesto (e risposto) 3 anni fa.
Matt Simmons,

2

I server Opteron a 4 o 8 socket come HP DL585 o DL785 o Sun X4600 possono occupare grandi quantità di memoria nell'intervallo 128-256 GB. Sebbene non siano economici, non sono certamente in cartellini dei prezzi a 6 cifre; Un Sun X4600 a 32 core a 8 vie con 256 GB di elenchi RAM a circa $ 35.000 sul loro sito Web, ed è grande quanto questo tipo di sistema. Probabilmente scoprirai che puoi ottenere il sistema in modo leggermente inferiore al prezzo di listino mostrato sul sito web.

Sebbene siano disponibili moduli DIMM da 4 Gb, tendono ad avere un prezzo elevato, quindi salire su un sistema al massimo con questi sarebbe considerevolmente più costoso.

Se si desidera utilizzare un sistema di questo tipo, sarà necessario un O / S a 64 bit. Assicurati di ottenere anche una JVM a 64 bit e verifica che funzioni correttamente con la tua applicazione.


Penso che intendi una JVM a 64 bit, non una JVM a 54 bit: P
tegbains,


2

Prestare attenzione a quali dimensioni di RAM. Avevamo ridimensionato una macchina HP a 64 GB (HP ha dichiarato che la macchina può richiedere 128 GB), ma solo dopo aver aggiunto una scheda di montaggio aggiuntiva, un albero di raffreddamento e così via (dopo molte chat con HP).
Solo perché si specifica che una macchina impiega fino a n GB, ciò non significa che funzionerà senza ulteriori modifiche. Nel nostro caso, non tutti i normali moduli di memoria funzionavano, perché arrivavano a caldo, funzionavano solo moduli molto specifici.


1

Il costo della RAM non si ridimensiona linearmente a grandi dimensioni. Solo perché posso acquistare un DIMM da 1 GB per $ 15 non significa che posso ottenere un server con 128 GB per soli $ 1.920 ... per cominciare non troverai una scheda madre con 128 slot DIMM.

Oltre una certa dimensione (da ~ 8 a 16 GB) inizi a vedere le schede madri che richiedono DIMM (FB-DIMM) con buffer completo, che ti costeranno notevolmente di più per GB rispetto alla memoria desktop standard.

Usiamo regolarmente macchine con 128 GB di memoria al loro interno e il prezzo è sceso molto negli ultimi anni, ma non ho numeri attuali ... né alcuna esperienza su come la JVM si ridimensionerebbe a quella dimensione di memoria .


1

In realtà hai molte opzioni, solo dall'elenco HP hai il loro blade BL680c che può richiedere 128 GB, i loro DL580 / 585 possono richiedere 256 GB e il loro DL785 può richiedere 512 GB. Alcuni IBM arrivano fino a 256 GB, così come uno Dell.


0

Penso che inizierai a riscontrare problemi di headroom a 64 GB su hardware tradizionale. Se riesci a scalare da lì, andrebbe bene, ma la mia ipotesi è che la soluzione molto più conveniente sarebbe mettere in discussione la tua architettura. Certo, lo dico senza sapere cosa stai facendo, ma lo sto solo lanciando.


Sfortunatamente non esiste un modo semplice per aggirare il requisito di RAM, poiché l'applicazione richiede un accesso casuale molto veloce a grandi quantità di dati - la memorizzazione dei dati sul disco non li taglierà :-(

0

La soluzione EC2 di Amazon sarebbe praticabile per te? Sarebbe sicuramente la soluzione più economica.


Niente paura: la quantità massima di RAM supportata da un server EC2 è di 14 GB, l'ultima volta che ho controllato comunque.

0

Diciamo che potresti adattare tutta la memoria in un server (se non sbaglio, Linux su hardware standard è limitato a 64 GB, ma non ne sono sicuro).

Nella maggior parte dei sistemi operativi, JVM è limitato a uno spazio heap di circa 1,4 GB-1,6 GB, in parte perché è richiesta memoria contigua e in parte a causa delle restrizioni del sistema operativo.

Quindi, una RAM aggiuntiva non ti aiuterebbe a scalare un'applicazione, ti permetterebbe solo di eseguire più istanze dell'applicazione. Tuttavia, è necessario disporre di più core e incorrere in vari altri problemi.

Per cosa hai bisogno di tanta RAM? Potresti essere in grado di trovare database che possono essere archiviati in memoria o utilizzare un'unità RAM, ma non sono a conoscenza di una JVM che ti permetterebbe di archiviare così tanta roba in memoria.


Sono abbastanza sicuro che JVM non sia limitato a uno spazio heap di 1,6 GB, lo eseguo regolarmente con 10 GB e altro con JVM di Sun, ovviamente deve essere su una macchina a 64 bit.

Non sono d'accordo. Vedi: unixville.com/~moazam E diverse domande qui su SO. Non sono sicuro delle JVM a 64 bit, AFAIK che al momento non è supportato sul mio mac a 64 bit, non conosco Linux / Win a 64 bit.

Sto usando un JVM a 64 bit, infatti, ne sto usando uno su un Mac. Apple ha rilasciato Java 1.6 per Mac a 64 bit un po 'di tempo fa.

Non lo saprei, dato che Eclipse non funziona su 1.6 per me ... Ma ok, lo accetto. Qual è la RAM massima che puoi mettere sulla tua macchina?

uso jvms a 64 bit con heap da 16 GB in ogni momento

0

Un modo tipico per ottenere più memoria di sistema è ottenere più sistemi. Se la memoria è davvero il collo di bottiglia, non è tanto quanta memoria hai, ma quanto sono ben collegati i tuoi dati ai processori. Dovrai scalare un sacco di cose affinché ciò ti faccia molto bene.

Per chiarire, aggiungere semplicemente un paio di zeri alla memoria del sistema probabilmente non farà ciò che pensi che farà. Quello che troverai è che ora che l'intero set di dati si adatta alla memoria, o anche una porzione leggermente più grande di esso, ti imbatterai in qualche altro collo di bottiglia, come l'invalidazione della cache.

Il modo corretto di ridimensionare il sistema è lentamente. Se stai correndo, per esempio, su un sistema a 4 core con 8 concerti di ram, prima fai un profilo infernale dalla tua app per vedere dove sta davvero passando del tempo, quindi prova a imbatterti in 12 o 16 concerti di ram e scopri come i risultati della profilazione sono cambiati.

La vera domanda è: perché avresti bisogno di circa 100 volte la memoria di sistema, rispetto ad altre risorse, rispetto a ciò che è comunemente disponibile. Se il tuo modello di accesso ai dati è in qualche modo prevedibile, quello che dovresti fare è aumentare la larghezza di banda del disco, diversi controller raid con diversi dischi con striping raggiungeranno questo obiettivo.

Se il tuo modello di accesso ai dati è davvero, davvero casuale, allora probabilmente c'è spazio per un algoritmo meglio ottimizzato.


0

Probabilmente avrai bisogno di un server specializzato per questo.

Prova a guardare ES7000 da Unisys. La descrizione è probabilmente un po 'datata.

Può supportare fino a 512 GB di RAM. Sta usando O / S ben noti, come Windows e Linux Enterprise.

Ti costerà ~ $ 30K per la configurazione standard, ma con Itanium e tutte le campane e fischietti, potrebbe arrivare a ~ $ 600K.

Con così tanta RAM, puoi conservare molti hot-data senza toccare lo spazio su disco.


0

Ovviamente hai bisogno di sistemi operativi a 64 bit, ma non sei nel Supercomputer Territory. Ad esempio, PowerEdge R900 e R905 di Dell sono disponibili con 256 GB di RAM e utilizzano processori Intel Xeon / AMD Opteron standard ed eseguono Linux, Solaris o Windows 2003 e 2008.

Naturalmente, l'acquisto di RAM direttamente su Dell non è molto conveniente (vogliono ~ 35.000 US $ per 32 x 8 GB, mentre puoi già averlo per circa 23.000 US $, forse meno), ma d'altra parte potresti volere per assicurarti di avere un supporto adeguato se stai acquistando un server da 40.000 US $ (non ti aspettavi che 256 GB di RAM fossero economici, vero? Se anche 128 GB sono OK, puoi risparmiare ~ 12.000 US $).

Non ho esperienza su quale sistema operativo scegliere, eseguire Java con oltre 100 GB di solito non è qualcosa che faccio :)


0

Che ne dite di una soluzione completamente pronta all'uso: un database. So che hai detto che sarebbe troppo lento ma che si basa su ciò che lo ospita. Che ne dici di ospitarlo su un array RAID0 di abbastanza di questi.

$ 400 per il gadget, Pricewatch elenca i chip a $ 55 (non ho verificato la compatibilità) per 4 GB, quindi altri $ 440 per la memoria. Questo ti dà 32 GB per $ 840. (In teoria il dispositivo può prendere chip da 8 GB per un totale di 64 GB ma nessun chip è ancora supportato.)

RAID0 4 di questi e sei nella fascia bassa del tuo range per poco più di $ 3000 + una scatola ordinaria. 16 di loro ottengono il massimo del tuo range per $ 14k.

Il fatto che sia utilizzabile o meno dipende anche dalla natura dei tuoi dati: questi dispositivi sono volatili e si esauriscono la batteria di backup in poche ore, anche se possono eseguire il backup su una scheda CF.


0

Sono un grande fan dell'approccio "molti server economici". Hai esaminato forse l'esecuzione di questo tipo di processo sulla piattaforma Eucalyptus, disponibile su Ubuntu 9.04? È possibile che tu possa eseguire questo tipo di programma su alcuni computer sulla propria rete gigabit dedicata con più server che eseguono 8, 16 o 32 GB di RAM e scalare in modo lineare, aggiungendo server più economici quando ne hai bisogno.


0

Ho letto il tuo commento sulla natura della tua domanda, ma potresti prendere in considerazione soluzioni alternative.

FusionIO è una vera alternativa. Dai un'occhiata . A 10K $ è ancora molto più economico del server di fascia alta. Scrivi una larghezza di banda di 1,0 GB / s - che sembra davvero folle.

Un'altra opzione è SSD, ovviamente. Nel caso abbiate visto le specifiche per 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

Metterne un mucchio in array raid 10 può darti prestazioni sufficienti. E con 400 USD per 32 GB, è molto più economico dei server di fascia alta alternativi.


0

Analogamente al suggerimento FusionIO, è possibile ottenere dispositivi che consentono di collegare la RAM dinamica a un'interfaccia SATA. Qualcosa di simile a questo (non ho esperienza del prodotto o azienda, è solo la prima opzione che è venuto fuori di una ricerca "Google Shopping").

Potresti usare un paio di questi come filesystem montati per memorizzare nella cache i dati usando la logica della tua app (è alimentata a batteria, quindi dovrebbe sopravvivere all'avvio e altre interruzioni) oppure puoi usarli come spazio di scambio e lasciare che il kernel usi decidere come usarli ( anche se i kernel del sistema operativo sono generalmente ottimizzati supponendo che tutte le posizioni degli swap siano più lente di ordine e più latenti della RAM reale, allora sarà probabilmente necessario modificarlo in modo significativo per utilizzare al meglio tale disposizione).

L'opzione FusionIO avrà un miglior rapporto qualità-prezzo se hai davvero bisogno di qualcosa di così grande, questo tipo di unità RAM potrebbe essere migliore come compromesso. Capendo quanto bene un server in grado di 128 GB di RAM sulla scheda madre e un paio di questi con il pieno di 64 GB popolato raffronti il ​​prezzo e le prestazioni con un server specializzato che supporti 256 Gb o più direttamente, lascio come esercizio per il lettore!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.