Saltar al contenido principal

Caché distribuida para .NET

Una caché distribuida mantiene datos compartidos de acceso rápido en memoria a través de varios procesos o máquinas para que cada instancia de tu aplicación vea los mismos valores. Este artículo explica qué es una caché distribuida, cuándo una aplicación .NET necesita una y cómo Clustron Zaris cumple ese papel.

Qué es una caché distribuida​

Una caché almacena valores calculados u obtenidos en memoria para que no tengas que pagar por producirlos de nuevo. Una caché distribuida reparte esa memoria a través de más de un nodo y hace que los datos en caché sean alcanzables desde cualquier instancia de tu aplicación.

La distinción importa en cuanto tu aplicación se ejecuta como más de un proceso. Una caché en proceso vive dentro de una única instancia: cada instancia tiene su propia copia, las copias se desvían entre sí y ninguna de ellas sobrevive a un reinicio. Una caché distribuida contiene un conjunto de datos lógico único que cada instancia lee y escribe, de modo que un valor escrito por una instancia es visible para la siguiente solicitud aunque la gestione una instancia diferente.

Cuándo necesitas una​

Recurre a una caché distribuida cuando tu aplicación se ejecute como múltiples instancias — por escala, por disponibilidad, o porque vive en contenedores — y esas instancias necesiten una vista compartida y consistente de los datos calientes. Las cargas de trabajo típicas incluyen:

  • Estado de sesión, para que cualquier instancia detrás de un balanceador de carga pueda atender la siguiente solicitud de un usuario.
  • Caché de respuestas de API y de consultas, para que un resultado costoso calculado una vez se reutilice en toda la flota.
  • Configuración y feature flags, para que un cambio se propague a cada instancia sin un redespliegue.
  • Estado de aplicación compartido, como contadores o valores derivados que varias instancias actualizan.

Cómo Clustron Zaris sirve como caché distribuida​

Clustron Zaris es un almacén clave-valor distribuido y en memoria para .NET. Como caché, te da las partes que esperas de una capa de caché:

  • Almacenamiento clave-valor distribuido particionado a través de los nodos, de modo que la capacidad crece a medida que añades nodos.
  • Escalado horizontal a través de un clúster de múltiples nodos.
  • Expiración por tiempo de vida (TTL), de modo que las entradas en caché caducan por sí solas.
  • API de cliente .NET asíncronas para lecturas y escrituras.
  • Una vista de los datos en todo el clúster, de modo que cualquier nodo puede atender una solicitud de cualquier clave.

Lo instalas como un paquete NuGet y hablas con él desde el cliente .NET nativo. En desarrollo puedes ejecutar el almacén en proceso — incrustado en tu aplicación sin un servidor separado — y más tarde apuntar el mismo código de cliente a un clúster remoto real sin reescribirlo.

tip

Empieza en proceso mientras construyes y pruebas, luego cambia a un clúster remoto para producción. La API de cliente es la misma en ambos modos, por lo que el cambio es un cambio de configuración, no una reescritura.

Más que una caché​

Zaris es un almacén consciente de la coordinación, no solo una caché. Junto a get y set, expone primitivas que una caché simple no tiene:

  • Locks distribuidos, para que solo una instancia ejecute una sección crítica a la vez.
  • Transacciones, para que varias operaciones se apliquen atómicamente.
  • Notificaciones de watch, para que un cliente reaccione al cambio de una clave en lugar de hacer polling.
  • Contadores atómicos y leases, para estado numérico compartido y propiedad con expiración.

Estas te permiten usar un solo almacén tanto para los datos en caché como para la lógica de coordinación que normalmente necesita un segundo sistema. Para un tratamiento más profundo de esas primitivas, consulta la guía de coordinación a continuación.

Próximos pasos​