Cache

Almacenamiento en caché

La técnica de almacenamiento en caché consiste en guardar temporalmente los datos en un componente más eficaz para acelerar el acceso a la información. A continuación, cada vez que se solicitan algunos datos y están presentes en la memoria caché, la latencia al acceder a ellos es extremadamente baja.

En situaciones de alta demanda, con un gran volumen de peticiones, el uso de almacenamiento en caché trae ganancias sustanciales de rendimiento. El API Manager implementa la funcionalidad de almacenamiento en caché para cualquier operación (del método HTTP GET) de una API.

Interceptores Cache Write y Cache Read

El interceptor Cache Write, cuando se inserta en el flujo de respuesta (response) de una operación GET determinada, creará una memoria caché basada en la configuración informada. A partir de la segunda petición, el sistema utilizará la respuesta almacenada en la memoria. Para habilitar esto, agregue un interceptor Cache Read en el flujo de petición (request):

cache flow

Cuando se configura el almacenamiento en caché, se pueden incluir atributos de header o de URL para determinar la entrada de caché que se debe utilizar, además de la hora de expiración de los datos almacenados en caché (tiempo de vida).

cache write

El interceptor Cache Read es responsable de identificar una memoria caché existente mediante el nombre de caché (cache name) informado. Cuando se envía una petición a una operación almacenada en caché, el interceptor identifica la memoria caché e inserta la respuesta guardada en la llamada. Esto significa una ganancia de rendimiento, ya que no es necesario enviar la petición al servidor.

cache read
El nombre de la memoria caché debe ser el mismo que el registrado en el interceptor Cache Write.

Interceptor Cache Invalidation

El interceptor Cache Invalidation es responsable de invalidar una memoria caché determinada, en función del nombre de caché informado. Cuando se inserta en una operación determinada, el sistema buscará y eliminará la memoria caché.

cache invalidation

Clave de caché (cache key)

Las respuestas de los datos de caché no tienen que ser siempre las mismas, pueden variar en función de los elementos predefinidos. La clave de caché identifica las diferentes respuestas almacenadas. Todos los elementos de la petición (URL, headers, parámetros de consulta, etc.) que influyen en la respuesta deben formar parte de la clave. Los elementos que no influyen en la respuesta se pueden dejar fuera.

La dirección URL siempre forma parte de la clave.
  • Si la respuesta a una llamada se puede reutilizar globalmente — como una lista de ciudades, por ejemplo — entonces la URL es suficiente como clave. Esto significa que después del primer acceso a, por ejemplo, GET /cities, todos los demás accesos, incluso por otras aplicaciones o usuarios, recibirán la misma respuesta de la memoria caché.

  • Si la URL es la misma, pero la respuesta es diferente dependiendo del usuario o aplicación utilizada (por ejemplo, GET/preferences devuelve datos diferentes dependiendo del usuario involucrado en la llamada), entonces ese usuario/aplicación debe ser parte de la clave.

  • Otras informaciones que influyen en la respuesta — como los parámetros de consulta utilizados para el filtrado (por ejemplo, GET/products?orderBy=date frente a . GET /products?orderBy=price) — también deben formar parte de la clave.

  • Los parámetros de paginación también son candidatos a formar parte de la clave (por ejemplo: GET /products?page=1 frente a GET /products?page=2).

Para informar cómo se debe formar la clave de caché, el administrador debe rellenar dos campos, después de seleccionar el interceptor Cache Write en el flujo de respuesta (response):

cache key
  • El campo Headers to include in cache key debe ser una lista, separada por comas, de headers HTTP que se debe utilizar para componer la clave. Por ejemplo: el valor client_id, access_token hace que los headers client_id y access_token formen parte de la clave.

  • El campo Query-params to include in cache key funciona como el campo anterior, pero especifica los parámetros de consulta que se agregarán. En los ejemplos anteriores, la clave de caché tendría en cuenta los parámetros de consulta orderBy, page.

Sub-recursos

Al capturar la memoria caché para las respuestas existentes, el gateway solo tendrá en cuenta las direcciones URL que son exactamente las mismas que las solicitadas. Esto significa que una regla que configura la memoria caché del recurso /products no establece la memoria caché del recurso /products/{id}; de hecho, para la API, ambos son dos recursos completamente separados.

Tenga en cuenta, sin embargo, que si se crea una regla de almacenamiento en caché para el recurso /products/{id}, el gateway almacenará en caché diferentes respuestas a /products/123 y /products/456, como se espera. Esto significa que peticiones a productos populares a menudo se servirán desde la memoria caché, mientras que los productos menos vistos no estarán en la memoria caché y las peticiones se dirigirán directamente al servidor.

Las reglas anteriores sobre los headers y los parámetros de consulta que forman parte de la memoria caché se aplican también a los recursos, como /products/{id}.

Tiempo de vida (time to live)

Cada regla de caché especifica un período de tiempo en el que la memoria caché se considera válida. Después de este tiempo, las respuestas en esta memoria caché se descartan. Tenga en cuenta que los valores ​están en segundos; normalmente, las cachés de respuesta de APIs pueden durar de unos segundos a unas pocas horas, no más que esto.

Tamaño máximo

Internamente, el gateway tiene un límite práctico a la cantidad de bytes que puede almacenar en la memoria. El propósito de esto es proteger la propia infraestructura del gateway, de modo que una respuesta demasiado grande no ocupará la memoria durante demasiado tiempo. En general, este límite es lo suficientemente grande como para acomodar muchas llamadas de tamaño razonable; pero si se alcanza el umbral, las nuevas respuestas solo se almacenarán después de que se eliminen algunas.

Actualización de caché

La memoria caché se actualiza cuando expira su tiempo de vida y se realiza una petición para una operación que tiene los interceptores Cache Write y Cache Read en su flujo. Para deshabilitar una memoria caché, inserte un interceptor Cache Invalidation con el mismo nombre de caché en una operación.

Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]