Forma rentable de construir un servidor con mucha RAM

10

Tengo una aplicación Java donde la escalabilidad está limitada principalmente por la RAM, que me gustaría ejecutar en uno o más servidores en un centro de datos. ¿Dónde debería estar buscando hardware de servidor que pueda acomodar 100GB - 512GB o más de RAM? No soy un experto en estos asuntos, así que realmente no sé por dónde empezar.

¿Esto está entrando en el territorio de la supercomputadora (6 cifras o más), o podría obtener un servidor de este tipo por poco dinero de 5 dígitos?

Algunas notas basadas en algunas preguntas a continuación:

  • Sí, he tratado de pensar en formas de eliminar este requisito de escalabilidad, y no, no es realmente una opción. La aplicación requiere fundamentalmente un acceso aleatorio muy rápido a grandes cantidades de datos, el almacenamiento en un disco duro (tal vez a través de una base de datos) no lo cortará.
  • Estoy bastante seguro de que la JVM puede, al menos en teoría, escalar tanto. Regularmente ejecuto mi código con 10GB asignados a Sun 1.6 JVM sin problemas notables.
cordura
fuente

Respuestas:

6

El requisito inusual a veces se beneficia de soluciones inusuales. Claro que puedes darle 6 figuras a Sun, Dell o HP y terminar con eso, pero no es el único juego en la ciudad.

Para soluciones de caja única, obtener hasta 128 GB es muy barato (32 x 4 GB ~ USD 3.000), incluso con placas base homebrew que cuestan menos de USD 1.000. (No te burles de los creadores. Si es lo suficientemente bueno para Google ...)

256GB es mucho más caro (32x8GB ~ USD 18,000), y más allá de eso ...

Alternativamente, ¿ha considerado las cajas baratas interconectadas Infiniband (10 Gbps) como alternativa?

Podría construir una máquina de 4 nodos, 16 procesadores (64 núcleos), 512 GB de esa manera y aún así tener un cambio de USD 25,000.

Además, tendría los beneficios adicionales de la degradación elegante, si su aplicación puede ejecutarse en 3 máquinas si una de ellas falla, y posiblemente obtenga una escala lineal en el costo de hasta 8 nodos (solo agregue 4 nodos más). En ese momento , está viendo una excelente bestia de 128 núcleos y 1 TB de RAM por <USD 50,000 .

