Si vienes de Redis: apunta tu aplicación .NET a Zaris
Si tus servicios de .NET ya hablan con Redis, pasar a Zaris no tiene por qué ser una reescritura. Zaris es un almacén clave/valor distribuido, en memoria y replicado, construido de forma nativa para .NET, y desde la versión 2.0.0 habla dos protocolos a la vez: su propio protocolo binario eficiente para clientes de .NET de primera clase, y un front-end RESP2 compatible con Redis al que puede apuntar cualquier cliente de Redis en cualquier lenguaje.
Eso te da dos rutas de migración honestas, y no son mutuamente excluyentes. Puedes empezar con la ruta RESP sin cambios para poner Zaris bajo carga hoy mismo y luego adoptar el cliente nativo donde merezca la pena. Este artículo recorre ambas y te ofrece una regla clara para elegir.
Ruta A — conserva tu cliente de Redis
La forma más rápida de probar Zaris es no cambiar tu código en absoluto. Habilita el listener RESP en tus nodos de Zaris y apunta tu cliente de Redis existente al puerto RESP de un nodo. Zaris acepta comandos de Redis ordinarios, enruta cada uno a la partición propietaria de la clave y responde por el mismo canal que tu cliente ya entiende.
Aquí está StackExchange.Redis hablando con Redis:
var mux = await ConnectionMultiplexer.ConnectAsync("redis-0:6379");
var db = mux.GetDatabase();
await db.StringSetAsync("session:42", payload, TimeSpan.FromMinutes(30));
var back = await db.StringGetAsync("session:42");
Y aquí está el mismo código contra Zaris: lo único que cambia es el host:
var mux = await ConnectionMultiplexer.ConnectAsync("zaris-0:6379");
var db = mux.GetDatabase();
await db.StringSetAsync("session:42", payload, TimeSpan.FromMinutes(30));
var back = await db.StringGetAsync("session:42");
Ningún paquete nuevo, ningún cambio de API. Bajo el capó, Zaris aplica el hash a las claves con el mismo cálculo de slot CRC16(key) % 16384 que usa Redis Cluster, de modo que un cliente consciente del clúster enruta cada clave directamente al nodo que la posee: sin proxy, sin saltos adicionales, igual que Redis Cluster. (Detrás de un balanceador de carga simple o de Sentinel, cualquier nodo aceptará cualquier clave en su lugar.) Si quieres los detalles de cómo funciona eso y cómo se comporta la conmutación por error, consulta cómo Zaris habla el protocolo de Redis y la referencia del protocolo de Redis.
Qué vigilar en esta ruta:
- Solo RESP2. El front-end habla RESP2, así que fija tu cliente de Redis a versiones que negocien RESP2 y no asuman marcos push de RESP3.
- Algunos comandos se rechazan limpiamente, no se simulan. Lua/
EVAL, geo, HyperLogLog, bitmaps y la persistencia RDB/AOF no están implementados: Zaris devuelve un claro "no soportado" en lugar de fingir. El desglose completo de lo que funciona está en la matriz de compatibilidad de comandos de Redis, medida frente aStackExchange.Redis 2.8.16: aproximadamente 126 comandos soportados, 92 no soportados limpiamente, cero sorpresas. - Los comandos de coordinación que realmente usas están ahí.
MULTI/EXECse asignan a las transacciones nativas de confirmación en dos fases de Zaris,SET key val NX PXte da el patrón de bloqueo distribuido, y las notificaciones de espacio de claves funcionan.
Esta ruta es ideal cuando un servicio es políglota, cuando Redis es compartido entre equipos, o cuando simplemente quieres tener Zaris funcionando en staging esta misma tarde.
Ruta B — el cliente nativo de .NET
Una vez que Zaris demuestra su valía, el cliente nativo es donde las aplicaciones orientadas a .NET le sacan el máximo partido. No es un envoltorio de protocolo: es un cliente de .NET real con APIs tipadas, y sus operaciones de la ruta rápida (Get/Put/Delete/Expire/Persist/TTL) devuelven ValueTask, de modo que no asignan nada cuando se completan de forma síncrona.
La adopción es mayormente configuración. Si usas ASP.NET Core y Redis como tu IDistributedCache, el cambio son dos líneas:
// Program.cs
builder.Services.AddClustronZaris("cache", "zaris://cache-0:7861,cache-1:7861/app");
builder.Services.AddClustronDistributedCache("cache");
// ...then inject IDistributedCache (or HybridCache) and use it exactly as before.
Las cadenas de conexión son las mismas en todas partes: en proceso, remotas, en Docker o en Kubernetes:
zaris://host:7861/store
Usa zariss:// para TLS, separa con comas los hosts semilla para la conmutación por error y suministra los tokens de forma segura con env: o file: en lugar de en línea.
Más allá de la caché, el cliente nativo te ofrece cosas que la API de Redis simplemente no modela como operaciones de primera clase: hashes, listas, conjuntos, conjuntos ordenados y Streams tipados; compare-and-swap; operaciones masivas y por lotes; consultas de escaneo y de prefijo; y un conjunto completo de primitivas de coordinación: transacciones, bloqueos distribuidos, elección de líder, concesiones, contadores, limitación de tasa y una cola de trabajos. Si has estado ensamblando todo eso a partir de los bloques de construcción de Redis y de Lua, aquí son nativos.
Cuándo elegir cuál
Una regla sencilla:
- Opta por la Ruta A (RESP) cuando el llamante no es .NET, cuando Redis es compartido entre servicios, o cuando quieres la prueba más rápida posible sin ningún cambio de código.
- Opta por la Ruta B (nativa) cuando el servicio es .NET, cuando te importa el rendimiento sin asignaciones, o cuando quieres estructuras de datos tipadas y primitivas de coordinación en lugar de patrones hechos a mano.
La mayoría de los equipos acaban con una mezcla —RESP para los bordes políglotas, nativo para el núcleo de .NET— y ese es un estado final perfectamente bueno, no una migración a medias.
Una nota sobre la actualización
Zaris 2.0.0 es una versión mayor con una ruptura del protocolo de cable en el cliente nativo: el enrutamiento del clúster pasó a un hashing alineado con CRC16, y el mínimo del protocolo es ahora 2. Un servidor 2.0.0 rechaza a los clientes anteriores a 2.0 en el HELLO, así que actualiza tus clientes nativos y servidores juntos. El front-end RESP no se ve afectado: los clientes de Redis no participan en absoluto en el protocolo nativo. La historia completa está en el anuncio de la 2.0.0.
Primeros pasos
dotnet add package Clustron.Zaris.SDK --version 2.0.0
- Prueba la compatibilidad con Redis de forma práctica: Si vienes de Redis en la documentación
- Consulta la matriz completa de comandos: Compatibilidad de comandos de Redis
- Sopésalo: Clustron frente a Redis
- Instala en cualquier lugar: clustron.io/install
Si tu stack es .NET y has estado ejecutando Redis sobre todo porque era la elección obvia, Zaris te permite conservar todo lo que funciona hoy y adoptar la integración nativa a tu propio ritmo.