HCL Cache - circuit breakers
HCL Cache implémente des circuit breakers pour le cache distant afin de protéger l'application contre un serveur Redis défaillant ou indisponible.
Si un circuit breaker détecte qu'un serveur Redis échoue, il empêche les nouvelles requêtes adressées au serveur Redis pendant une période donnée. Les circuit breakers sont utilisés en plus des configurations à haute disponibilité fournies par Kubernetes et Redis lui-même, telles que les répliques.
- Caches locaux
- Etant donné que les messages d'invalidation ne peuvent pas être envoyés ou reçus lors d'une panne Redis, les caches locaux implémentent un délai d'attente plus court pour les entrées nouvelles et existantes. Par défaut, le délai d'attente pendant les pannes est configuré sur cinq minutes.
- Caches distants uniquement
- Les caches distants uniquement deviennent indisponibles lors d'une panne Redis.
La configuration par défaut peut être interprétée comme suit : S'il y a au moins 20 échecs consécutifs (comme défini dans minimumConsecutiveFailures), sur une période d'au moins 10 secondes (comme défini dans minimumFailureTimeMs), interrompez le circuit (empêchez les nouvelles connexions) pendant une minute (intervalle défini dans retryWaitTimeMs). Après cette période, autorisez les nouvelles requêtes à Redis, mais si les deux premières requêtes (minimumConsecutiveFailuresResumeOutage) continuent d'échouer, interrompez à nouveau le circuit pendant une autre minute.
Expiration de délai de requête Redis
timeout: 3000
retryAttempts: 3
retryInterval: 1500Compte tenu des nouvelles tentatives, avec la configuration au-dessus d'une requête, il faudra 16,5 secondes avant de renvoyer un signal d'échec (3000+3*(3000+1500)). Les délais d'attente peuvent être rendus plus agressifs, mais cela peut entraîner des erreurs sporadiques dans les journaux.
Configurations du circuit breaker
Les configurations du circuit breaker peuvent être ajustées à l'aide de la configuration YAML de cache.
La configuration du circuit breakers est disponible dans le fichier YAML de cache sous redis, circuitBreaker. Le délai d'attente maximal pour les caches locaux en mode panne est configuré à l'aide de l'élément maxTimeToLiveWithRemoteOutage sous localCache, comme dans l'exemple suivant :
redis:
circuitBreaker:
scope: auto
retryWaitTimeMs: 60000
minimumFailureTimeMs: 10000
minimumConsecutiveFailures: 20
minimumConsecutiveFailuresResumeOutage: 2
cacheConfigs:
defaultCacheConfig:
localCache:
enabled: true
maxTimeToLiveWithRemoteOutage: 300
| Paramètre | Par défaut | Utilisation |
|---|---|---|
| portée | auto | Selon la topologie, les circuit breakers doivent être configurés au niveau du client (configuration de disjoncteur unique pour tous) ou au niveau du cache/fragment. HCL Cache sélectionne automatiquement la portée en fonction de la configuration utilisée : le niveau de cache est utilisé lorsque la topologie est en cluster et HCL Commerce ne parvient pas à se connecter à Redis au démarrage ou le paramètre cluster-require-full-coverage est défini sur false. Sinon, la portée est définie sur client. |
minimumConsecutiveFailures |
20 | Nombre minimum d'échecs consécutifs de tentative de connexion avant qu'un cache puisse être défini en mode panne. Cette valeur et minimumFailureTimeMs doivent être satisfaits avant que le circuit breaker ne ferme la connexion Redis. Notez que toute opération réussie réinitialise ce compteur. |
minimumFailureTimeMs |
10 000 (10 secondes) | Le temps en millisecondes qui doit s'écouler avant qu'un cache puisse être mis en mode panne. Ce laps de temps et les minimumConsecutiveFailures doivent être satisfaits avant que le circuit breaker ne ferme la connexion Redis. |
retryWaitTimeMs |
60 000 (60 secondes) | Une fois qu'un cache est réglé en mode panne, retryWaitTimeMs est le temps en millisecondes qui doit s'écouler que la connexion Redis ne fasse l'objet d'une nouvelle tentative. |
minimumConsecutiveFailuresResumeOutage |
2 | Nombre minimum d'échecs consécutifs de tentative de connexion avant qu'un cache puisse être remis en mode panne. Lorsqu'une connexion est en mode panne et atteint la valeur retryWaitTimeMs, le circuit breaker autorise les tentatives de connexion au serveur Redis. Afin de permettre un test rapide de la connexion sans excès injustifié de tentatives de connexion, la valeur minimumConsecutiveFailuresResumeOutage est utilisée. Si minimumConsecutiveFailuresResumeOutage est atteint, la connexion est remise en mode panne, sans avoir à attendre que l'ensemble du cycle de la condition minimumFailureTimeMs et minimumConsecutiveFailures soit à nouveau satisfait. |