HCL Commerce Version 9.1.10.0 or later

HCL Cache - interruptores de circuito

HCL Cache implementa interruptores de circuito para la memoria caché remota para proteger la aplicación de un servidor Redis que este fallando o no disponible.

Si un interruptor de circuito detecta que un servidor Redis está fallando, impide nuevas solicitudes al servidor Redis durante un periodo de tiempo. Los interruptores de circuito se utilizan además de las configuraciones de disponibilidad alta proporcionadas por Kubernetes y el propio Redis, como réplicas.

Memorias caché locales:
Como los mensajes de invalidación no se pueden enviar ni recibir durante una interrupción de Redis, las memorias caché locales implementan un tiempo de espera más corto para entradas nuevas y existentes. De forma predeterminada, el tiempo de espera durante las interrupciones se configura en cinco minutos.
Memorias caché solo remotas
Las memorias caché solo remotas no están disponibles durante una interrupción de Redis.

La configuración predeterminada se puede interpretar de la siguiente manera: Si hay al menos 20 fallos consecutivos (como se ha establecido en minimumConsecutiveFailures), durante un periodo de al menos 10 segundos (como se ha establecido en minimumFailureTimeMs), abra el circuito (impedir nuevas conexiones) durante un minuto (el intervalo establecido en retryWaitTimeMs). Después de ese tiempo, permita nuevas consultas a Redis, pero si las dos primeras solicitudes (minimumConsecutiveFailuresResumeOutage) siguen fallando, vuelva a abrir el circuito durante otro minuto.

El tiempo de espera de solicitud Redis ha terminado.

Las solicitudes de Redis lentas no se consideran errores a menos que superen el tiempo de espera. El cliente de Redis tiene configuraciones para tiempos de espera excedidos e intentos de reintento, incluidos:
timeout: 3000
 retryAttempts: 3
 retryInterval: 1500

Teniendo en cuenta los reintentos, con la configuración anterior una solicitud necesitará 16,5 segundos antes de devolver una señal de error (3000+3*(3000+1500)). Los tiempos de espera pueden ser más agresivos, pero esto puede dar lugar a errores esporádicos en los registros.

Configuraciones del interruptor de circuito

Las configuraciones del interruptor de circuito se pueden ajustar utilizando la configuración de YAML de memoria caché .

La configuración para el interruptor de circuito está disponible en el archivo YAML de memoria caché en redis, circuitBreaker. El tiempo de espera máximo para las memorias caché locales en modalidad de interrupción se configura utilizando el elemento maxTimeToLiveWithRemoteOutage bajo localCache, como en el ejemplo siguiente:

redis:
  circuitBreaker:
    scope: auto
    retryWaitTimeMs: 60000
    minimumFailureTimeMs: 10000
    minimumConsecutiveFailures: 20
    minimumConsecutiveFailuresResumeOutage: 2
cacheConfigs:
  defaultCacheConfig:
    localCache:
      enabled: true
      maxTimeToLiveWithRemoteOutage: 300   
Valor Valor predeterminado Utilización
scope automático En función de la topología, los interruptores de circuito deben configurarse en el cliente (configuración de un solo interruptor de circuito para todos) o en el nivel de memoria caché/fragmento. HCL Cache selecciona automáticamente el ámbito en función de la configuración utilizada: El nivel de memoria caché se utiliza cuando la topología es clúster y HCL Commerce no puede conectarse a Redis durante el inicio o el valor cluster-require-full-coverage se establece en false. De lo contrario, el ámbito se establece en client.
minimumConsecutiveFailures 20 El número mínimo de errores de intentos de conexión consecutivos antes de que una memoria caché se pueda establecer en modalidad de interrupción. Esta valor, y minimumFailureTimeMs debe satisfacerse antes de que el interruptor de circuito rompa la conexión de Redis. Tenga en cuenta que cualquier operación satisfactoria restablece este contador.
minimumFailureTimeMs 10000 (10 segundos) El tiempo, en milisegundos, que debe transcurrir antes de que una memoria caché se pueda poner en modalidad de interrupción. Esta cantidad de tiempo, y minimumConsecutiveFailures debe satisfacerse antes de que el interruptor de circuito rompa la conexión de Redis.
retryWaitTimeMs 60000 (60 segundos) Una vez que se ha establecido una memoria caché en modalidad de interrupción, retryWaitTimeMs es el tiempo, en milisegundos, que debe transcurrir antes de que se reintente la conexión de Redis.
minimumConsecutiveFailuresResumeOutage 2 El número mínimo de errores de intentos de conexión consecutivos antes de que una memoria caché se pueda volver a establecer en modalidad de interrupción. Cuando una conexión está en modalidad de interrupción y alcanza el valor de retryWaitTimeMs, el interruptor de circuito permitirá intentos de conexión al servidor de Redis. Para permitir una rápida prueba de la conexión sin un exceso indebida de intentos de conexión, se utiliza el valor minimumConsecutiveFailuresResumeOutage. Si se alcanza minimumConsecutiveFailuresResumeOutage, la conexión se vuelve a poner en modalidad de interrupción, sin tener que esperar a que se cumpla de nuevo el ciclo de condición completo de minimumFailureTimeMs y minimumConsecutiveFailures.