Topologías de almacenamiento en caché para escalabilidad lineal

NCache proporciona una variedad de topologías de almacenamiento en caché para permitir la escalabilidad lineal mientras se mantiene la consistencia y confiabilidad de los datos. El objetivo de esto es abordar las necesidades de las aplicaciones que se ejecutan con cachés de dos servidores muy pequeños a clústeres de caché muy grandes que consisten en decenas o incluso cientos de servidores de caché. Una topología de almacenamiento en caché es esencialmente una estrategia de almacenamiento de datos, replicación de datos y conexiones de clientes en una caché agrupada que abarca varios servidores de caché.

A continuación se muestran las principales topologías de almacenamiento en caché que NCache establece lo siguiente:

  1. Caché con particiones
  2. Caché de réplica de partición
  3. Caché replicado
  4. Caché reflejada (2 nodos activo/pasivo)
  5. Caché de cliente (Velocidad de InProc; caché local conectada a caché en clúster)

Datos de referencia frente a datos transaccionales

Los datos de referencia son datos que no cambian con mucha frecuencia y se almacenan en caché para acceder a ellos una y otra vez y actualizarlos ocasionalmente. Los datos transaccionales, por otro lado, son datos que cambian con mucha frecuencia y puede actualizarlos con la misma frecuencia con la que los lee.

El almacenamiento en caché de un catálogo de productos donde los precios no cambian con mucha frecuencia son datos de referencia. Por otro lado, ASP.NET Core El almacenamiento de sesiones se considera un uso transaccional porque una sesión se lee y actualiza una vez en cada solicitud web, lo que puede ocurrir cada pocos segundos.

En los primeros días, un caché se consideraba bueno principalmente para datos de referencia porque los datos que cambiaban con frecuencia se volvían obsoletos y no sincronizados con los datos más recientes en la base de datos. Pero, NCache ahora proporciona funciones muy potentes que permiten que la memoria caché mantenga los datos almacenados en la memoria caché sincronizados con la base de datos.

Todas las topologías de almacenamiento en caché son buenas para datos de referencia, pero solo algunas topologías de almacenamiento en caché son especialmente mejores para datos transaccionales. Debe determinar cuántas lecturas versus escrituras hará para determinar qué topología es mejor para usted. Además, algunas topologías de almacenamiento en caché no escalan tanto, especialmente para las actualizaciones, así que tenlo en cuenta también.

A continuación se muestra una lista de topologías de almacenamiento en caché junto con su impacto en las lecturas frente a las escrituras.

  1. Caché con particiones (sin replicación): Muy bueno. Súper rápido tanto para lecturas como para escrituras y también se escala linealmente agregando servidores. La topología más rápida, pero no replica los datos, por lo que se pierden datos si un servidor de caché deja de funcionar.
  2. Caché de réplica de partición (Más popular): Muy bueno. Súper rápido tanto para lecturas como para escrituras y también se escala linealmente agregando servidores. Segunda topología más rápida, pero replica datos para mayor confiabilidad sin comprometer la escalabilidad lineal. La mejor combinación de velocidad/escalabilidad y confiabilidad de datos.
  3. Caché replicado: Muy bueno para entornos más pequeños.. Súper rápido y linealmente escalable para lecturas. Moderadamente rápido para escrituras en un clúster de 2 nodos, pero no escala a medida que agrega más servidores porque las escrituras se realizan de forma sincrónica en todos los servidores de caché.
  4. Caché reflejada: Muy bueno para entornos más pequeños.. Superrápido para lecturas. Las escrituras son más rápidas que la caché replicada para 2 nodos activo/pasivo. Pero, no escala más allá de esto.
  5. Caché de cliente: Muy bueno para uso intensivo de lectura. con todas las topologías de almacenamiento en caché. Le permite alcanzar la velocidad de InProc con caché distribuida.

Caché con particiones

La caché con particiones es la topología de almacenamiento en caché más rápida y escalable para lecturas y escrituras. Está diseñado para clústeres de caché más grandes y el rendimiento de lecturas y escrituras sigue siendo muy bueno incluso en cargas máximas. Sin embargo, no replica datos y, por lo tanto, hay pérdida de datos si un servidor de caché deja de funcionar.

