Passer au contenu

Pourquoi existe-t-il un déséquilibre de mémoire entre les partitions de mon cluster autogéré ElastiCache pour Valkey ou ElastiCache for Redis OSS ?

Lecture de 7 minute(s)
0

Mon cluster autogéré Amazon ElastiCache pour Valkey ou Amazon ElastiCache for Redis avec le mode cluster activé utilise la mémoire de manière inégale d'une partition à l'autre.

Brève description

Par défaut, les clusters Valkey et Redis OSS dont le mode cluster est activé tentent de répartir uniformément l'espace de clé de cache entre les partitions d'un cluster. Pour plus d'informations, consultez la section Comment utiliser le mode cluster sur Amazon ElastiCache for Redis.

Les raisons suivantes peuvent entraîner une utilisation déséquilibrée de la mémoire et les partitions peuvent, par conséquent, stocker une plus grande quantité de données que d’autres :

  • Répartition inégale des clés
  • Clés trop grandes
  • Touches de raccourci ou partitions chaudes
  • Utilisation inégale des hashtags
  • Tampons de sortie client accrus

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Répartition inégale des clés

Si vous ne répartissez pas uniformément les emplacements de hachage entre les partitions, certaines partitions peuvent gérer plus de clés que d'autres. Pour résoudre ce problème, rééquilibrez les emplacements dans le cluster.

Remarque : L'option Rééquilibrage des emplacements essaie de répartir uniformément les 16 384 emplacements de hachage entre les partitions disponibles. Cette option ne rééquilibre pas en fonction de l'utilisation de la mémoire ou du volume de données de chaque partition.

Certaines clés sont trop grandes

Si certaines clés sont beaucoup plus volumineuses que d'autres, il est possible que les partitions hébergeant ces clés utilisent davantage de mémoire. Pour résoudre ce problème, vous pouvez diviser les grandes clés en paires clé-valeur de plus petite taille. Vous pouvez également supprimer les grandes clés inutiles pour libérer de l'espace.

Pour rechercher le jeu de données afin d’y rechercher de grandes clés, utilisez la commande valkey-cli --bigkeys ou valkey-cli --memkeys. Pour plus d'informations, consultez la section Recherche de grandes clés sur le site Web de Valkey.

Il est recommandé d'utiliser des stratégies de dénomination de clés, des structures de données et des techniques de compression efficaces afin d'optimiser l'utilisation de la mémoire des clés.

Touches de raccourci ou partitions chaudes

Lorsque vous accédez fréquemment à certaines clés plus qu'à d'autres, la charge est distribuée de manière inégale et sollicite excessivement la mémoire de l'hôte serveur. Les touches fréquemment utilisées sont appelées touches de raccourci ou partitions « chaudes ».

Pour rechercher des touches de raccourci, exécutez la commande valkey-cli --hotkeys pour examiner les modèles d'accès aux touches afin d'identifier ces dernières. Dans certains cas, une seule clé de cache de données chaud peut créer un hot spot qui surcharge le nœud de cache. Le hot spot peut affecter le processeur, la mémoire et les ressources réseau du nœud.

Remarque : La commande hotkeys ne fonctionne que lorsque la politique maxmemory-policy est définie sur *lfu.

Pour résoudre ce problème, prenez les mesures suivantes :

  • Mettez à l’échelle verticalement votre cluster et fournissez davantage de ressources.
  • Répartissez le trafic de lecture pour lire les réplicas. Pour plus d'informations, consultez la section READONLY sur le site Web de Valkey.
  • Modifiez l'application client pour réduire le volume d'écritures sur les touches.

Utilisation inégale des hashtags

Dans un environnement activé en mode cluster, vous devez utiliser des identifications de hachage pour implémenter des opérations à clés multiples dans un cluster Valkey. Lorsque vous augmentez votre utilisation des identifications de hachage, certains emplacements de hachage stockent plus de clés que d'autres. Il en résulte un déséquilibre de mémoire entre les partitions.

