Dimensionnement de la mémoire cache L2 (Adobe Commerce Cloud)

Le cache L2 utilise un système de fichiers temporairecomme mécanisme de stockage. Par rapport aux systèmes de base de données clé-valeur spécialisés, un système de fichiers temporaires ne dispose pas d’une politique d’éviction des clés pour contrôler l’utilisation de la mémoire.

L’absence de contrôle de l’utilisation de la mémoire peut entraîner une augmentation de l’utilisation de la mémoire cache L2 au fil du temps en accumulant le cache obsolète.

Pour éviter l’épuisement de la mémoire des implémentations du cache L2, Adobe Commerce efface le stockage lorsqu’un certain seuil est atteint. La valeur de seuil par défaut est de 95 %.

Il est important d’ajuster l’utilisation maximale de la mémoire cache L2 en fonction des exigences du projet pour le stockage en cache. Utilisez l’une des méthodes suivantes pour configurer le dimensionnement du cache de mémoire :

  • Créez un ticket d’assistance pour demander des modifications de taille du montage /dev/shm.
  • Ajustez la propriété cleanup_percentage au niveau de l’application pour limiter le pourcentage de remplissage maximal du stockage. La mémoire libre restante peut être utilisée par d’autres services.
    Vous pouvez ajuster la configuration dans la configuration de déploiement sous le groupe de configuration du cache cache/frontend/default/backend_options/cleanup_percentage.
REMARQUE
L’option configurable cleanup_percentage a été introduite dans Adobe Commerce 2.4.4.

Le code suivant illustre un exemple de configuration dans le fichier .magento.env.yaml :

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      frontend:
        default:
          backend_options:
            cleanup_percentage: 90

Les exigences de cache peuvent varier en fonction de la configuration du projet et du code tiers personnalisé. La portée du dimensionnement de la mémoire cache L2 permet au cache L2 de fonctionner sans trop d’accès au seuil.
Idéalement, l’utilisation de la mémoire cache L2 doit se stabiliser à un certain niveau en dessous du seuil, afin d’éviter des effacements de stockage fréquents.

Vous pouvez vérifier l’utilisation de la mémoire cache L2 sur chaque nœud du cluster à l’aide de la commande d’interface de ligne de commande suivante et en recherchant la ligne /dev/shm.
L’utilisation peut varier d’un nœud à l’autre, mais elle doit converger vers la même valeur.

df -h

Activer la connexion esclave Redis

Activez une connexion esclave Redis dans le fichier de configuration .magento.env.yaml pour permettre à un seul nœud de gérer le trafic en lecture-écriture tandis que les autres nœuds gèrent le trafic en lecture seule.

stage:
  deploy:
    REDIS_USE_SLAVE_CONNECTION: true

Voir REDIS_USE_SLAVE_CONNECTION dans le Guide de Commerce sur les infrastructures cloud.

Pour les installations sur site d’Adobe Commerce, configurez la nouvelle mise en œuvre du cache Redis à l’aide des commandes bin/magento:setup. Voir Utiliser Redis pour le cache par défaut dans le Guide de configuration.

AVERTISSEMENT
Ne configurez pas une connexion esclave Redis pour les projets d’infrastructure cloud avec une architecture mise à l’échelle/partagée. Cela entraîne des erreurs de connexion Redis. Voir Guide de configuration Redis dans le guide Commerce sur les infrastructures cloud.

Pré-charger les clés

Pour réutiliser les données entre les pages, répertoriez les clés à précharger dans le fichier de configuration .magento.env.yaml.

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      frontend:
        default:
          id_prefix: '061_'                       # Prefix for keys to be preloaded
          backend_options:
            preload_keys:                         # List the keys to be preloaded
              - '061_EAV_ENTITY_TYPES:hash'
              - '061_GLOBAL_PLUGIN_LIST:hash'
              - '061_DB_IS_UP_TO_DATE:hash'
              - '061_SYSTEM_DEFAULT:hash'

Pour les installations sur site, consultez la section Fonctionnalité de préchargement Redis du Guide de configuration.

Activer le cache obsolète

