Pergunta

Estou avaliando Terracotta para me ajudar a incrementar uma aplicação que está a RAM-delimitado. É um filtro colaborativo e armazena cerca de 2 kilobytes de dados por usuário. Eu quero usar o EC2 da Amazon, o que significa que eu estou limitado a 14GB de RAM, o que me dá uma por servidor efetivo limite superior de cerca de 7 milhões de usuários. Eu preciso ser capaz de escala além disso.

Com base na minha leitura tão longe Percebi que Terracotta pode ter um agrupado heap maior do que a RAM disponível em cada servidor. Seria viável ter um montão de cluster eficaz de 30GB ou mais, onde cada um dos servidores só suporta 14GB?

O dados por utilizador (a maior parte dos quais são matrizes de flutuadores) muda muito frequentemente, potencialmente centenas de milhares de vezes por minuto. Não é necessário para cada uma destas alterações para ser sincronizado com outros nós no agrupamento do momento em que elas ocorrem. É possível apenas para sincronizar alguns campos de objeto periodicamente?

Foi útil?

Solução

Eu diria que a resposta é um sim qualificado para isso. Terracotta não permite que você trabalhe com montes de cluster maiores do que o tamanho de uma única JVM, embora esse não é o caso de uso mais comum.

Você ainda precisa manter em mente a) o tamanho conjunto de trabalho e b) a quantidade de tráfego de dados. Para a), há um conjunto de dados que devem estar na memória para executar o trabalho em um determinado momento e se que o tamanho conjunto de trabalho> tamanho da pilha, o desempenho será, obviamente sofrer. Para b), cada pedaço de dados adicionados / atualizados no heap em cluster deve ser enviado para o servidor. Terracotta é melhor quando você está mudando campos de grão-finos em gráficos POJO. Trabalhando com grandes matrizes não tirar o melhor partido das capacidades de terracota (o que não quer dizer que as pessoas não usá-lo dessa forma às vezes).

Se você estiver criando um monte de lixo, em seguida, os gestores de memória de terracota e coletor de lixo distribuída tem de ser capaz de manter-se com isso. É difícil dizer sem tentar se seus volumes de dados exceder a largura de banda disponível.

O aplicativo irá beneficiar enormemente se você executar vários servidores e de dados é dividida por servidor ou tem alguma quantidade de localidade de referência. Nesse caso, você só precisa dos dados para partição de um servidor na pilha e o resto não precisa ser criticado na memória. Ele vai, naturalmente, ser criticado se necessário para failover / Disponibilidade Se outros servidores ir para baixo. O que isto significa é que, no caso de dados particionado, você não está transmitindo a todos os nós, enviando apenas as transações para o servidor.

De um número ponto de vista, é possível indexar 30GB de dados, de modo que não é perto de qualquer limite rígido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top