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 cachecache/frontend/default/backend_options/cleanup_percentage
.
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.
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"
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.
-
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
-
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"
-
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. -
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
-
Ajoutez le numéro de port au fichier de configuration
.magento.env.yaml
.IMPORTANT
Configurez le port de session Redis uniquement siece-tools
ne parvient pas à le détecter automatiquement à partir de la définition du service de sessionMAGENTO_CLOUD_RELATIONSHIPS
Redis.REMARQUE
disable_locking
doit être défini sur1
.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
-
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