Réduisez les temps d’attente de verrouillage et améliorez les performances, en particulier lorsque vous traitez de nombreux blocs et clés de cache, en utilisant un cache obsolète tout en générant un nouveau cache en parallèle. Activez le cache obsolète et définissez les types de cache dans le fichier de configuration .magento.env.yaml :

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      default:
        backend_options:
          use_stale_cache: false
      stale_cache_enabled:
        backend_options:
          use_stale_cache: true
      type:
        default:
          frontend: "default"
        layout:
          frontend: "stale_cache_enabled"
        block_html:
          frontend: "stale_cache_enabled"
        reflection:
          frontend: "stale_cache_enabled"
        config_integration:
          frontend: "stale_cache_enabled"
        config_integration_api:
          frontend: "stale_cache_enabled"
        full_page:
          frontend: "stale_cache_enabled"
        translate:
          frontend: "stale_cache_enabled"
REMARQUE
Dans l’exemple précédent, le cache full_page n’est pas pertinent pour Adobe Commerce sur les projets d’infrastructure cloud, car ils utilisent Fastly.

Pour la configuration des installations sur site, consultez Options de cache obsolètes dans le Guide de configuration.

Séparer le cache Redis des instances de session

La séparation du cache Redis de la session Redis vous permet de gérer le cache et les sessions indépendamment. Cela empêche les problèmes de cache d’affecter les sessions, ce qui pourrait avoir un impact sur le chiffre d’affaires. Chaque instance Redis s’exécute sur son propre noyau, ce qui améliore les performances.

  1. Mettez à jour le fichier de configuration .magento/services.yaml.

    mysql:
        type: mysql:10.4
        disk: 35000
    
    redis:
       type: redis:6.0
    
    redis-session:              # This is for the new Redis instance
       type: redis:6.0
    
    search:
       type: elasticsearch:7.9
       disk: 5000
    
    rabbitmq:
       type: rabbitmq:3.8
       disk: 2048
    
  2. Mettez à jour le fichier de configuration .magento.app.yaml.

    relationships:
        database: "mysql:mysql"
        redis: "redis:redis"
        redis-session: "redis-session:redis"   # Relationship of the new Redis instance
        search: "search:elasticsearch"
        rabbitmq: "rabbitmq:rabbitmq"
    
  3. Envoyez un ticket d’assistance Adobe Commerce pour demander la mise en service d’une nouvelle instance Redis dédiée aux sessions dans les environnements de production et d’évaluation. Incluez les fichiers de configuration .magento/services.yaml et .magento.app.yaml mis à jour. Cela n’entraîne pas d’interruption, mais un déploiement est nécessaire pour activer le nouveau service.

  4. Vérifiez que la nouvelle instance est en cours d’exécution et notez le numéro de port.

    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    
  5. Ajoutez le numéro de port au fichier de configuration .magento.env.yaml.

    IMPORTANT
    Configurez le port de session Redis uniquement si ece-tools ne parvient pas à le détecter automatiquement à partir de la définition du service de session MAGENTO_CLOUD_RELATIONSHIPS Redis.
    REMARQUE
    disable_locking doit être défini sur 1.
    SESSION_CONFIGURATION:
      _merge: true
      redis:
        port: 6374 # check the port in $MAGENTO_CLOUD_RELATIONSHIPS and put it here (by default, you can delete this line!!)
        timeout: 5
        disable_locking: 1
        bot_first_lifetime: 60
        bot_lifetime: 7200
        max_lifetime: 2592000
        min_lifetime: 60
    
  6. Supprimez les sessions de la base de données par défaut (db 0) sur l’instance de cache Redis.

    redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
    

Pendant le déploiement, les lignes suivantes doivent s’afficher dans le journal de génération et de déploiement :

W:   - Downloading colinmollenhour/credis (1.11.1)
W:   - Downloading colinmollenhour/php-redis-session-abstract (v1.4.5)
...
W:   - Installing colinmollenhour/credis (1.11.1): Extracting archive
W:   - Installing colinmollenhour/php-redis-session-abstract (v1.4.5): Extracting archive
...
[2022-08-17 01:13:40] INFO: Version of service 'redis' is 6.0
[2022-08-17 01:13:40] INFO: Version of service 'redis-session' is 6.0
[2022-08-17 01:13:40] INFO: redis-session will be used for session if it was not override by SESSION_CONFIGURATION