Antes de saltar a la Caché del cliente, alejémonos un poco y entendamos los conceptos básicos del almacenamiento en caché. En informática, una caché es una memoria de alta velocidad que se utiliza como almacenamiento auxiliar para evitar costosos viajes de datos y optimizar el rendimiento de aplicaciones más sencillas que se ejecutan en un solo nodo de servidor. Pero en un sistema distribuido con equilibrio de carga, múltiples nodos de aplicación manejan una sola solicitud. Aquí es donde la memoria caché provoca una caída del rendimiento.
Para hacer frente a esta exigencia, se introduce una memoria caché distribuida en memoria para aplicaciones que se adaptan a cargas extremas de transacciones por segundo y requieren alta disponibilidad y escalabilidad lineal.
Los desarrolladores pueden elegir entre muchas opciones populares de almacenamiento en caché distribuidas disponibles en el mercado, como NCache. NCache es un caché distribuido en memoria extremadamente rápido y linealmente escalable que almacena en caché los datos de la aplicación para reducir los costosos viajes a la base de datos y mejorar el tiempo de respuesta. Pero a pesar de todo esto, todavía hay espacio para un aumento del rendimiento que puede hacerse posible agregando un caché encima de otro caché:una caché de cliente.
NCache Detalles Almacenamiento en caché distribuido en .NET Altamente disponible NCache
¿Cómo funciona Client Cache en NCache?
En la mayoría de los casos, un caché distribuido se aloja en un conjunto de servidores de caché dedicados en toda la red, por lo que su aplicación tiene que realizar viajes de red para obtener datos. Y esto no es tan rápido como acceder a los datos localmente y desde dentro del proceso de solicitud.
Para manejar este problema, NCache proporciona Caché de cliente. Client Cache funciona como almacenamiento temporal que reside cerca del proceso de la aplicación para que la obtención de datos sea más fácil y rápida. Client Cache lleva el rendimiento de su aplicación a un nivel superior, ya que varias aplicaciones que se ejecutan en la misma máquina cliente pueden comunicarse y compartir datos mediante Modo OutProc. Client Cache acerca el conjunto de datos calientes a su aplicación, incluso dentro del proceso de la aplicación con el Modo InProc lo que da un gran impulso al rendimiento.
In NCache, usar Client Cache es bastante simple. No se requieren cambios de código al final de la aplicación. Es una opción de configuración sencilla. Puede crear una caché de cliente a través de la NCache Web Manager o de NCache-cmdlets de PowerShell compatibles. Una vez que se haya configurado el cliente, las aplicaciones del cliente comenzarán a usarlo automáticamente.
Comprendamos el funcionamiento de Client Cache (también llamado primer nivel o L1 Cache) con un ejemplo de una aplicación de comercio electrónico. La aplicación accede con frecuencia al catálogo de productos y datos de los usuarios actualmente activos. Dichos datos se pueden guardar en la caché del cliente, ejecutándose en la caja del cliente (donde reside la aplicación). De modo que se puede evitar un viaje de red a través del caché agrupado (también llamado segundo nivel o caché L2) y los datos se proporcionan desde el caché L1 mucho más rápido.
Ahora debe estar pensando en cómo se sincronizan los datos entre dos cachés para que la aplicación siempre reciba datos actualizados de la caché L1.
Sincronización de datos entre la caché L1 y L2
Para asegurarse de que la aplicación siempre obtenga datos actualizados, funcionan dos subprocesos en segundo plano en la caché del cliente. Estos dos poderosos mecanismos de sincronización que se ejecutan en Client Cache aseguran que la aplicación siempre obtenga los datos más recientes con mayor rendimiento y escalabilidad. Los dos hilos de fondo son:
Subproceso basado en notificaciones
Cuando se agregan datos a la caché L1, registra una notificación de cambio de datos al instante y la caché L2 realiza un seguimiento de los elementos de la caché que contiene la caché L1 y supervisa los cambios cuando se produce un cambio de actualización/eliminación de datos. Tras la modificación de los datos en el caché L2, el caché L1 recibe una notificación de cambio y, en respuesta, el caché L1 se sincroniza con L2.
Subproceso basado en encuestas
Este es un mecanismo de respaldo que se activa solo cuando la comunicación entre L1 y L2 Cache se detiene debido a una falla en la red o una pérdida de conexión. En este caso, la caché L1 espera 10 segundos y luego se sondea a sí misma y solicita los cambios de datos en la caché L2. Al recibir las notificaciones de cambio, se sincroniza con el caché L2.
Para aprovechar al máximo los beneficios de Client Cache, puede usarlo en cualquiera de los dos modos de aislamiento de nivel de proceso disponibles.
Modos de aislamiento en la caché del cliente
Caché de cliente se ejecuta en el nodo cliente donde se ejecutan sus aplicaciones. Según sus necesidades de rendimiento y la arquitectura de la aplicación, puede elegir uno de los siguientes modos de aislamiento a nivel de proceso admitidos por Client Cache. NCache Client Cache existe en dos modos: InProc y OutProc.
Modo en proceso:
In Modo InProc, Client Cache se ejecuta dentro del proceso de la aplicación, lo que elimina la comunicación entre procesos. El modo InProc brinda el máximo rendimiento a la aplicación ya que los datos permanecen en forma de objeto, lo que reduce el costo de serialización y deserialización.
En el modo InProc, los datos entre otras instancias de la aplicación no se comparten, por lo que cada instancia de la aplicación aloja una instancia de caché de cliente dedicada que aumenta el rendimiento.
Modo OutProc:
In Modo OutProc, Client Cache se ejecuta en su proceso dedicado en el nodo cliente. La comunicación entre las aplicaciones y la caché del cliente se produce a través de conectores TCP. El modo OutProc admite el uso compartido de datos para que varias instancias de aplicaciones puedan comunicarse con la misma caché de cliente. Tiene una gran ventaja, ya que los datos se comparten entre varias aplicaciones, por lo que los datos cargados o actualizados por una aplicación quedan disponibles para otras.
Comparación de rendimiento del modo InProc y OutProc:
Existen múltiples factores sobre los que se mide el rendimiento del modo InProc y OutProc, es decir, la disponibilidad de datos, el consumo de recursos y la velocidad.
Disponibilidad de datos: En el modo OutProc, el reinicio de la memoria caché no provoca la pérdida de datos, lo que proporciona estabilidad a los datos. Mientras que, en el modo InProc, el reinicio de la memoria caché provoca la pérdida de datos.
Consumo de recursos: El modo InProc proporciona el máximo rendimiento cuando los recursos como la memoria no están limitados, ya que cada instancia de Client Cache tiene su copia de datos. El modo OutProc requiere menos recursos físicos en comparación con el modo InProc.
Velocidad: El modo Client Cache InProc es súper rápido porque es como un objeto en su montón y mantiene las cosas de forma deserializado, ahorrando el costo de serialización / deserialización que tiene que hacer para cualquier OutProc o cualquier acceso remoto al caché.
NCache Detalles Caché de cliente Notificaciones de eventos en caché
El flujo operativo de Client Cache
Client Cache está más cerca de la capa de aplicación y Client Cache es el subconjunto de la caché en clúster. Entonces, todas las operaciones ocurren de manera distribuida.
Todas las operaciones de lectura basadas en claves se realizan directamente en la caché L1, las operaciones de escritura basadas en claves, como Agregar, Insertar y Eliminar, se realizan primero en la caché L2 y luego se agregan a la caché L1 antes de regresar a la aplicación.
Los datos se devuelven a L1 Cache antes de regresar a la aplicación, de modo que la próxima vez que se soliciten los mismos datos se proporcionen directamente desde L1 Cache.
Las operaciones de lectura y escritura no basadas en claves solo se realizan en la caché L2 porque la caché L1 contiene el subconjunto de la caché L2.
Otras instancias de Client Cache se actualizan a través de datos de fondo mecanismo de sincronización.
Modos de sincronización en Client Cache:
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 Client Cache nunca se vuelvan obsoletos.
NCache Client Cache proporciona dos modos para sincronizacion de datos entre la caché del cliente y la caché en clúster. La memoria caché del cliente contiene una copia de los datos de la memoria caché agrupada. Cualquier cambio que ocurra en la memoria caché en clúster debe sincronizarse en la memoria caché del cliente, ya que la capa de la aplicación se comunica directamente con la memoria caché del cliente. Dos modos para la sincronización de datos son optimista y pesimista.
modo optimista es el modo predeterminado para la sincronización de datos en NCache. La sincronización se lleva a cabo en segundo plano y cuando una aplicación solicita los datos, se devuelven a la aplicación desde la caché del cliente.
Aplicaciones que son más sensibles y requieren el uso de datos nuevos modo pesimista para la sincronización de datos. cuando una aplicación solicita los datos, L1 Cache verifica la versión con L2 Cache y proporciona los datos actualizados.
Conclusión
NCache le permite aprovechar Client Cache con una caché distribuida. La mejor parte de usar Client Cache es que no se realiza programación por parte del usuario. Es una opción de configuración simple, y Client Cache se conecta automáticamente. Client Cache aumenta el rendimiento en muchos aspectos para las aplicaciones que realizan más lecturas que escrituras. Por lo tanto, descargue una versión de prueba de 60 días totalmente funcional de NCache Enterprise y pruébalo por ti mismo.