Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El generador de API de datos admite largamente los encabezados de solicitud HTTP de nivel 1 (L1) en memoria y relacionados con la memoria caché, como no-store, no-cachey only-if-cached para influir en el comportamiento de la caché.
La caché de nivel 2 (L2) amplía el almacenamiento en caché más allá del proceso local agregando una capa de caché distribuida. Con L2, los resultados almacenados en caché se pueden reutilizar en varias instancias de DAB y pueden sobrevivir a reinicios de contenedor individuales, lo que hace que las implementaciones sin estado se sientan menos sin estado de todas las maneras adecuadas.
Ventajas de la caché de nivel 2
Use la caché de nivel 2 cuando desee:
- Uso compartido de resultados almacenados en caché en instancias daB escaladas horizontalmente
- Reducción de los recorridos de ida y vuelta de la base de datos para lecturas repetidas
- Mantener los contenedores sin estado activados después de reciclar o volver a implementar
- Mejora del rendimiento de las cargas de trabajo de lectura intensiva
- Participación en la caché de espacios de nombres con particiones
Configuración de la caché en tiempo de ejecución
La caché de nivel 2 se configura globalmente en runtime.cache. El bloque de caché en tiempo de ejecución habilita el almacenamiento en caché, establece el período predeterminado de vida (TTL) y configura el proveedor de caché distribuida.
{
"runtime": {
"cache": {
"enabled": true,
"ttl-seconds": 30,
"level-2": {
"enabled": true,
"provider": "redis",
"connection-string": "localhost:6379",
"partition": "prod-api"
}
}
}
}
Propiedades en tiempo de ejecución
| Propiedad | Descripción |
|---|---|
enabled |
Habilita la compatibilidad con la memoria caché globalmente. |
ttl-seconds |
Establece el período de vida predeterminado de la memoria caché en segundos. |
level-2.enabled |
Activa el nivel de caché distribuida. |
level-2.provider |
Selecciona el proveedor de caché distribuida. Actualmente redis se admite. |
level-2.connection-string |
Cadena de conexión para la instancia de Redis. |
level-2.partition |
Espacio de nombres opcional para las claves de Redis y el canal backplane. Solo los contenedores que usan la misma partición comparten el mismo espacio de caché distribuida. |
Configuración del comportamiento de la caché específica de la entidad
Las entidades pueden invalidar el comportamiento de la caché global. Use el bloque de entidades cache para habilitar el almacenamiento en caché, establecer un TTL personalizado y elegir el nivel de caché.
{
"entities": {
"Products": {
"source": "dbo.Products",
"cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
},
"Orders": {
"source": "dbo.Orders",
"cache": { "enabled": true, "level": "L1" }
}
}
}
La propiedad cache.level
Use cache.level para controlar qué niveles de caché usa una entidad.
| Importancia | Descripción |
|---|---|
L1 |
Solo caché en memoria. Rápido y local al proceso DAB actual. |
L1L2 |
Memoria en memoria más caché distribuida. Este nivel es el valor predeterminado para las entidades almacenadas en caché. |
Si L2 no está habilitado globalmente, una entidad configurada con L1L2 se comporta como L1.
Funcionamiento de L1L2
Sugerencia
TL; DRL1L2 = Solicitud de → respuesta de → L1 → L2 → base de datos → L2 → L1 →
De forma predeterminada, una entidad con almacenamiento en caché habilitado usa el nivel L1L2.
-
L1es la caché en memoria por proceso. -
L2es la capa de caché distribuida, actualmente Redis, además de un backplane para la coherencia entre instancias.
Con L1L2, una búsqueda de caché primero comprueba L1. En caso L1 de error, comprueba L2 si el almacenamiento en caché de nivel 2 está habilitado globalmente y configurado. Si la entrada no se encuentra en ninguna capa, DAB ejecuta la consulta de base de datos. A continuación, el resultado se almacena en L1 y L2.
Esto significa lo siguiente:
- Las solicitudes futuras en la misma instancia se sirven desde local
L1 - Las solicitudes de otras instancias pueden leer
L2y promover la entrada en su propiaL1 - Si se reinicia un contenedor, un
L1error seguido de unL2acierto puede evitar un recorrido de ida y vuelta de la base de datos.
Esta combinación proporciona una caché distribuida cálida en instancias escaladas o recicladas.
Compatibilidad con Redis
Redis es el proveedor actual de la caché de nivel 2. Es adecuado para este escenario porque admite:
- Acceso compartido entre varias instancias de DAB
- Expiración de claves para el almacenamiento en caché basado en TTL
- Lecturas y escrituras rápidas para cargas de trabajo de alto rendimiento
- Coordinación entre instancias de backplane
Espacios de caché con particiones
Use la configuración opcional partition para aislar la actividad de caché distribuida. DAB usa el valor de partición para las claves de Redis del espacio de nombres y el canal backplane. Solo los contenedores que comparten la misma partición participan en el mismo espacio de caché distribuido.
Esta configuración es útil cuando desea:
- Separación del tráfico de producción y no producción
- Aislamiento de inquilinos o entornos
- Impedir que los servicios no relacionados compartan entradas almacenadas en caché