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 unsafe y 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 MSET no 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 unsafe y 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.