A menudo nuestros sistemas se vuelven más lentos en responder, porque son necesarios varios accesos a base de datos, o es necesario realizar varios cálculos antes.

Otras veces sólo necesitamos velocidad a la hora de obtener determinados datos de memoria, por ejemplo para validar tokens de sesión o para datos de uso frecuentes en cálculos.

Cuando se nos plantean estas circunstancias, entre otras, probablemente lo que nuestro sistema necesita sea incorporar un sistema de caché.

En este post vamos a hablar de los sistemas de caché que podemos utilizar. Veremos una descripción general de qué son, qué tipos hay y cuáles son los más populares.

¿Qué es una caché?

La mayoría ya sabréis qué es una caché, pero para aquellos que no lo tengan tan claro, podemos definirla como una capa de almacenamiento de datos de alta velocidad que almacena temporalmente información.

De este modo, en futuras peticiones, podrán servirse de forma más rápida los datos, que si se ha de ir al sistema de almacenamiento principal; o servir cálculos previamente realizados, sin necesidad de volver a repetirlos.

Con el uso de cachés se obtienen una serie de ventajas:

El orden en el que se almacenan los datos en la caché dependerá de cuáles son los más requeridos; permanecerán los más solicitados, mientras que los que menos se usen se borrarán de la caché, pero no del sistema principal.

El desalojo de los elementos de caché dependerá de las políticas de desalojo que se establezcan o del timeout de los elementos.

Habitualmente las cachés suelen usarse para almacenar:

¿Qué tipos de caché hay?

Caché local o en proceso

Están contenidas en la aplicación, comparten el mismo espacio dinámico de memoria. Ejemplos de este tipo de caché Google Guava Cache, EhCache (aunque también proporciona posibilidad de configurarla en modo distribuido), etc.

Caché para sistemas distribuidos

Puede estar desplegada en uno o varios nodos formando una gran caché lógica**, puede ser externa a la aplicación o interna. Ejemplos de este tipo encontramos, por ejemplo Redis, MongoDB in Memory, Memcached, etc.**

¿Cuáles son los más populares?

Redis

Redis, de Redis Lab, es un sistema de almacenamiento de estructura de datos en memoria de código abierto. Además de usarse como caché, también se puede utilizar como base de datos y como broker de mensajería.

Hazelcast

Hazelcast es un sistema de almacenamiento distribuido, de código abierto, que ayuda a administrar sus datos y distribuir el procesamiento utilizando el almacenamiento en memoria y la ejecución paralela. Proporciona un recurso de memoria altamente elástico y resiliente a las aplicaciones.

MongoDB

MongoDB in memory es una base de datos documental open source, que permite fácilmente escalar, flexible y distribuida. A partir de la versión 3.2.6 el motor de almacenamiento en memoria forma parte de la disponibilidad general de (GA) en las compilaciones de 64 bits.

A parte de algunos metadatos y datos de diagnóstico no almacena nada en disco, lo que permite una latencia más predecible de las operaciones de base de datos.

Couchbase

Couchbase dispone de una solución para caché que ofrece un alto rendimiento, es fácil de implementar, escalar y administrar. Es una base de datos open source, distribuida, NoSQL orientada a documentos.

Expone una caché clave-valor para consultas rápidas y un potente motor de consultas para consultas de tipo SQL. Para entornos móviles e Internet de las Cosas (IoT) Couchbase también puede ejecutarse nativamente en el dispositivo y gestionar la sincronización con el servidor.

Couchbase Inc es una compañía privada de software que desarrolla y proporciona paquetes comerciales y soporte para Couchbase Server y Couchbase Lite ambos de código abierto, NoSQL, multimodelo, base de datos orientada a documentos, almacena documentos en formato JSON or base de datos como clave-valor.

La tecnología Couchbase Cross Datacenter Replication (XDCR) está diseñada para la nube, con características como el filtrado de datos, detección de cambios en la topología e integra tolerancia de fallos. Se puede migrar datos distribuidos a través de clusters y nubes de forma fácil.

Memcached

Memcached es un sistema de almacenamiento en memoria distribuida, open source, de alto rendimiento y de uso general. Es simple pero muy potente. Tiene como principales características:

Ehcache

Ehcache es un sistema de caché clave-valor, opensource, basada en estándares, que aumenta el rendimiento, al descargar la base de datos y simplificar la escalabilidad. Tiene integración con diferentes frameworks y librerías.

Es usada en diferentes tipologías Standalone (se mantiene en un sólo nodo, sin comunicación entre nodos.

Si hay varias instancias de una aplicación, entonces existe coherencia débil entre ellos), Distribuido (Los datos se mantienen a través de un conjunto de servidores Terracotta y dispone de un conjunto de modos de consistencia) y en modo Replicado (los datos se mantienen en todos los nodos y se replican en el clúster sin bloqueo, replicación síncrona o asíncrona. Consistencia débil en esta topología).

Conclusión

Son muchas las opciones que existen en el mercado, pero cuál elegir dependerá, entre otras cosas, de las necesidades concretas del proyecto y de la arquitectura.

En Paradigma nos gustan las tecnologías y nos gusta estar a la última en las tendencias tecnologías pero a la hora de elegir cuál usar, siempre intentamos buscar la que mejor encaje con las necesidades del proyecto.

Cuéntanos qué te parece.

Enviar.

Los comentarios serán moderados. Serán visibles si aportan un argumento constructivo. Si no estás de acuerdo con algún punto, por favor, muestra tus opiniones de manera educada.