Maneira econômica de criar um servidor com muita RAM


10

Eu tenho um aplicativo Java em que a escalabilidade é principalmente limitada pela RAM, que eu gostaria de executar em um ou mais servidores em um datacenter. Onde devo procurar hardware de servidor que possa acomodar 100 GB - 512 GB ou mais de RAM? Eu não sou especialista nesses assuntos, então realmente não sei por onde começar.

Isso está entrando no território dos supercomputadores (6 dígitos ou mais) ou eu poderia obter um servidor desse tipo por menos de cinco dígitos?

Algumas notas com base em algumas perguntas abaixo:

  • Sim, tentei pensar em maneiras de remover esse requisito de escalabilidade, e não, isso não é realmente uma opção. O aplicativo requer fundamentalmente acesso aleatório muito rápido a grandes quantidades de dados, o armazenamento em um disco rígido (via banco de dados talvez) não será suficiente.
  • Tenho certeza de que a JVM pode, pelo menos em teoria, escalar tão longe. Executo regularmente meu código com 10 GB alocados à Sun 1.6 JVM sem problemas perceptíveis.

Respostas:


6

Às vezes, requisitos incomuns se beneficiam de soluções incomuns. Claro que você pode dar 6 números para a Sun, Dell ou HP e acabar com isso, mas esse não é o único jogo da cidade.

Para soluções de caixa única, obter até 128 GB é muito barato (32 x 4 GB ~ US $ 3.000), mesmo com placas-mãe homebrew que custam menos de US $ 1.000. (não zombe dos criadores. Se for bom o suficiente para o Google ...)

256GB é muito mais caro (32x8GB ~ USD 18.000), e além disso ...

Como alternativa, você considerou as caixas baratas interconectadas Infiniband (10 Gbps) como uma alternativa?

Você pode construir uma máquina de 4 nós, 16 processadores (64 núcleos) e 512 GB dessa maneira e ainda terá uma mudança de US $ 25.000.

Além disso, você teria os benefícios adicionais da degradação total, se o seu aplicativo puder ser executado em 3 máquinas, se uma delas falhar, e possivelmente obter uma escala linear no custo de até 8 nós (basta adicionar mais 4 nós). Nesse ponto, você está olhando para uma besta legal de 128 núcleos e 1 TB de RAM por <USD 50.000 .