Antes de descartar la propuesta Infiniband como exótica, no es para el tipo de máquina que está solicitando. por ejemplo, 141 de las 500 supercomputadoras principales se construyen de esta manera, incluidas 4 de las 10 principales ( http://top500.org/connfam/8 )

Peter Stuer
fuente
No sé si Infiniband es la solución correcta (no tengo experiencia con él), pero (en 2011) llamaría exótico a un sistema que ejecute Java con 100GB + ram en un solo servidor. Es hora de considerar soluciones exóticas.
Mike Miller
-1 por ser muy, muy engañoso. La mayoría de las supercomputadoras en el Top500 están utilizando InfiniBand para proporcionar redes de baja latencia, no para proporcionar una sola imagen coherente sobre RDMA; ese uso es realmente exótico. Para hacer uso de eso, debe usar una imagen de sistema único o un producto vSMP. Si bien puede usar algo como Kerrighed u OpenSSI para esto, estas ofertas se basan en núcleos modificados y no pueden dividir una sola imagen de proceso entre nodos. Solo ScaleMP, que es una solución muy costosa, puede ofrecer una imagen de sistema coherente real en múltiples servidores conectados a RDMA.
jgoldschrafe
3

Muy bien, mira. No va a encontrar un servidor que tenga el tipo de huella RAM que está buscando, al menos no uno que no requiera su propia red eléctrica.

¿Por qué no adoptar un enfoque escalable y usar memcached? Puede extender la memoria a diferentes máquinas en la red. Los datos nunca tienen que tocar una unidad de disco, y con el tipo de red ultrarrápida que puede comprar con el dinero del que habla, la latencia difícilmente será un problema.

Aquí hay un cliente memcached para java: http://www.whalin.com/memcached/

Y aquí hay una introducción a memcached en caso de que no esté familiarizado: http://www.danga.com/memcached/

Mirar dentro. Será mucho más rentable que construir una sola máquina monstruo con una cantidad increíble de RAM. Además, si está haciendo algo que tiene ese tipo de requisitos, probablemente sea de misión crítica y no necesita un solo punto de falla.

Matt Simmons
fuente
Buena idea. Casi me gusta más que mi propia idea.
phuzion
Eso no tiene sentido. Sandy Bridge, que se lanzó la semana pasada en una parte del servidor, puede escalar hasta 768 GB en un paquete de servidor de 1U. Si está buscando quedarse con las piezas Westmere, puede conectar dos servidores IBM x3850 o similares a través de enlaces QPI y alimentarlos con menos de 4000 vatios. (Esa es la misma huella de energía que cuatro servidores de 2U en el mismo espacio de rack). Presumiblemente, AMD también tiene algunas ofertas competitivas en este espacio.
jgoldschrafe
44
@jgoldschrafe Esto fue preguntado (y respondido) hace 3 años.
Matt Simmons
2

Los servidores Opteron de 4 u 8 sockets, como HP DL585 o DL785 o Sun X4600, pueden ocupar grandes cantidades de memoria en el rango de 128-256GB. Aunque no son baratos, ciertamente no están en las etiquetas de precio de 6 dígitos; Un Sun X4600 de 8 núcleos y 32 núcleos con 256 GB de RAM tiene una lista de alrededor de $ 35,000 en su sitio web, y eso es casi tan grande como este tipo de sistema. Probablemente encontrará que puede obtener el sistema por algo menos del precio de lista que se muestra en el sitio web.

Si bien los DIMM de 4 Gb están disponibles, tienden a tener un alto precio, por lo que subir a un sistema maximizado con estos sería considerablemente más costoso.

Si desea utilizar un sistema de este tipo, necesitará una O / S de 64 bits. Asegúrese de obtener también una JVM de 64 bits y verifique que funcione bien con su aplicación.

Preocupado por TunbridgeWells
fuente
Creo que te refieres a una JVM de 64 bits, no a una JVM de 54 bits: P
tegbains
2

No repetiré las sugerencias de hardware (que son sólidas), pero es posible que desee ver Terracota para ver si se ajusta a su aplicación.

http://www.terracotta.org/

Jauder Ho
fuente
2

Tenga mucho cuidado con los tamaños de RAM. Habíamos escalado una máquina HP a 64 GB (HP declaró que la máquina puede tomar 128 GB), pero solo después de agregar una tarjeta vertical adicional, un eje de enfriamiento, etc. (después de muchas conversaciones con HP).
Solo porque una máquina está especificada para tomar hasta n GB, no significa que funcionará sin cambios adicionales. En nuestro caso, no todos los módulos de memoria normales funcionaron, porque se pusieron en marcha, solo funcionaron módulos muy específicos.

Shadok
fuente
1

El costo de la RAM no escala linealmente a tamaños grandes. El hecho de que pueda comprar un DIMM de 1GB por $ 15 no significa que pueda obtener un servidor con 128GB por solo $ 1,920 ... para empezar, no encontrará una placa base con 128 ranuras DIMM.

Por encima de un cierto tamaño (~ 8 a 16 GB), comienza a ver placas base que requieren DIMM con buffering completo (FB-DIMM), lo que le costará considerablemente más por GB que la memoria de escritorio estándar.

Regularmente usamos máquinas con 128 GB de memoria y el precio ha bajado mucho en los últimos años, pero no tengo ningún número actual ... ni experiencia de qué tan bien la JVM se adapte a ese tamaño de memoria .

Rob Walker
fuente
1

De hecho, tiene muchas opciones, solo de la lista de HP tiene su blade BL680c que puede tomar 128GB, sus DL580 / 585 pueden tomar 256GB y su DL785 puede tomar 512GB. Algunos de los de IBM alcanzan los 256 GB, al igual que uno de Dell.

Chopper3
fuente
0

Creo que comenzará a encontrarse con problemas de espacio libre a 64 gb en hardware tradicional. Si puede escalar desde allí, estaría bien, pero supongo que la solución mucho más rentable sería cuestionar su arquitectura. De acuerdo, digo eso sin saber lo que estás haciendo, pero lo estoy lanzando.


fuente
Desafortunadamente, no hay una manera fácil de evitar el requisito de RAM, ya que la aplicación requiere un acceso aleatorio muy rápido a grandes cantidades de datos: el almacenamiento de datos en el disco simplemente no es suficiente :-(
0

¿La solución EC2 de Amazon sería viable para usted? Sin duda, sería la solución más rentable.


fuente
No temas: la cantidad máxima de RAM que puede soportar un servidor EC2 es de 14 GB, la última vez que lo comprobé de todos modos.
0

Digamos que podría colocar tanta memoria en un servidor (si no me equivoco, Linux en hardware estándar está limitado a 64 GB, pero no estoy seguro).

En la mayoría de los sistemas operativos, la JVM está restringida a un espacio dinámico de aproximadamente 1.4GB-1.6GB, en parte porque se requiere memoria contigua y en parte por las restricciones del sistema operativo.

Por lo tanto, una RAM adicional no lo ayudaría a ampliar una aplicación, solo le permitiría ejecutar varias instancias de la aplicación. Sin embargo, necesitaría múltiples núcleos y se encontraría con otros problemas.

¿Para qué necesitas tanta RAM? Es posible que pueda encontrar bases de datos que se puedan almacenar en la memoria o usar una unidad de RAM, pero no conozco una JVM que le permita almacenar tantas cosas en la memoria.


fuente
Estoy bastante seguro de que la JVM no está restringida a un espacio dinámico de 1.6GB, regularmente la ejecuto con 10GB y más con la JVM de Sun, por supuesto tiene que estar en una máquina de 64 bits.
Estoy en desacuerdo. Ver: unixville.com/~moazam Y varias preguntas aquí sobre SO. No estoy seguro acerca de las JVM de 64 bits, AFAIK que no es compatible con mi Mac de 64 bits en este momento, no sé sobre Linux / Win de 64 bits.
Estoy usando una JVM de 64 bits, de hecho, estoy usando una en una Mac. Apple lanzó Java 1.6 para Mac de 64 bits hace bastante tiempo.
No lo sabría, ya que Eclipse no funciona en 1.6 para mí ... Pero está bien, acepto eso. Sin embargo, ¿cuál es la RAM máxima que puede poner en su máquina?
uso jvms de 64 bits con montones de 16 gb todo el tiempo
0

Una forma típica de obtener más memoria del sistema es obtener más sistemas. Si la memoria es realmente el cuello de botella, no se trata tanto de la cantidad de memoria que tiene, sino de qué tan bien conectados están sus datos a sus procesadores. Tendrás que escalar muchas cosas para que te haga mucho bien.

Para aclarar, solo agregar un par de ceros a la memoria de su sistema probablemente no hará lo que cree que hará. Lo que encontrará es que ahora que todo su conjunto de datos cabe en la memoria, o incluso una porción ligeramente más grande de él, se encontrará con algún otro cuello de botella, como la invalidación de la memoria caché.

La forma correcta de escalar su sistema es lentamente. Si actualmente está ejecutando, por ejemplo, en un sistema de 4 núcleos con 8 gigas de ram, primero perfile su aplicación para ver dónde realmente está gastando tiempo, luego intente aumentar hasta 12 o 16 gigas de ram y vea cómo Los resultados del perfil han cambiado.

La verdadera pregunta es, ¿por qué necesitaría aproximadamente 100 veces la memoria del sistema, en relación con otros recursos, de lo que comúnmente está disponible? Si su patrón de acceso a datos es predecible de alguna manera, lo que debería hacer es aumentar el ancho de banda del disco, varios controladores de incursión con varios discos rayados lo lograrán.

Si su patrón de acceso a datos es realmente aleatorio, entonces probablemente haya espacio para un algoritmo mejor optimizado.


fuente
0

Probablemente necesite un servidor especializado para ello.

Intenta mirar ES7000 de Unisys. La descripción allí es probablemente un poco anticuada.

Puede soportar hasta 512 GB de RAM. Está usando O / S bien conocido, como Windows y Linux Enterprise.

Le costará ~ $ 30K para la configuración estándar, pero con Itanium y todas las campanas y silbatos, podría llegar a ~ $ 600K.

Con tanta RAM, puede mantener una gran cantidad de datos activos sin tocar el espacio del disco.

KOkon
fuente
0

Obviamente necesita sistemas operativos de 64 bits, pero no está en el territorio de la supercomputadora. Solo como ejemplo, los PowerEdge R900 y R905 de Dell están disponibles con 256 GB de RAM y utilizan procesadores Intel Xeon / AMD Opteron estándar y ejecutan Linux, Solaris o Windows 2003 y 2008.

Por supuesto, comprar RAM directamente en Dell no es muy rentable (quieren ~ 35,000 US $ por 32 x 8 GB, mientras que ya puede obtenerlo por unos 23,000 US $, posiblemente menos), pero por otro lado puede querer para asegurarse de contar con el soporte adecuado si está comprando un servidor de 40,000 US $ (no esperaba que 256 GB de RAM fuera barato, ¿verdad? Si 128 GB también está bien, puede ahorrar ~ 12,000 US $).

Sin embargo, no tengo experiencia sobre qué sistema operativo elegir, por lo general, ejecutar más de 100 GB de Java no es algo que haga :)

Michael Stum
fuente
0

¿Qué tal una solución completamente lista para usar? Una base de datos. Sé que dijiste que sería demasiado lento, pero eso se basa en lo que lo aloja. ¿Qué hay de alojarlo en una matriz RAID0 de suficientes de estos?

$ 400 para el dispositivo, Pricewatch enumera chips a $ 55 (no he verificado la compatibilidad) por 4 gb, por lo que son otros $ 440 para la memoria. Eso te da 32 gb por $ 840. (En teoría, el dispositivo puede tomar chips de 8 gb para un total de 64 gb, pero todavía no se admiten chips).

RAID0 4 de estos y está en el extremo inferior de su rango por un poco más de $ 3000 + una caja ordinaria. 16 de ellos obtienen el extremo superior de su rango por $ 14k.

Si esto es utilizable o no, también se reduce a la naturaleza de sus datos: estos dispositivos son volátiles y agotarán su batería de respaldo en unas pocas horas, aunque pueden realizar copias de seguridad en una tarjeta CF.

Loren Pechtel
fuente
0

Soy un gran admirador del enfoque de "muchos servidores baratos". ¿Ha investigado tal vez ejecutar este tipo de proceso en la plataforma Eucalyptus, disponible en Ubuntu 9.04? Es posible que pueda ejecutar este tipo de programa en algunas computadoras en su propia red de gigabits dedicada con múltiples servidores con 8, 16 o 32 GB de RAM, y escalar de forma lineal, agregando servidores más baratos cuando los necesite.

Phuzion
fuente
0

Leí tu comentario sobre la naturaleza de tu aplicación, pero aún así, podrías considerar soluciones alternativas.

FusionIO es una alternativa real. Solo echa un vistazo . A 10K $ sigue siendo mucho más barato que el servidor de gama alta. Escriba un ancho de banda de 1.0 GB / s, eso suena realmente loco.

Otra opción es SSD, por supuesto. En caso de que haya visto las especificaciones de la unidad de estado sólido 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

Poner un montón de ellos en la matriz de incursiones 10 puede darte suficiente rendimiento. Y con USD 400 por 32 GB, es mucho más barato que los servidores alternativos de gama alta.

Taras Chuhay
fuente
0

De manera similar a la sugerencia de FusionIO, puede obtener dispositivos que le permitan conectar RAM dinámica a una interfaz SATA. Algo como esto (no tengo experiencia con el producto o la empresa, es solo la primera opción que salió de una búsqueda en "Google Shopping").

Podría usar un par de estos como sistemas de archivos montados para almacenar en caché los datos utilizando la lógica de su aplicación (está respaldada por batería, por lo que debería sobrevivir al arranque y otras interrupciones) o podría usarlos como espacio de intercambio y dejar que el uso del núcleo decida cómo usarlos ( Sin embargo, como los núcleos del sistema operativo generalmente están optimizados, suponiendo que todas las ubicaciones de intercambio son más lentas y más latentes que la RAM real, entonces será probable que tenga que ajustarlo significativamente para obtener el mejor uso de tal disposición).

La opción FusionIO será una mejor relación calidad-precio si realmente necesita algo tan grande, este tipo de unidad RAM puede ser mejor como un compromiso. Calculando qué tan bien un servidor capaz de 128 Gb de RAM en la placa base y un par de estos con los 64 Gb completos comparados en términos de precio y rendimiento con un servidor especializado que admite 256 Gb o más directamente, lo dejo como ejercicio para el lector.

David Spillett
fuente