Garnet es un nuevo tipo de almacenamiento remoto de caché desarrollado por Microsoft Research que ofrece varios beneficios únicos:
- Garnet toma como punto de partida el popular protocolo de línea RESP, lo que permite usar Garnet desde clientes Redis sin modificar disponibles en la mayoría de los lenguajes de programación actuales, como StackExchange.Redis en C#.
- Garnet ofrece un mejor rendimiento y escalabilidad con muchas conexiones de clientes y pequeños lotes en comparación con almacenamiento en caché de código abierto comparable, ahorrando costes para aplicaciones y servicios grandes.
- Garnet demostró una latencia de cliente extremadamente baja (normalmente menos de 300 microsegundos al 99,9%) utilizando máquinas virtuales Commodity Cloud (Azure) con TCP acelerado habilitado, lo cual es fundamental para escenarios reales.
- Garnet está basado en la última tecnología .NET y es multiplataforma, extensible y moderno. Está diseñado para ser fácil de desarrollar y evolucionar sin sacrificar el rendimiento en situaciones comunes. Aprovechamos el rico ecosistema de bibliotecas de .NET para ampliar la API y ofrecer oportunidades de optimización abierta. Gracias a nuestro uso cuidadoso de .NET, Garnet logra un rendimiento de última generación tanto en Linux como en Windows.
Dirección de código abierto:El inicio de sesión del hipervínculo es visible. Documentación:El inicio de sesión del hipervínculo es visible.
Garnet tiene los siguientes beneficios clave:
- El rendimiento del servidor (operaciones por segundo) aumenta varios órdenes de magnitud para lotes pequeños y muchas sesiones cliente en comparación con almacenamiento de caché de código abierto.
- En máquinas cloud comerciales (Azure) con TCP acelerado activado en Windows y Linux, la latencia por operación es extremadamente baja (normalmente menos de 300 microsegundos al 99,9%).
- A medida que aumenta el número de clientes, se logra una mejor escalabilidad con o sin agrupación de clientes.
- Capacidad para utilizar todos los recursos de CPU/memoria de un ordenador servidor a través de una única instancia de servidor de memoria compartida (sin necesidad de clústeres intra-nodo).
- Soporte para conjuntos de datos de mayor tamaño que la memoria que se desbordan a dispositivos de almacenamiento locales y en la nube.
- Funciones de base de datos como puntos de control rápidos y recuperación y publicación/suscripción.
- Soporte para particionamiento hash multi-nodo fragmentado (modo "cluster" de Rederis), migración de estados y replicación.
- Bien probado con una suite de pruebas completa (miles de pruebas unitarias contra Garnet y su nivel de almacenamiento, Tsavorite).
- Base de código C# que es fácil de evolucionar y ampliar.
Garnet no soporta todos los comandos de Redis, específicamente los comandos soportados para ver:El inicio de sesión del hipervínculo es visible. El proyecto Garnet incluye una herramienta de benchmark para ejecutar benchmarks RESP usando diferentes clientes, distintas cargas de trabajo y distintas políticas para medir el rendimiento, el rendimiento y la latencia. Dirección:El inicio de sesión del hipervínculo es visible. Protocolo RESP:El inicio de sesión del hipervínculo es visible.
Este artículo utiliza las herramientas de benchmarking integradas de Redis para pruebas sencillas, y el entorno de prueba es el siguiente:
| caché | Versión | | Redis | Redis 3.0.504 (00000000/0) 64 bits | | Granate | Garnet 1.0.2 64 bits; Modo independiente |
Referencias Redis
Primero, lanza la caché Redis usando la línea de comandos con el siguiente comando:
El comando de prueba es el siguiente:
Los resultados son los siguientes:
====== CONJUNTO ====== 500000 solicitudes completadas en 24,38 segundos 100 clientes paralelos Carga útil de 3 bytes Mantener con vida: 1
0,03% <= 1 milisegundo 0,25% <= 2 milisegundos 2,65% <= 3 milisegundos 16,49% <= 4 milisegundos 59,95% <= 5 milisegundos 99,09% <= 6 milisegundos 99,76% <= 7 milisegundos 99,86% <= 8 milisegundos 99,93% <= 9 milisegundos 99,98% <= 10 milisegundos 99,99% <= 11 milisegundos 100,00% <= 12 milisegundos 20512,82 solicitudes por segundo
====== CONSEGUIR ====== 500.000 solicitudes completadas en 27,41 segundos 100 clientes paralelos Carga útil de 3 bytes Mantener con vida: 1
0,03% <= 1 milisegundo 0,19% <= 2 milisegundos 6,44% <= 3 milisegundos 25,82% <= 4 milisegundos 45,65% <= 5 milisegundos 98,79% <= 6 milisegundos 99,98% <= 7 milisegundos 99,98% <= 8 milisegundos 99,98% <= 9 milisegundos 100,00% <= 9 milisegundos 18238,86 solicitudes por segundo
Referencias Garnet
Crea un nuevo proyecto de consola .NET 8 y primero haz referencia al paquete Microsoft.Garnet con el siguiente comando:
El código es el siguiente:
El comando de inicio es el siguiente:
Usando el mismo comando de benchmark, el resultado es el siguiente:
====== CONJUNTO ====== 500.000 solicitudes completadas en 11,51 segundos 100 clientes paralelos Carga útil de 3 bytes Mantener con vida: 1
75,51% <= 1 milisegundo 88,24% <= 2 milisegundos 92,04% <= 3 milisegundos 99,46% <= 4 milisegundos 99,98% <= 5 milisegundos 99,99% <= 6 milisegundos 100,00% <= 12 milisegundos 100,00% <= 12 milisegundos 43448,04 solicitudes por segundo
====== CONSEGUIR ====== 500000 solicitudes completadas en 31,50 segundos 100 clientes paralelos Carga útil de 3 bytes Mantener con vida: 1
0,01% <= 1 milisegundo 0,90% <= 2 milisegundos 27,25% <= 3 milisegundos 97,65% <= 4 milisegundos 99,82% <= 5 milisegundos 99,94% <= 6 milisegundos 99,98% <= 7 milisegundos 99,98% <= 9 milisegundos 99,98% <= 10 milisegundos 99,99% <= 11 milisegundos 100,00% <= 12 milisegundos 100,00% <= 12 milisegundos 15872,01 solicitudes por segundo Debido a que las herramientas de prueba, versiones de software, parámetros de prueba, etc., dan lugar a resultados diferentes; las pruebas son solo de referencia; a través de las pruebas sencillas de este artículo, se puede ver que Garnet tiene una latencia significativamente menor que Redis.
(Fin) |