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.
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.
fuente
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.
fuente
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/
fuente
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.
fuente
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 .
fuente
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.
fuente
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
¿La solución EC2 de Amazon sería viable para usted? Sin duda, sería la solución más rentable.
fuente
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
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
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.
fuente
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 :)
fuente
¿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.
fuente
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.
fuente
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:
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.
fuente
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.
fuente
3 años después de la búsqueda, las cosas son mucho más fáciles.
He estado buscando algunas configuraciones de Siliconmechanics .
La forma más económica sería usar plataformas AMD con 32 dimms - 512GB - $ 11.940 .
Una alternativa, pero mucho más costosa por GB, es una plataforma Intel con 64 dimms - 1TB - 48.769 $ .
fuente