Dimensionamento de Memória e Cálculo de Contagem de Partições

É possível calcular a quantidade de memória e partições necessárias para sua configuração específica.

Atenção: Este tópico se aplica quando você não estiver usando o modo de cópia COPY_TO_BYTES. Se estiver usando o modo COPY_TO_BYTES, o tamanho da memória será muito menor e o procedimento de cálculo será diferente. Para obter informações adicionais sobre este modo, consulte Ajustando o Modo de Cópia.
O WebSphere eXtreme Scale armazena dados no espaço de endereço das Java Virtual Machines (JVM). Cada JVM fornece espaço no processador para criar, recuperar, atualizar e excluir chamadas para os dados que estão armazenados na JVM. Além disso, cada JVM fornece espaço de memória para entradas de dados e réplicas. Objetos Java variam de tamanho, assim você deve medir para fazer uma estimativa de quanta memória você precisa.

Para dimensionar a memória necessária, carregue os dados do seu aplicativo em uma única JVM. Quando o uso do heap alcança 60%, observe o número de objetos que são utilizados. Este número é a contagem máxima recomendada de objetos para cada uma de suas Java Virtual Machines. Para obter o dimensionamento mais exato, utilize dados realistas e inclua quaisquer índices definidos em seu dimensionamento porque os índices também consomem memória. A melhor forma de dimensionar o uso da memória é executar a saída verbosegc da coleta de lixo pois esta saída fornece os números após a coleta de lixo. É possível consultar o uso do heap em qualquer ponto específico por meio de MBeans ou programaticamente, porém essas consultas fornecem apenas uma captura instantânea atual do heap. Essa captura instantânea pode incluir lixo não coletado, portanto, usar esse método não indica precisamente a memória consumida.

Escalando a Configuração

Quantidade de shards por partição (numShardsPerPartition value)
Para calcular a quantidade de shards por partição, ou o valor de numShardsPerPartition, inclua 1 para o shard primário mais a quantidade total de shards de réplica que desejar. Para obter informações adicionais sobre o particionamento, consulte Particionamento.
numShardsPerPartition = 1 + total_number_of_replicas

Quantidade de Java Virtual Machines (valor minNumJVMs)

Para escalar sua configuração, primeiro, decida o número máximo de objetos necessários a serem armazenados no total. Para determinar a quantidade de Java Virtual Machines que precisa, use a seguinte fórmula:
minNumJVMS=(numShardsPerPartition * numObjs) / numObjsPerJVM
Arredonde este valor para cima para o valor de número inteiro mais próximo.

Quantidade de shards (valor numShards)

No tamanho de crescimento final, use 10 shards para cada JVM. Conforme descrito anteriormente, cada JVM possui um shard principal e (N-1) shards para as réplicas, ou neste caso, nove réplicas. Como você já possui uma quantidade de Java Virtual Machines para armazenar os dados, você pode multiplicar a quantidade de Java Virtual Machines por 10 para determinar a quantidade de shards:
numShards = minNumJVMs * 10 shards/JVM

Número de partições

Se uma partição tiver um shard primário e um shard de réplica, então a partição possui dois shards (principal e de réplica). O número de partições é a contagem de shards dividido por 2, arredondado para o número primo mais próximo. Se a partição possui um primário e duas réplicas, então, o número de partições é a contagem de shards dividida por 3, arredondada para o número primo mais próximo.
numPartitions = numShards / numShardsPerPartition

Exemplo de Escala

Neste exemplo, o número de entrada inicia em 250 milhões. A cada ano, o número de entradas aumenta em cerca de 14%. Após sete anos, o número total de entrada será de 500 milhões, portanto, você deve planejar sua capacidade de acordo. Para alta disponibilidade, uma única réplica é necessária. Com uma réplica, o número de entradas duplica, ou seja, passa a ser 1 bilhão de réplicas. Como um teste, 2 milhões de entradas podem ser armazenadas em cada JVM. Utilizando os cálculos neste cenário, a seguinte configuração é necessária:

Iniciando a Configuração

Com base nos cálculos anteriores, inicie com 250 Java Virtual Machines e cresça até 500 Java Virtual Machines ao longo de cinco anos. Com essa configuração, é possível gerenciar o crescimento incremental até chegar ao número final de entradas.

Nessa configuração, cerca de 200.000 entradas são armazenadas por partição (500 milhões de entradas dividido por 2503 partições). Configure o parâmetro numberOfBuckets no mapa que mantém as entradas para o número primo maior mais próximo, que neste exemplo é 70887, o que mantém a proporção por volta de três.

Quando o número máximo de Java Virtual Machines é atingido

Quando atingir o número máximo de 500 Java Virtual Machines, sua grade de dados ainda poderá crescer. À medida que o número de Java Virtual Machines aumenta além de 500, a contagem de shards começa a diminuir abaixo de 10 para cada JVM, que está abaixo do número recomendado. Os shards começam a ficar maiores, o que pode causar problemas. Repita o processo de dimensionamento considerando novamente um crescimento futuro e reconfigure a contagem da partição. Esta prática requer um reinício completo da grade de dados, ou uma ocorrerá uma interrupção da sua grade de dados.

Número de Servidores

Atenção: Não utilize paginação em um servidor sob nenhuma circunstância.
Uma única JVM utiliza mais memória do que o tamanho do heap. Por exemplo, 1 GB de heap para uma JVM na verdade utiliza 1.4 GB de memória real. Determine a RAM livre disponível no servidor. Divida a quantidade de RAM pela memória por JVM para obter o número máximo da Java Virtual Machines no servidor.