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 de una API.

¿Cómo generar y eliminar la caché?

El control de uso de caché en respuesta a las peticiones a las APIs se realiza mediante interceptores.

Para crear caché y usarla en llamadas, debe utilizar dos interceptores: Cache Write se utiliza para crear la caché, y Cache Read se utiliza para devolver respuestas desde la caché creada. Para borrar la caché, debe usar un otro interceptor: Cache Invalidation.

Vamos a entender el funcionamiento parte por parte.

En primer lugar, es importante tener en cuenta que la caché se maneja en el nivel de operación. Por lo tanto, si está editando el flujo de una API y no puede encontrar los interceptores de caché, verifique el campo Operations encima de la visualización del flujo. Si usted seleccionó la opción «All», los interceptores de caché no se mostrarán. En este caso, seleccione una operación específica para ver los interceptores y, si lo desea, arrástrelos al flujo.

Para almacenar una respuesta en caché, debe insertar el interceptor Cache Write en el flujo de respuesta (response) de una operación. Si la petición se realiza correctamente, el Manager crea una caché basada en la configuración introducida. Para que el sistema utilice la respuesta en memoria, debe incluir el interceptor Cache Read en el flujo de petición (request) de la operación. Tenga en cuenta que el «Cache Name» configurado debe ser el mismo en ambos interceptores.

Para borrar la respuesta en memoria, inserte el interceptor Cache Invalidation en el flujo de petición o respuesta de una operación, con el mismo «Cache Name» establecido en los interceptores Cache Write y Cache Read.

Para borrar toda la caché (así como controlar el volumen de caché), vaya a Settings  Cache Control (la página solo aparece si su usuario tiene permiso de «Cache Control» — por defecto, solo para Super Admins). Vea más sobre control de caché aquí.

En los casos en que la respuesta de la llamada es manejada por un Interceptor personalizado, debe utilizar otro Interceptor personalizado para detener el flujo cuando se rellena el Cache Read. Esto evita que ocurra un error de manejo en la caché. El interceptor que detendrá el flujo debe insertarse en cualquier posición después del interceptor de lectura de caché.

Interceptores Cache Write y Cache Read

El interceptor Cache Write, cuando se inserta en el flujo de respuesta (response) de una operación 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 debe formarse la clave de caché, deben rellenarse dos campos después de insertar el interceptor Cache Write en el flujo de respuesta:

cache key

Headers to include in cache key: Introduce una lista separada por comas de nombres de headers HTTP que deberán usarse para componer la clave.

  • Por ejemplo, el valor client_id, access_token hace que se utilicen los headers client_id y access_token para componer la clave.

  • Query-params to include in cache key: Introduce una lista separada por comas de nombres de query-params que deberán usarse para componer la clave.

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]