Caché con particiones

Estas son algunas de las características de la memoria caché con particiones.

  1. Particiones Dinámicas: el caché se divide en particiones en tiempo de ejecución y cada servidor de caché tiene una partición. Hay un total de 1000 cubos por caché en clúster que se distribuyen uniformemente en todas las particiones. Agregar/eliminar el servidor de caché da como resultado la creación/eliminación de particiones en tiempo de ejecución. La asignación de depósitos a las particiones no cambia cuando se agregan datos a la memoria caché. En cambio, solo cambia cuando se agregan o eliminan particiones o cuando se produce el equilibrio de datos (ver más abajo).
  2. Mapa de distribución: el clúster de caché crea un mapa de distribución que contiene información sobre qué depósitos existen en qué particiones. El mapa de distribución se actualiza cada vez que se agregan o eliminan particiones o cuando se produce el equilibrio de datos (ver más abajo). El mapa de distribución se propaga a todos los servidores y clientes. Los clientes usan esto para averiguar con qué servidor de caché hablar para leer o escribir un determinado elemento almacenado en caché.
  3. Equilibrio dinámico de datos: dado que todos los cubos son en realidad cubos de HashMap donde los datos se almacenan en función de un algoritmo Hashing en las claves, existe la posibilidad de que algunos cubos tengan más datos que otros, según las claves que se usaron. Si este desequilibrio superaba un umbral configurable, NCache cambia automáticamente los cucharones para equilibrar esta carga.
  4. Los clientes se conectan a TODAS las particiones: los clientes se conectan a todos los servidores de caché para que puedan leer o escribir datos directamente en una solicitud del servidor. Si la conexión de un cliente con un servidor de caché se cae, le pide a uno de los otros servidores que lea o escriba un elemento almacenado en caché que existe en el servidor al que no puede acceder. Y ese servidor ayuda al cliente a lograrlo.

Caché de réplica de partición

NOTA: todo lo mencionado en Caché Particionada también es cierto aquí.

Al igual que Caché con particiones, Partition-Replica Cache es una topología de almacenamiento en caché extremadamente rápida y linealmente escalable para lecturas y escrituras. Está diseñado para clústeres de caché más grandes y el rendimiento de lecturas y escrituras sigue siendo muy bueno incluso en cargas máximas. Además de esto, Partition-Replica Cache también replica datos y, por lo tanto, no hay pérdida de datos incluso si un servidor de caché deja de funcionar.

Partition-Replica Cache es nuestra topología de almacenamiento en caché más popular porque le brinda lo mejor de ambos mundos, rendimiento/escalabilidad lineal y confiabilidad de datos.

Caché de réplica de partición

A continuación se presentan algunas de las características de Partition-Replica Cache.

  1. Particiones Dinámicas: mismo como Caché con particiones.
  2. Réplicas dinámicas: cuando se crean o eliminan particiones en tiempo de ejecución, también se crean o eliminan sus réplicas. Las réplicas siempre están en un servidor de caché diferente y solo hay una réplica para una partición.
  3. Replicación asíncrona: de forma predeterminada, la replicación de partición a réplica es asíncrona. Esto significa que el cliente puede agregar, actualizar o eliminar cualquier dato en la partición y todas estas operaciones se ponen en cola. Y, luego, se replican a GRANEL en la réplica. Esto mejora el rendimiento, pero tiene un ligero riesgo de pérdida de datos en caso de que una partición funcione y no se hayan replicado todas las actualizaciones en la réplica. Pero, en la mayoría de las situaciones, esto está perfectamente bien.
  4. Replicación sincronizada: si sus datos son muy confidenciales (por ejemplo, datos financieros) y no puede permitirse el lujo de tener datos obsoletos, entonces puede elegir la opción "Replicación sincronizada" en la configuración. Cuando se selecciona, todas las operaciones de escritura se realizan sincrónicamente tanto en la partición como en la réplica hasta que se consideran completadas. De esta forma, si la operación falla en el Réplica, también falla en la Partición. Y puede estar seguro de que todos los datos en la memoria caché (tanto en la partición como en la réplica) siempre serán consistentes. Sin embargo, esto tiene implicaciones en el rendimiento, ya que es más lento que la replicación asíncrona.
  5. Mapa de distribución: mismo como Caché con particiones.
  6. Equilibrio dinámico de datos (particiones y réplicas): mismo como Caché con particiones. Sin embargo, en Partition-Replica Cache, el equilibrio de datos también se produce en las réplicas cuando las particiones tienen datos equilibrados.
  7. Los clientes se conectan a TODAS las particiones: mismo como Caché con particiones. Además, en Partition-Replica Cache, los clientes solo hablan con las particiones y no con sus réplicas. Esto se debe a que las réplicas son pasivas y solo las particiones hablan con sus réplicas cuando les replican datos.

