Hazelcast Cache Manager

Introducción

El caché puede ser definido como una capa de almacenamiento de datos que se almacenan de forma temporal y que pueden ser recuperados a gran velocidad. De esta forma, en futuras peticiones, los datos pueden ser obtenidos de forma rápida y sencilla, incrementando la velocidad de procesos en programas activos.

Con el uso de cachés se obtienen ventajas:

  • Mejora en el rendimiento de aplicaciones.

  • Reducción de costes. Con bases de datos tradicionales y almacenamiento en discos, aumentar recursos no implica que mejore la latencia como lo hace el uso del caché.

  • Reducción de carga en el back end.

  • Incremento en el rendimiento de lectura, reducción de latencia y mucho mejor respuesta comparado con almacenamiento en disco.

Este ejemplo explica cómo usar la funcionalidad de Administrador Caché donde se almacenan diferentes tipos de datos como resultados de queries, peticiones y respuestas de APIs, páginas web e información de sesiones de ususarios entre otros.

Este servicio usa Hazelcast, un sistema de almacenamiento, el cual ayuda a gestionar los datos y distribuir el proceso de almacenamiento de memoria y la ejecución paralela. La distribución de arquitectura de Hazelcast proporciona redundancia para el tiempo de actividad continua de los clúster y disponibilidad de datos para servir a las aplicaciones más exigentes. La capacidad crece con la demanda, sin comprometer el rendimiento o la disponibilidad.

Uno de los usos que puede darse a la gestión de cachés es la creación de datos de un archivo o base de datos disponible desde una API. Simplemente con la lectura de los datos y su carga en el caché se puede tener acceso a ellos mediante diferentes endpoints.

¿Cómo crear una Caché?

Para esto, es necesario utilizar un rol con carácter de administrador e ir al menú: Administración > Gestión de Caché.

Una vez en el gestor de caché se hace click en “Nuevo”:

Para crear un nuevo caché es necesario indicar el nombre, tipo, política de tamaño máximo, tamaño y norma de exclusión.

Actualmente, el mapa de tipo caché es el único con soporte, las normas de máximo tamaño pueden ser:

  • PER_NODE: número máximo de entradas del mapa en cada miembro del clúster. Es la norma por defecto.

  • PER_PARTITION: número máximo de entradas del mapa dentro de cada partición.

  • USED_HEAP_SIZE: máximo tamaño, en megabytes, usado en la pila por cada instancia del mapa.

  • USED_HEAP_PERCENTAGE: máximo tamaño usado en la pila, en porcentaje, por cada instancia del mapa.

  • FREE_HEAP_SIZE: mínimo tamaño libre en la pila, en megabytes, por cada JVM.

  • FREE_HEAP_PERCENTAGE: mínimo tamaño libre en la pila, en porcentaje, por cada JVM.

  • USED_NATIVE_MEMORY_SIZE: máxima memoria nativa usada en megabytes por mapa para cada instancia.

  • USED_NATIVE_MEMORY_PERCENTAGE: máxima memoria nativa usada en porcentaje por mapa para cada instancia.

  • FREE_NATIVE_MEMORY_SIZE: mínima memoria nativa libre en megabytes por cada instancia.

  • FREE_NATIVE_MEMORY_PERCENTAGE: mínima memoria nativa libre en porcentaje por cada instancia.

Las normas de exclusión son:

  • LRU: menos usado recientemente.

  • LFU: menos usado con frecuencia.

  • NONE: en caso de elegir none, ningún objeto es excluido y la propiedad de máximo tamaño descrita es ignorada.

  • RANDOM

 

REST API

Para trabajar con el caché es necesario conocer las especificaciones del API REST. Se puede acceder desde la sección de APIs de la plataforma (https://lab.onesaitplatform.com/controlpanel/swagger-ui.html).

Una vez el caché sea creado, la información puede ser insertada dentro mediante los dos últimos endpoints, introduciendo los pares clave-valor deseados. En este caso, se introducirán muchos valores al mismo tiempo para el mapa UserCache.

Posteriormente, la aplicación puede listar los datos con las operaciones de obtención, indicando el identificador de caché y las claves de los valores deseados. Si se quiere comprobar el usuario registrado en un día específico lo que tenemos que hacer es meter ese día como clave.

La respuesta que devuelve la petición es la siguiente:

Se utilizan diferentes métodos del API en caso de querer conocer todos los valores o solo uno, getAll y get/{key} respectivamente.

De esta forma se puede controlar los datos del caché, actualizándolos y consultándolos.

Para limpiar el caché lo único que se necesita es el identificador y todos los datos serán borrados.