Garnet – Un nuevo almacén de caché remota de Microsoft Research
Rendimiento y arquitectura
- Los benchmarks muestran que el throughput de GET de Garnet supera con creces al de Dragonfly y Redis, con latencias de cola comparables o mejores; algunos infieren que Redis podría beneficiarse de optimizaciones importantes.
- Implementado en C# con amplio uso de
unsafey trabajo de memoria de bajo nivel; muchos ven esto como prueba de que .NET puede igualar el rendimiento de C/C++ cuando se ajusta con cuidado. - La capa de almacenamiento Tsavorite (fork de FASTER) ofrece escalabilidad de hilos, almacenamiento por niveles, checkpoints no bloqueantes, registro, transacciones y una reutilización de memoria mejorada.
- Algunos sospechan que las mejoras provienen más de las estructuras de datos/algoritmos y la multihilación que de la elección del lenguaje por sí sola.
- Quedan dudas sobre dónde rinde peor y cómo se comporta en instancias más pequeñas y menos “musculosas” que la caja de prueba de 72 vCPU.
Compatibilidad y semántica de Redis
- Se presenta como compatible con clientes Redis existentes, pero la compatibilidad de API es incompleta; el soporte de streams no está claro.
- Redis es de un solo hilo y totalmente atómico por comando, mientras que Garnet es multihilo y señala explícitamente que
MSETno es atómico a menos que se exprese como una transacción. Algunos ven esto como una salvedad seria para un “drop-in replacement”. - Redis sigue considerándose “suficientemente bueno” y extremadamente probado para la mayoría de los casos de uso; muchos prefieren seguir con él a pesar de las cifras de Garnet.
- El clustering de Redis mitiga las limitaciones de un solo hilo, pero introduce su propia complejidad.
Ecosistema de .NET y debate sobre el GC
- El hilo discute cómo los JIT de .NET y Java, el GC y el profiling a veces pueden superar código C/C++ escrito a mano, especialmente con polimorfismo y estrategias de memoria gestionada.
- Se citan los spans, structs, punteros
unsafey las opciones fuera de heap de .NET como potentes palancas de rendimiento; hay debate sobre escape analysis y detalles de la asignación en stack. - Hay desacuerdo sobre la madurez del ecosistema de bibliotecas y la cadena de herramientas: algunos dicen que las bibliotecas de .NET son completas y de alta calidad; otros ven carencias frente al JVM y señalan una fuerte dependencia de Visual Studio para la mejor experiencia.
Azure, Windows y despliegue
- Hay un fuerte interés en Garnet como caché nativa de alto rendimiento en Windows Server y contenedores de Windows, evitando WSL o ports archivados de Redis.
- Algunos quieren verlo integrado en Azure App Service o similar, con cachés locales por nodo replicadas a nodos cercanos, argumentando que los saltos de red dominan la latencia de todos modos.
- Se mencionan patrones de K8s + Cilium “local redirect” como una forma de obtener beneficios de localidad con otras cachés.
Licencias, gobernanza y confianza
- Garnet está licenciado con MIT, pero requiere un CLA; algunos lo ven como una gestión legal, otros como una vía para relicenciar.
- Surgen preocupaciones sobre la postura de Microsoft respecto a patentes y sobre proyectos de Microsoft Research que a menudo se estancan, equilibradas con notas de que Garnet ya se usa internamente y podría convertirse en un servicio de Azure.
- Varios contrastan la licencia abierta de Garnet con los cambios de licencia de Redis y los forks del ecosistema, aunque algunos siguen confiando más en Redis por su historial y simplicidad.