Caché replicado

Caché replicado proporciona confiabilidad de datos a través de la replicación en dos o más servidores de caché. Es muy rápido y escalable para lecturas. Sin embargo, no escala para las escrituras porque están sincronizadas con todos los servidores del clúster. Para un clúster de 2 nodos, las escrituras son más rápidas que su base de datos pero no tan rápidas como Caché de réplica de partición. Para 3 o más clústeres de servidores, el rendimiento de escritura se degrada y finalmente se vuelve poco atractivo.

Caché replicado

A continuación se muestran algunas de las características de la caché replicada.

  1. Nodos replicados dinámicos: puede agregar o quitar servidores de caché en tiempo de ejecución a un caché existente sin detener el caché o su aplicación. El servidor recién agregado hace una copia (réplica) de todo el caché en sí mismo. Y, el servidor que se elimina actualiza la membresía del clúster y todos sus clientes se mueven a otros servidores.
  2. Caché completo en cada nodo: toda la memoria caché se copia en todos los servidores del clúster.
  3. Las lecturas son escalables: las lecturas son súper rápidas y escalables cuando agrega más servidores. Sin embargo, agregar más servidores no aumenta el tamaño de la memoria caché, ya que el servidor recién agregado es solo otra copia de la memoria caché completa.
  4. Las escrituras son Synchronous: las escrituras son muy rápidas para un clúster de 2 nodos y más rápidas que su base de datos. Sin embargo, las escrituras son sincrónicas, lo que significa que cada operación de escritura no se completa hasta que todos los servidores de caché se actualizan sincrónicamente. Debido a esto, las escrituras no son tan rápidas como otras topologías y su rendimiento se degrada cuando aumenta el tamaño del clúster más allá de 2 nodos.
  5. El cliente se conecta a un solo servidor: cada cliente de caché solo se conecta a un servidor en el clúster según un algoritmo de equilibrio de carga determinado por los servidores de caché. Si este servidor de caché deja de funcionar, el cliente se conecta al siguiente servidor de la lista. También puede especificar manualmente el servidor al que conectarse en el archivo de configuración de caché si no desea utilizar el equilibrio de carga.

Caché reflejada

Mirrored Cache es un clúster de caché activo/pasivo de 2 nodos diseñado para entornos más pequeños. Proporciona confiabilidad de los datos a través de la replicación/reflejo asíncrono del nodo activo al nodo pasivo. Es muy rápido tanto para lecturas como para escrituras (de hecho, las escrituras son más rápidas que Caché replicado), pero no escala más allá de este clúster activo/pasivo de 2 nodos.

Caché reflejada