Pour résoudre ce problème, examinez l'utilisation de l'espace de clé et des identifications de hachage et répartissez les données sur d'autres emplacements de hachage. Pour plus d'informations, consultez la page Hashtags de la section Spécification du cluster sur le site Web de Valkey.

Tampons de sortie client accrus

Lorsque les commandes d'un client produisent une sortie plus rapide que ce que Valkey peut envoyer au client, la mémoire tampon de sortie du client augmente et utilise davantage de mémoire. Pour plus d'informations, consultez la page Limites de la mémoire tampon de sortie sur le site Web de Valkey.

Pour identifier la cause des problèmes de mémoire tampon, connectez-vous au nœud concerné et exécutez la commande CLIENT LIST pour identifier les clients qui utilisent l'espace tampon. Pour en savoir plus, consultez la page CLIENT LIST sur le site Web de Redis.

Pour déterminer la cause de l'augmentation de la mémoire tampon de sortie du client, examinez les paramètres clés suivants dans la sortie :

  • obl : Longueur de la mémoire tampon de sortie
  • omem : Utilisation de la mémoire tampon de sortie
  • tot-mem : Mémoire totale utilisée par le client

Vous pouvez également consulter les métriques DatabaseMemoryUsageCountedForEvictPercentage et DatabaseMemoryUsagePercentage d’Amazon CloudWatch. S'il existe une différence significative d'utilisation de la mémoire entre les deux métriques, cela est dû aux tampons de sortie du client.

Remarque : La métrique DatabaseMemoryUsagePercentage inclut également la charge des connexions et l'utilisation de la mémoire tampon de sortie du client.

Bonnes pratiques

Pour réduire les problèmes de déséquilibre de la mémoire, appliquez les bonnes pratiques suivantes.

Configurer les paramètres TTL

Définissez des valeurs de durée de vie (TTL) adaptées aux clés. Lorsque vous configurez les valeurs TTL appropriées, le nœud Valkey supprime automatiquement les clés dont la TTL est écoulée et optimise l'utilisation de la mémoire. Pour en savoir plus, consultez la page TTL sur le site Web de Redis.

Examiner vos métriques de mémoire

Il est recommandé d’examiner régulièrement les métriques de mémoire de clé suivantes sur vos partitions afin d'identifier rapidement les déséquilibres et de prendre des mesures proactives :

  • DatabaseMemoryUsagePercentage : Suivez l'utilisation globale de la mémoire sur le nœud.
  • DatabaseMemoryUsageCountedForEvictPercentage : Pour détecter une utilisation élevée de la mémoire tampon et une utilisation en surcharge, comparez avec DatabaseMemoryUsagePercentage.
  • BytesUsedForCache : Surveillez la mémoire réelle utilisée par les données mises en cache.
  • CurrItems : Suivez le nombre d'éléments stockés dans chaque partition.
  • SwapUsage : Suivez la quantité de swap utilisée sur un hôte.
    Remarque : Il est courant qu'ElastiCache présente une certaine utilisation de swap (SwapUsage). Une utilisation normale n'entraîne pas de problèmes de latence. Si SwapUsage dépasse 300 Mo, vérifiez la sollicitation de la mémoire. Pour plus d'informations, consultez la section De quelle quantité de mémoire réservée avez-vous besoin ?

Améliorer vos nœuds

Pour gérer les clés volumineuses et les modèles d'accès fréquents, mettez à l’échelle temporairement votre cluster ElastiCache afin de fournir des ressources supplémentaires en termes de processeur et de mémoire.

Informations connexes

Comment puis-je vérifier l’utilisation de la mémoire dans un cluster ElastiCache for Redis créé par mes soins et mettre en œuvre les bonnes pratiques pour contrôler l’utilisation élevée de la mémoire ?

Modèle de distribution de clé sur le site Web de Valkey

Mise à jour d'Amazon ElastiCache : redimensionnement en ligne pour les clusters Redis

Comment remédier à une augmentation de l’activité d’échange dans mes instances ElastiCache ?

AWS OFFICIELA mis à jour il y a un an