Antes de descartar a proposta Infiniband como exótica, não é para o tipo de máquina que você está solicitando. por exemplo, 141 dos 500 principais supercomputadores são construídos dessa maneira, incluindo 4 dos 10 principais ( http://top500.org/connfam/8 )


Não sei se o Infiniband é a solução certa (não tenho experiência com ele), mas (em 2011) eu chamaria um sistema de Java com 100 GB de RAM + em um único servidor para ser exótico. É hora de considerar soluções exóticas.
Mike Miller

-1 por ser muito, muito enganador. A maioria dos supercomputadores no Top500 está usando o InfiniBand para fornecer rede de baixa latência, não para fornecer uma única imagem coerente sobre RDMA - esse uso é realmente exótico. Para usar isso, você precisa usar um produto de imagem de sistema único ou vSMP. Embora você possa usar algo como Kerrighed ou OpenSSI para isso, essas ofertas são baseadas em kernels modificados e não podem dividir uma única imagem de processo entre os nós. Somente o ScaleMP, que é uma solução muito cara, pode fornecer uma imagem de sistema coerente real em vários servidores conectados a RDMA.
jgoldschrafe

3

Tudo bem, olhe. Você não encontrará um servidor que possua o tipo de área de RAM que procura, pelo menos não um que não exija sua própria rede elétrica.

Por que não adotar uma abordagem escalável e usar o memcached? Você pode espalhar a memória para diferentes máquinas na rede. Os dados nunca precisam tocar em uma unidade de disco e, com o tipo de rede ultrarrápida que você pode comprar com o dinheiro que está falando, a latência dificilmente será um problema.

Aqui está um cliente memcached para java: http://www.whalin.com/memcached/

E aqui está uma introdução ao memcached, caso você não esteja familiarizado: http://www.danga.com/memcached/

Olhe para isso. Será muito mais econômico do que construir uma única máquina monstro com uma quantidade insana de RAM. Além disso, se você está fazendo algo que tem esse tipo de requisito, provavelmente é uma missão crítica e não precisa de um único ponto de falha.


Boa ideia. Eu quase gosto mais do que minha própria ideia.
Phuzion

Isso não faz sentido. O Sandy Bridge, lançado na semana passada em uma parte de servidor, pode escalar até 768 GB em pacote de servidor 1U. Se você deseja ficar com as peças Westmere, pode conectar dois servidores IBM x3850 ou similares por meio de links QPI e alimentá-los com menos de 4000 watts. (É o mesmo consumo de energia que quatro servidores de 2U no mesmo espaço em rack.) Presumivelmente, a AMD também oferece algumas ofertas competitivas nesse espaço.
jgoldschrafe

4
@jgoldschrafe Isso foi perguntado (e respondido) há 3 anos.
Matt Simmons

2

Os servidores Opteron de 4 ou 8 soquetes, como o HP DL585 ou DL785 ou o Sun X4600, podem consumir grandes quantidades de memória na faixa de 128 a 256 GB. Embora não sejam baratos, certamente não estão em preços de 6 dígitos; Um Sun X4600 de 8 vias e 32 núcleos, com 256 GB de RAM, custa cerca de US $ 35.000 em seu site, e é tão grande quanto esse tipo de sistema. Você provavelmente descobrirá que pode obter o sistema por um preço menor do que o preço de tabela mostrado no site.

Embora os DIMMs de 4Gb estejam disponíveis, eles tendem a ter um preço muito alto, portanto, subir para um sistema estendido com eles seria consideravelmente mais caro.

Se você deseja usar um sistema desse tipo, precisará de um sistema operacional de 64 bits. Certifique-se de obter também uma JVM de 64 bits e verifique se ela funciona bem com seu aplicativo.


Eu acho que você quer dizer uma JVM de 64 bits, não um 54-bit JVM: P
tegbains


2

Tenha absolutamente cuidado com o tamanho dessas RAMs. Escalamos uma máquina HP para 64 GB (a HP afirmou que a máquina pode levar 128 GB), mas somente depois de adicionar uma placa riser adicional, um eixo de refrigeração e assim por diante (depois de muitas conversas com a HP).
Somente porque uma máquina é especificada para ocupar até n GB, isso não significa que funcionará sem alterações adicionais. No nosso caso, nem todos os módulos de memória normais funcionaram, porque ficaram quentes, apenas módulos muito específicos funcionaram.


1

O custo da RAM não é linear para tamanhos grandes. Só porque posso comprar um DIMM de 1 GB por US $ 15, não significa que posso obter um servidor com 128 GB por apenas US $ 1.920 ... para começar, você não encontrará uma placa-mãe com 128 slots DIMM.

Acima de um determinado tamanho (~ 8 a 16 GB), você começa a ver placas-mãe que exigem DIMMs com buffer completo (FB-DIMMs), o que custará consideravelmente mais por GB do que a memória padrão da área de trabalho.

Usamos regularmente máquinas com 128 GB de memória e o preço diminuiu bastante nos últimos anos, mas não tenho números atuais ... nem nenhuma experiência de quão bem a JVM seria dimensionada para esse tamanho de memória .


1

Na verdade, você tem muitas opções: na lista da HP, você tem o blade BL680c, que pode levar 128 GB, o DL580 / 585, 256GB e o DL785, 512GB. Algumas das IBM chegam a 256 GB, assim como a Dell também.


0

Eu acho que você começará a ter problemas de 64GB no hardware tradicional. Se você puder escalar a partir daí, você ficaria bem, mas meu palpite é que a solução mais econômica seria questionar sua arquitetura. É verdade que digo isso sem o conhecimento do que você está fazendo, mas estou jogando isso lá fora.


Infelizmente, não há uma maneira fácil de contornar o requisito de RAM, pois o aplicativo requer acesso aleatório muito rápido a grandes quantidades de dados - armazenar os dados no disco não é suficiente :-(

0

A solução EC2 da Amazon seria viável para você? Certamente seria a solução mais econômica.


Receio que não - a quantidade máxima de RAM que um servidor EC2 pode suportar é de 14 GB, da última vez que verifiquei de qualquer maneira.

0

Digamos que você possa colocar tanta memória em um servidor (se não me engano, o Linux no hardware padrão é limitado a 64 GB, mas não tenho certeza).

Na maioria dos sistemas operacionais, a JVM é restrita a um espaço de heap de cerca de 1,4 GB a 1,6 GB, em parte porque a memória contígua é necessária e, em parte, devido às restrições do sistema operacional.

Portanto, uma RAM extra não ajudaria a expandir um aplicativo, apenas permitiria executar várias instâncias do aplicativo. No entanto, você precisaria de vários núcleos e enfrentaria vários outros problemas.

Para que você precisa de tanta RAM? Você pode encontrar bancos de dados que podem ser armazenados na memória ou usar uma unidade de RAM, mas não conheço uma JVM que permita armazenar tantas coisas na memória.


Tenho certeza de que a JVM não está restrita a um espaço de 1,6 GB, eu a corro regularmente com 10 GB e mais com a JVM da Sun, é claro que precisa estar em uma máquina de 64 bits.

Discordo. Veja: unixville.com/~moazam E várias perguntas aqui no SO. Não tenho certeza sobre as JVMs de 64 bits, AFAIK que não são suportadas no meu Mac de 64 bits no momento, não conheço o Linux / Win de 64 bits.

Estou usando uma JVM de 64 bits, na verdade, estou usando uma em um Mac. A Apple lançou o Java 1.6 para Macs de 64 bits há um bom tempo.

Eu não saberia, já que o Eclipse não roda na versão 1.6 para mim ... Mas ok, eu aceito isso. Qual é a RAM máxima que você pode colocar na sua máquina?

eu uso 64 JVMs bit com 16 montes gb o tempo todo

0

Uma maneira típica de obter mais memória do sistema é obter mais sistemas. Se a memória é realmente o gargalo, não é a quantidade de memória que você tem, mas o quão bem seus dados estão conectados aos seus processadores. Você precisará dimensionar muitas coisas para que isso lhe faça muito bem.

Para esclarecer, apenas adicionar alguns zeros à memória do sistema provavelmente não fará o que você pensa. O que você encontrará é que agora que todo o seu conjunto de dados cabe na memória, ou mesmo uma fatia um pouco maior, você encontra algum outro gargalo, como a invalidação do cache.

A maneira correta de dimensionar seu sistema é lenta. Se você está atualmente executando, digamos, em um sistema de 4 núcleos com 8 GB de RAM, primeiro analise o inferno do seu aplicativo para ver onde realmente está gastando tempo, tente experimentar 12 ou 16 GB de RAM e veja como os resultados da criação de perfil foram alterados.

A verdadeira questão é: por que você precisaria cerca de 100 vezes a memória do sistema, em relação a outros recursos, do que normalmente está disponível. Se o seu padrão de acesso a dados é previsível, o que você deve fazer é aumentar a largura de banda do disco, vários controladores RAID com vários discos distribuídos conseguirão isso.

Se o seu padrão de acesso a dados é muito, muito aleatório, provavelmente há espaço para um algoritmo otimizado.


0

Você provavelmente precisa de um servidor especializado para isso.

Tente olhar para o ES7000 da Unisys. A descrição provavelmente está um pouco desatualizada.

Pode suportar até 512 GB de RAM. Está usando sistemas operacionais conhecidos, como Windows e Linux Enterprise.

Vai custar ~ US $ 30K para a configuração padrão, mas com Itanium e todos os sinos e assobios, pode chegar a ~ US $ 600K.

Com tanta memória RAM, você pode manter muitos dados quentes sem tocar no espaço em disco.


0

Você obviamente precisa de sistemas operacionais de 64 bits, mas não está no território dos supercomputadores. Apenas como exemplo, os PowerEdge R900 e R905 da Dell estão disponíveis com 256 GB de RAM e usam processadores Intel Xeon / AMD Opteron padrão e executam Linux, Solaris ou Windows 2003 e 2008.

Obviamente, comprar RAM diretamente na Dell não é muito econômico (eles querem ~ US $ 35.000 por 32 x 8 GB, enquanto você pode adquiri-lo por cerca de US $ 23.000, possivelmente menos), mas por outro lado, pode querer para garantir que você tenha o suporte adequado se estiver comprando um servidor de US $ 40.000 (não esperava que 256 GB de RAM fossem baratos, não é? Se 128 GB também estiverem OK, você poderá economizar ~ 12.000 US $).

Não tenho experiência em qual sistema operacional escolher, porém, executar 100 + GB de Java geralmente não é algo que eu faço :)


0

Que tal uma solução completamente pronta para uso: um banco de dados. Eu sei que você disse que seria muito lento, mas isso se baseia no que está hospedando. Que tal hospedá-lo em uma matriz RAID0 suficiente destes.

US $ 400 para o gadget, a Pricewatch lista os chips em US $ 55 (não verifiquei a compatibilidade) por 4 GB, então isso significa outros US $ 440 para a memória. Isso dá a você 32gb por US $ 840. (Em teoria, o dispositivo pode receber chips de 8 GB, totalizando 64 GB, mas ainda não há suporte para chips.)

RAID0 4 deles e você está no limite inferior do seu alcance por um pouco mais de US $ 3000 + uma caixa comum. 16 deles obtêm o valor mais alto do seu range por US $ 14k.

Se isso é utilizável ou não, isso também se resume à natureza dos seus dados - esses dispositivos são voláteis e esgotam a bateria de backup em algumas horas, embora possam fazer backup em um cartão CF.


0

Sou um grande fã da abordagem "muitos servidores baratos". Você já pensou em talvez executar esse tipo de processo na plataforma Eucalyptus, disponível no Ubuntu 9.04? É possível executar esse tipo de programa em alguns computadores em sua própria rede gigabit dedicada com vários servidores com 8, 16 ou 32 GB de RAM e escalar de forma linear, adicionando servidores mais baratos quando necessário.


0

Eu li o seu comentário sobre a natureza do seu aplicativo, mas ainda assim, você pode considerar soluções alternativas.

O FusionIO é uma alternativa real. Apenas dê uma olhada . Em 10K $, ainda é muito mais barato que o servidor de ponta. Escreva largura de banda de 1,0 GB / s - isso soa realmente louco.

Outra opção é SSD, é claro. Caso você tenha visto as especificações do 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

Colocar vários deles no array RAID 10 pode fornecer desempenho suficiente. E com US $ 400 por 32 GB, é muito mais barato que os servidores high-end alternativos.


0

Da mesma forma que a sugestão do FusionIO, você pode obter dispositivos que permitem conectar RAM dinâmica a uma interface SATA. Algo como este (eu não tenho nenhuma experiência do produto ou empresa, é apenas a primeira opção que saiu de uma busca "Google Shopping").

Você pode usar alguns deles como um sistema de arquivos montado para armazenar em cache os dados usando a lógica do seu aplicativo (ele é suportado por bateria e deve sobreviver à inicialização e outras interrupções) ou você pode usá-los como espaço de troca e permitir que o kernel decida como usá-los ( embora como os kernels do SO geralmente sejam otimizados, assumindo que todos os locais de troca são mais ordens de magnitude mais lentos e mais latentes do que a RAM real, então será provável que você precise ajustá-lo significativamente para aproveitar melhor esse arranjo).

A opção FusionIO terá melhor relação custo / benefício, se você realmente precisar de algo tão grande, esse tipo de unidade de RAM pode ser melhor como um compromisso. Descobrindo quão bem um servidor capaz de 128 GB de RAM na placa-mãe e alguns deles com 64 GB preenchidos comparam o preço e o desempenho a um servidor especializado que suporta 256 GB ou mais diretamente, deixo como exercício para o leitor!


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.