A continuación se muestran algunas de las características de Mirrored Cache.

  1. 1 Servidor Activo y 1 Pasivo: Mirrored Cache solo tiene dos servidores. Uno es Activo y el otro es Pasivo. Ambos tienen una copia de todo el caché. Si el servidor activo deja de funcionar, el servidor pasivo se convierte automáticamente en activo. Y, si el servidor activo previamente caído vuelve a funcionar, se trata como un servidor pasivo a menos que cambie esta designación a través de las herramientas de administración en tiempo de ejecución.
  2. Conexiones de clientes con soporte de conmutación por error: cada cliente de caché solo se conecta al servidor activo en el clúster para realizar sus operaciones de lectura y escritura. Si este servidor activo se cae, todos los clientes se conectan automáticamente al servidor pasivo que ya se ha convertido en activo. Este soporte de conmutación por error garantiza que Mirrored Cache esté siempre en funcionamiento, incluso si un servidor deja de funcionar.
  3. Duplicación asíncrona: cualquier escritura realizada en el servidor activo se refleja/replica de forma asíncrona en el servidor pasivo. Esto asegura que el Servidor Pasivo esté siempre sincronizado con los datos más recientes en caso de que el Servidor Activo se caiga y el Servidor Pasivo tenga que volverse Activo. La duplicación asíncrona también significa un rendimiento más rápido porque se realizan escrituras múltiples como una operación BULK en el servidor pasivo.

Caché del cliente (velocidad InProc)

Client Cache es local para su servidor web/aplicación y se encuentra muy cerca de su aplicación y le permite almacenar en caché los datos que está leyendo desde el caché distribuido (cualquier topología de almacenamiento en caché). Puede ver esto como un "caché sobre un caché" y mejora en gran medida el rendimiento y la escalabilidad de su aplicación aún más. Si usa Client Cache en modo InProc, puede alcanzar la velocidad de InProc.

Si bien es local para su aplicación, una caché de cliente no es independiente. En su lugar, siempre se sincroniza con la memoria caché en clúster. Esto garantiza que los datos en la memoria caché del cliente nunca se vuelvan obsoletos.

Caché de cliente

A continuación se muestran algunas de las características de Mirrored Cache.

  1. Bueno para casos intensivos de lectura: Client Cache es bueno solo si tiene un caso de uso de lectura intensiva donde la cantidad de lecturas es muchas veces mayor que la de escrituras. Si el número de escrituras es el mismo que el de las lecturas, entonces la memoria caché del cliente es más lenta porque una escritura implica actualizarla en dos lugares.
  2. Velocidad más rápida como un caché local (InProc / OutProc): existe una caché de cliente dentro de su proceso de aplicación (modo InProc) o local en su servidor web/aplicación (modo OutProc). En cualquier caso, aumenta significativamente el rendimiento de su aplicación en comparación con simplemente obtener estos datos del caché agrupado. El modo InProc le permite almacenar en caché objetos en su "montón de aplicaciones", lo que le brinda una "Velocidad de InProc" que no puede ser igualada por ningún caché distribuido.
  3. No es un caché independiente: La memoria caché del cliente puede ser una memoria caché local, pero no es una memoria caché independiente. En su lugar, se mantiene sincronizado con la memoria caché en clúster. Lo que esto significa es que si otro cliente actualiza los datos en el caché en clúster que tiene en su caché de cliente, el caché en clúster notifica al caché de cliente que se actualice con la última copia de esos datos. Y esto se hace de forma asíncrona pero inmediata.
  4. Sincronización Optimista / Pesimista: De forma predeterminada, Client Cache utiliza sincronización optimista, lo que significa que NCache El cliente asume que todos los datos que tiene la memoria caché del cliente son la copia más reciente. Si la memoria caché del cliente no tiene datos, el cliente los obtiene de la memoria caché en clúster, los coloca en la memoria caché del cliente y los devuelve a la aplicación del cliente. Sincronización pesimista significa que el cliente de caché primero comprueba la caché agrupada si tiene una versión más reciente de un elemento almacenado en caché. Si es así, el cliente lo obtiene, lo coloca en la memoria caché del cliente y lo devuelve a la aplicación del cliente. De lo contrario, devuelve lo que haya en la caché del cliente.
  5. Complemento sin ningún cambio de código: lo mejor de Client Cache es que no implica ningún cambio de código en su aplicación. En su lugar, simplemente conéctelo a través de un cambio de configuración. Y, NCache Client API detrás de escena sabe qué hacer con el uso de Client Cache.

¿Qué hacer a continuación?

© Copyright Alachisoft 2002 - Todos los derechos reservados. NCache es una marca registrada de Diyatech Corp.