Définition de la taille de la mémoire et calcul du nombre de partitions

Vous pouvez calculer la quantité de mémoire et le nombre de partitions nécessaires pour votre configuration.

Avertissement : Cette rubrique s'applique lorsque vous n'utilisez pas le mode de copie COPY_TO_BYTES. Si vous utilisez le mode COPY_TO_BYTES, la taille de la mémoire est beaucoup plus petite et la procédure de calcul est différente. Pour plus d'informations sur ce mode, voir Optimisation du mode de copie.
WebSphere eXtreme Scale stocke les données dans l'espace adresse de machines virtuelles Java (JVM). Chaque JVM fournit un espace processeur pour traiter la création, la récupération, la mise à jour et la suppression d'appels pour les données stockées dans la JVM. En outre, chaque JVM fournit de l'espace mémoire pour les serveurs secondaires et les entrées de données. Les objets Java varient en taille. Par conséquent, vous devez effectuer une mesure afin d'estimer la quantité de mémoire nécessaire.

Pour adapter la taille de la mémoire à vos besoins, chargez les données d'application dans une seule JVM. Lorsque l'utilisation de segment de mémoire atteint 60 %, notez le nombre d'objets utilisés. Ce nombre correspond au nombre d'objets maximal recommandé pour chaque machines virtuelles Java. Pour obtenir la définition de taille la mieux adaptée, utilisez des données réalistes et introduisez tout index défini, car les index occupent également de la mémoire. La meilleure méthode pour dimensionner l'utilisation de la mémoire consiste à exécuter une sortie verbosegc de récupération de place, car cette sortie vous donne les valeurs après la récupération de place. Vous pouvez interroger l'utilisation du segment de mémoire à tout moment via des beans gérés ou à l'aide d'une programme, mais ces requêtes ne vous donnent qu'un cliché instantané du segment de mémoire. Ce cliché peut contenir de l'espace non récupéré. Par conséquent, cette méthode n'indique pas précisément la mémoire utilisée.

Mise à l'échelle de la configuration

Nombre de fragments par partition (valeur numShardsPerPartition)
Pour calculer le nombre de fragments par partition, ou valeur numShardsPerPartition, ajoutez 1 pour le fragment primaire plus le nombre total de fragments réplique souhaité. Pour plus d'informations sur le partitionnement, voir Partitionnement.
numShardsPerPartition = 1 + total_number_of_replicas

Nombre de machines virtuelles Java (valeur minNumJVMs)

Pour mettre à l'échelle votre configuration, décidez d'abord du nombre total maximal d'objets à stocker. Pour déterminer le nombre de machines virtuelles Java nécessaire, utilisez la formule suivante :
minNumJVMS=(numShardsPerPartition * numObjs) / numObjsPerJVM
Arrondissez cette valeur à l'entier le plus près.

Nombre de fragments (valeur numShards)

Lorsque la taille finale est atteinte, utilisez 10 fragments pour chaque JVM. Comme indiqué précédemment, chaque JVM dispose d'un fragment primaire et (N-1) fragments de réplique, soit dans ce cas, neuf répliques. Etant donné que vous disposez déjà du nombre de machines virtuelles Java pour le stockage de données, vous pouvez multiplier le nombre de machines virtuelles Java par 10 pour obtenir le nombre de fragments :
numShards = minNumJVMs * 10 shards/JVM

Nombre de partitions

Si une partition dispose déjà d'un fragment primaire et d'un fragment réplique, cette partition a donc deux fragments (le primaire et le réplique). Le nombre de partitions correspond au nombre de fragments divisé par 2 et arrondi au nombre premier le plus proche. Si la partition présente un fragment primaire et deux secondaires, le nombre de partitions correspond au nombre de fragments divisé par 3 et arrondi au nombre premier le plus proche.
numPartitions = numShards / numShardsPerPartition

Exemple de mise à l'échelle

Dans cet exemple, le nombre d'entrées commence à 250 millions. Chaque année, le nombre d'entrées croît d'environ 14 %. Après sept ans, le nombre total d'entrées atteint 500 millions et vous devez donc planifier la capacité en conséquence. Pour une haute disponibilité, un serveur secondaire est nécessaire. Avec un serveur secondaire, le nombre d'entrées double, soit 1 000 000 000 entrées. Dans le cadre d'un test, deux millions d'entrées peuvent être stockées dans chaque JVM. L'utilisation de calculs pour ce scénario montre le besoin de la configuration suivante :

Début de la configuration

A partir des calculs précédents, démarrez avec 250 machines virtuelles Java pour atteindre 500 machines virtuelles Java en cinq ans. Avec cette configuration, vous pouvez gérer la croissance incrémentielle jusqu'à ce que vous accédiez au nombre d'entrées final.

Dans cette configuration, environ 200 000 entrées sont stockées par partition (500 millions d'entrées divisées par 2 503 partitions). Dans la mappe qui contient les entrées, affectez au paramètre numberOfBuckets le nombre premier le plus proche, soit 70 887 dans l'exemple, ce qui maintient le rapport autour de trois.

Le nombre maximal de machines virtuelles Java est atteint

Lorsque vous atteignez le nombre maximal de 500 machines virtuelles Java, vous pouvez toujours agrandir votre grille de données. Lorsque le nombre de machines virtuelles Java dépasse le nombre maximal de 500, le nombre de fragments commence à tomber en dessous de 10 pour chaque JVM, ce qui est inférieur au nombre recommandé. La taille des fragments augmente et risque d'entraîner des problèmes. Répétez le processus de dimensionnement en tenant compte de la croissance future de nouveau et redéfinissez le nombre de partitions. Cela requiert un redémarrage de la grille de données complète ou une indisponibilité de votre grille de données.

Nombre de serveurs

Avertissement : N'utilisez la pagination sur un serveur sous aucune circonstance.
Une seule JVM utilise plus de mémoire que la taille d'un segment de mémoire. Par exemple, avec 1 Go de segment de mémoire, une JVM utilise en fait 1,4 Go de mémoire réelle. Déterminez la mémoire vive disponible sur le serveur. Divisez la quantité de mémoire vive par la quantité de mémoire pour chaque JVM pour obtenir le nombre maximal de machines virtuelles Java sur le serveur.