Caché en APIs
Disponible desde release 2.3.0-immortal
Introducción
Hasta ahora todas las operaciones de los APIs REST disponibilizados en plataforma, terminan llegando a los orígenes de datos. Si bien este va a ser el funcionamiento por defecto, para determinados casos, puede convenir por velocidad en la respuesta que los datos sean accesible de una manera más rápida. Esto sucederá en orígenes de datos que no cambien en el tiempo o con poca frecuencia.
De esta forma las aplicaciones que utilicen dichos APIs se verán beneficiadas de una mejora en los tiempos de respuesta, aumentando su propio rendimiento.
Uso
Para ello, se ha implementado un nuevo mecanismo de caché sobre las operaciones de las APIs que gestiona plataforma. Esta caché utiliza el módulo de caché ya existente de plataforma para almacenar la información de forma temporal.
Cuando se define un API en plataforma desde el panel de control se podrá introducir un intervalo de cacheado (en minutos) como atributo de configuración:
Este será el tiempo en el que los registros serán válidos en la caché. Una vez superado ese periodo de permanencia, se volverá a recuperar la información del origen de datos.
Flujo de funcionamiento
El flujo de funcionamiento sería el siguiente
Cuando se realiza una invocación a un API, se comprueba si tiene definido un tiempo de cacheado de resultados. Si no lo tiene, la invocación se realiza de forma normal, sin tener en cuenta la cache.
Si el API tiene configurado un tiempo de cacheado, a partir de los parámetros de invocación (api, versión, operación, query params, usuario,…), se intenta recuperar el resultado desde la cache.
Si existe la entrada y sigue siendo válida (no ha expirado su periodo de validez), se devuelve el resultado cacheado.
Si no existe entrada para la invocación, o ha dejado de ser válida, se realiza la invocación de forma normal y se cachea su resultado para futuras invocaciones.
De esta forma se garantiza que los datos se mantienen el periodo configurado.
Consideraciones importantes
Hay que tener en cuenta ciertas consideraciones:
Es importante tener en cuenta las restricciones de acceso a datos que el usuario pueda tener establecidas, así como los distintos parámetros de invocación a la operación del API. El sistema de caché comprueba estas restricciones a la hora de acceder y almacenar registros.
Un caso especial puede ser origenes de datos que son inmutables (catálogos de datos). Para que los registros se mantengan en la caché el mayor tiempo posible, existe la opción de configurar como timeout de la cahe a “0”. Así los registros una vez almacenados en la caché, se mantendrán de forma indefinida.
Esta configuración se puede establecer tanto para APIs de ontologías, como para APIs externas a plataforma.
Además, dado que el tamaño de la cache debe ser limitado, en su configuración se establecerá la política (LRU) para extracción de registros. Es decir, cuando la caché alcance su máximo de capacidad, procederá a eliminar las entradas a las que menos se haya accedido (Less recent use). Este límite máximo de tamaño será configurable en tiempo de despliegue.
En ocasiones puede ser necesario modificar la información en las fuentes de datos. Esto podría conllevar a incongruencias con los resultados que pudieran estar cacheados (bien por que no se han eliminado por timeout, bien por que se han configurado como permanentes). Para evitar este escenario, se han implementado dos servicios.
Vaciado de caché a nivel de API: Se eliminarán de la cache todos los registros correspondientes al API - Versión. Para ello, habrá que pulsar sobre el control correspondiente del registro del listado de APIs:
Vaciado general de la caché del API Manager (Solo usuarios con ROL Administrador): Se eliminarán todos los registros de la caché. Para realizarlo, habrá que pulsar sobre la opción “Vaciar cache” de la pantalla Listado de APIs:
Todas estas operaciones, se encuentran disponibles en el API REST de plataforma:
En el API REST del panel de control: Configuración de cacheado de APIs al registrar o modificar APIS.
En el API REST de gestión del API Manager: Operaciones de vaciado de caché.