Introducción
Garnet es solución de almacenamiento de caché remoto proveniente de Microsoft Research. Esta diseñada para ofrecer una gran velocidad, capacidad de extensión y baja latencia. Este sistema es escalable a nivel de hilos dentro de un solo nodo y también admite la ejecución en clústeres fragmentados, con replicación, puntos de control, recuperación ante fallos y transacciones. Garnet puede funcionar tanto en memoria principal como en almacenamiento jerarquizado (como SSD y Azure Storage), y ofrece una API, además de un modelo de extensibilidad.
Garnet adopta el protocolo RESP de Redis para su comunicación, permitiendo el uso de clientes Redis standar (sin personalización) disponibles en la mayoría de los lenguajes de programación, como StackExchange.Redis en C#.
Garnet promete, en comparación con otras soluciones de almacenamiento de caché de código abierto, proporcionar un rendimiento, latencia, extensibilidad y características de durabilidad superiores.
Ten en cuenta que Garnet es un proyecto de investigación de Microsoft Research y debe considerarse como tal, aunque ya tenga la suficiente calidad.
Las ventajas clave de Garnet:
- Un rendimiento del servidor órdenes de magnitud superior (operaciones por segundo) con pequeños lotes y muchas sesiones de cliente, en comparación con otras soluciones de caché de código abierto.
- Latencia extremadamente baja en operaciones individuales (a menudo menos de 300 microsegundos en el percentil 99,9) en máquinas en la nube (Azure) con TCP acelerado, tanto en Windows como en Linux.
- Mejor escalabilidad al aumentar el número de clientes, con o sin agrupación por parte del cliente.
- La capacidad de utilizar todos los recursos de CPU/memoria de una máquina servidor con una sola instancia de servidor de memoria compartida (sin necesidad de clúster intra-nodo).
- Soporte para conjuntos de datos más grandes que la memoria, desbordando a dispositivos de almacenamiento locales y en la nube.
- Características de bases de datos como puntos de control y recuperación rápidos, y publicación/suscripción.
- Soporte para particionamiento hash fragmentado en múltiples nodos (modo «clúster» de Redis), migración de estado y replicación.
- Bien probado con un conjunto de pruebas exhaustivo (miles de pruebas unitarias en Garnet y su capa de almacenamiento Tsavorite).
- Un código base en C# fácil de evolucionar y extender.
API
Actualmetne incluye:
- Operaciones con cadenas de texto como GET, SET, MGET, MSET, GETSET, SETEX, DEL, EXISTS, RENAME, EXPIRE, variantes de SET (establecer si existe, establecer si no existe).
- Operaciones numéricas como INCR, INCRBY, DECR, DECRBY.
- Operaciones de punto de control/recuperación como SAVE, LASTSAVE, BGSAVE.
- Operaciones básicas de administración como PING, QUIT, CONFIG, RESET, TIME.
- Estructuras de datos avanzadas como List, Hash, Set, Sorted Set y Geo.
- APIs de análisis como Hyperloglog y Bitmap.
- Publicar/suscribir.
- Transacciones.
La lista esta creciendo gracias a la demanda de los usuarios. Si ves que algo te falta, entra en el proyecto de GitHub e interactua con el equipo de desarrollo.