Seis formas de optimizar NCache Rendimiento

Seminario web grabado
Por Kal Ali y Sam Awan

NCache es una popular caché distribuida en memoria de código abierto para .NET. Le ayuda a escalar sus aplicaciones .NET almacenando en caché los datos de la aplicación y reduciendo esos costosos viajes a la base de datos. NCache escala linealmente al permitirle agregar más servidores de caché al clúster de nivel de almacenamiento en caché.

Aprende a optimizar NCache rendimiento configurándolo correctamente y también utilizando sus funciones de mejora del rendimiento.

Este seminario web cubre:

  • Introducción a los NCache y su arquitectura
  • formas comunes NCache se utiliza
  • NCache características que aumentan el rendimiento
  • NCache opciones de configuración que aumentan el rendimiento

General

Hoy vamos a presentar un webinar sobre seis trucos para mejorar NCache actuación. El modo de este seminario web sería solo escuchar. Tendrá la posibilidad de hacer cualquier tipo de pregunta que desee. Hay una pestaña de preguntas y respuestas en el panel del lado derecho. Podrá escribir sus preguntas y uno de nosotros podrá responderlas por usted. Durante el seminario web, si tiene alguna pregunta o inquietud y no puede escucharnos, vuelva a usar la ventana de chat. Kal va a estar hablando toda la parte técnica de la presentación. Si hay algo que no sea tan técnico o relacionado con las ventas, pueden dirigirme sus preguntas directamente. Dicho esto, se lo pasaré a Kal y él comenzará la presentación.

Está bien. gracias sam ¿Podría confirmar que puede ver mi pantalla porque recién comencé a compartirla? Sí, puedo ver tu pantalla perfectamente bien. Está bien, perfecto. Bueno, chicos, como Sam me acaba de presentar, mi nombre es Kal y el tema del seminario web de hoy es Seis maneras de optimizar. NCache Rendimiento.

Por lo tanto, en el seminario web de hoy cubriremos algunos detalles generales con respecto a NCache y también qué características puede usar dentro de su aplicación para optimizar el rendimiento. Asi que, NCache ya es una solución de rendimiento. Aumenta el rendimiento de sus aplicaciones rápidamente, porque reduce sus viajes a la base de datos. Pero, con estas características, en realidad puede mejorar eso aún más y estos seis trucos se basarán en casos de uso. Voy a presentar un caso de uso junto con cada uno de ellos y, según el que se aplique a su escenario específico, definitivamente puede usar esto y ver cómo funciona para usted. Entonces, vamos a cubrir algunas demostraciones prácticas reales de diferentes aplicaciones y, de acuerdo con eso, veremos cómo en diferentes situaciones. NCache funciona y cómo estas funciones realmente nos ayudan. Entonces, voy a continuar con la presentación ahora.

El problema de la escalabilidad

Entonces, antes que nada, hablemos sobre el problema de escalabilidad que se ve en la mayoría de los escenarios de implementación. Entonces, por lo general, tiene una granja web, que se encuentra detrás de un equilibrador de carga y este tipo de nivel, este escenario suele ser muy escalable. Porque, a medida que ve que sus aplicaciones reciben más carga, básicamente puede agregar más servidores a este nivel y eso realmente aumentaría la capacidad de su entorno, en términos de la carga total que puede recibir o para ejemplo solicitudes totales que puede aceptar, digamos, en un segundo.

El problema real, el cuello de botella real radica en que estas aplicaciones deben ponerse en contacto con la fuente de datos de back-end. Tal vez para obtener algunos datos de referencia, tal vez para obtener algún otro tipo de datos almacenados allí. Entonces, básicamente ahí es donde está el cuello de botella. Por lo general, la fuente de datos de back-end es una base de datos. Como todos sabemos, las bases de datos son excelentes para el almacenamiento, pero el problema radica en que generalmente son lentas porque están en el disco. Tienden a atascarse con una alta carga de transacciones y no son muy escalables.

La Solución

Entonces, en tales escenarios, las empresas / organizaciones tienden a moverse hacia un NoSQL database, pero ese no es el enfoque óptimo en este momento. Porque eso requiere un cambio arquitectónico completo, no solo dentro de su aplicación sino también dentro de sus datos reales para que sean compatibles entre sí. Entonces, en tales escenarios, un enfoque óptimo sería un caché distribuido en memoria, como NCache, que es más rápido y más escalable, porque todo se coloca dentro de la memoria. Entonces, si lo comparamos con una base de datos, en ese caso estaba presente en el disco. Entonces, ahora tenemos todo presente dentro de la memoria. Es más escalable porque el caché distribuido es lógicamente una sola unidad, pero debajo tiene varios servidores independientes que alojan este caché en clúster.

Es una topología muy escalable. Puede agregar tantos servidores aquí como desee. Como saben, lo que hace es que básicamente agrupa no solo los recursos de memoria para todos estos servidores, sino también el poder computacional de todos estos recursos. Entonces, a medida que agrega más servidores, aumenta la capacidad de la memoria caché en términos del total de datos que se pueden almacenar. Así como el total de operaciones o carga total que puede llevar.

Entonces, cuando vea que hay más carga en su granja web, también puede aumentar la cantidad de servidores en su clúster de almacenamiento en caché y eso también haría que este nivel también sea escalable. Entonces, ahora su nivel de almacenamiento en caché coincide con las solicitudes que llegan desde la granja de servidores web. Entonces, ahora realmente ayuda a eliminar esa parte de no escalabilidad que estaba presente con la base de datos. La mejor parte de esto es que no es un reemplazo de una base de datos. Puedes usarlo junto con él. Entonces, lo que hace es que, básicamente, el clúster de caché se encuentra justo entre sus aplicaciones y su base de datos. Todavía puedes hacer llamadas directas. Pero, lo que hace es que puedes hacer NCache su única fuente de datos y al usar eso, tenemos funciones de capa de acceso a datos que se proporcionan con este caché, a través de las cuales puede, en realidad, el caché puede escribir datos en las fuentes de datos del back-end, así como obtener datos del back-end fuentes de datos.

Entonces, al usar esto, su caché permanece sincronizado con las fuentes de datos de back-end. Por lo tanto, tiene datos actualizados de una fuente más rápida porque está presente en la memoria y también es una fuente más escalable. Entonces, es una muy buena compensación en este caso.

NCache Despliegue

Entonces, hablemos de la NCache despliegue en este diagrama. Entonces, aquí si puede ver eso, estos son básicamente sus servidores de aplicaciones o servidores web donde tiene alojada su aplicación. Por lo general, están sentados detrás de un balanceador de carga. Anteriormente, realizaban llamadas directas a las fuentes de datos de back-end, como una base de datos, pero ahora tiene el nivel de almacenamiento en caché aquí mismo. Esta es la implementación recomendada por nosotros es que tiene un nivel de almacenamiento en caché dedicado que aloja sus cachés en clúster.

NCache Despliegue

Entonces, lo que están haciendo sus aplicaciones, lo están haciendo NCache la única fuente de datos. Todas sus solicitudes para obtener datos o incluso algún tipo de procesamiento se realizan directamente en el caché y, si el caché no lo tiene, utiliza esos proveedores de capa de acceso a datos, en realidad puede obtenerlos de las fuentes de datos. Entonces, esto es lo que está haciendo dentro de su entorno. Estos servidores, como mencioné anteriormente, se recomienda que sean servidores dedicados y son servidores muy económicos. El único requisito previo para NCache en este caso es solo el .NET framework. En estos servidores que albergan la memoria caché del clúster, tiene la instalación del servidor de memoria caché, que tiene la capacidad de alojar memorias caché del clúster y en el cliente, en estos cuadros de clientes aquí, que son sus servidores de aplicaciones, tiene la remote client instalación, que puede albergar cachés locales y, de hecho, puede ayudar a conectarse a cachés agrupados remotos.

Entonces, así es como se ve la implementación. Todo esto es linealmente escalable. A medida que agregamos más cantidad de servidores, aumenta la capacidad total del caché.

Tres usos comunes de NCache

Hablemos de los tres usos comunes de NCache. Estoy revisando rápidamente todas estas cosas porque quiero llegar a esas seis formas y obtener detalles de ellas, de modo que si hay alguna pregunta, definitivamente puedo responderlas. Entonces, hablemos de los tres usos comunes de NCache.

  1. Almacenamiento en caché de datos de aplicaciones

    El primero es el almacenamiento en caché de datos de la aplicación. Entonces, en esta diapositiva hablábamos de los tres usos comunes de NCache. Entonces, el primero es el almacenamiento en caché de datos de la aplicación. En este caso, básicamente, lo que haces es introducir el NCache API dentro de su aplicación y al usar esa API puede agregar elementos y obtener elementos del caché y puede realizar diferentes operaciones en el caché, según sea necesario. Y qué NCache ¿Tiene la capacidad de host de, básicamente, puede almacenar en caché cualquier cosa dentro NCache. Pueden ser imágenes, pueden ser algunos objetos personalizados, objetos de dominio, pueden ser colecciones, básicamente cualquier cosa. Por lo tanto, todo lo que sea compatible con .NET se puede almacenar en caché dentro de NCache y el uso de sus aplicaciones mediante la introducción de la NCache API, muy simple de usar, muy fácil de usar, en realidad puede realizar diferentes operaciones en el caché y agregar y recuperar elementos.

  2. ASP.NET, ASP.NET Core Almacenamiento en caché

    El siguiente caso de uso se refiere a ASP.NET, ASP.NET Core almacenamiento en caché Entonces, el primero en eso es, puedes usar NCache como proveedor de estado de sesión. Puede ser de sitio único o multisitio. Lo siguiente es que puedes tener NCache almacenar su estado de vista. Esto es algo que es pre-MVC. Después de eso, el concepto de estado de vista ya no estaba presente. Después de eso, tenemos para ASP.NET, tenemos el proveedor de caché de salida. NCache puede actuar como eso y luego para ASP.NET Core aplicaciones puede ser almacenamiento en caché de respuesta central. Entonces, puedes hacer eso con NCache. NCache también puede actuar como un SignalR Backplane. Por lo tanto, todas estas opciones que acabamos de cubrir en el número 2 en realidad no son opciones de cambio de código. No es necesario realizar ningún tipo de cambio de código. Básicamente, puede actualizar el archivo de configuración de sus aplicaciones y usar los que realmente puede tener NCache para guardar lo que quieras guardar. Podrían ser sesiones, podría ser View State, podrían ser sus salidas o incluso el almacenamiento en caché de respuesta central. Entonces, usando esto puedes tener NCache guardar esas cosas. Entonces, básicamente en este caso, de nuevo no hay opción de cambio de código, muy fácil de usar. Se requieren un par de pasos. Disponemos de documentación completa. También tenemos muestras y siguiendo esos pasos y esa documentación, incluso las muestras, puede configurarlo en 15 minutos. Puedes tener todo configurado. De hecho, podemos probarlo, ver cómo funciona para usted.

  3. Uso compartido de datos de tiempo de ejecución y Pub/Sub a través de eventos

    El siguiente es Pub / Sub y Intercambio de datos en tiempo de ejecución a través de eventos. Básicamente, en este caso tienes, digamos, aplicaciones sin servidor y quieres asegurarte de que haya algún tipo de sincronización entre ellas, quieren pasar ciertos mensajes, ciertos datos. NCache se puede utilizar como un medio sólo para eso. Podrías tener editores, podrías tener suscriptores y ellos podrían publicar algunos mensajes. Los suscriptores que están registrados en esos, digamos, los clientes pueden obtenerlos para obtener esos datos de aquellos de NCache en ese caso.

    Entonces, un ejemplo típico sería una aplicación de chat grupal. Tal vez tenga miembros del grupo, todos conectados al mismo caché, en realidad están en un chat grupal. Uno de los miembros publica algún mensaje, todos los demás miembros de ese grupo recibirán una notificación de los datos que se han agregado. Entonces, este es solo un ejemplo básico y luego también tenemos notificaciones impulsadas y consultas continuas.

Entonces, estas fueron las cosas que NCache realmente le ofrece y lo que es básicamente utilizado por la mayoría de nuestros clientes.

NCache Arquitectura

En realidad, hablemos de la NCache Arquitectura ahora. Vamos a explicar cómo funciona eso? Así que básicamente NCache es una arquitectura 100% peer-to-peer. No hay un punto único de falla y no hay un maestro esclavo o una regla de la mayoría o cualquier concepto similar dentro NCache. Los servidores se pueden agregar y eliminar sobre la marcha. No es necesario detener el caché y continuaría funcionando bien. Incluso en el caso de que si uno de los servidores se cae, básicamente en un escenario imprevisto, el clúster no se cae, el clúster completo no se cae. Inicia la lógica de recuperación, entre los servidores para redistribute esos datos u obtenga los datos de una de las copias de seguridad y, en el lado del cliente, los clientes realmente conmutan por error sus conexiones a los servidores restantes presentes dentro del clúster.

Clúster de caché dinámica

Entonces, al usar esto, los datos en realidad no se pierden y los clientes, sus conexiones, en realidad, conmutan por error a los otros servidores. Por lo tanto, continúan realizando las solicitudes incluso si uno de los servidores se ha caído. Entonces, siempre que tenga un servidor en funcionamiento, su solicitud se manejará.

Entonces, todos estos cambios, todos estos servidores de cambios de configuración que se agregan, se eliminan sobre la marcha para escenarios imprevistos, todos estos en realidad se propagan por todo el clúster. Entonces, todas estas configuraciones son en realidad dinámicas. Cualquier actualización dentro del clúster y en términos de configuración, se asigna a todos los servidores presentes dentro del clúster y los clientes también lo saben automáticamente.

NCache Requisitos del sistema

Servidores de caché

Hablemos de eso el NCache Requisitos del sistema. Entonces, en general, en términos de, digamos, si hablas de núcleos, cuantos más, mejor. Pero, en términos generales, recomendamos tener más de 8 núcleos. Las tres cosas principales que NCache utiliza es CPU, recursos de red y memoria. La CPU se usa básicamente para manejar las solicitudes que ingresan, o tal vez si hay algún código del lado del servidor que se haya configurado para realizar ese tipo de operaciones, es por eso que se usa la CPU. En segundo lugar, la memoria RAM se usa solo para el almacenamiento y tal vez haya cierta sobrecarga después de que los datos se hayan almacenado y los recursos de la red se usen para mantener la comunicación. Por ejemplo, comunicación de servidor a servidor y luego de cliente a servidor. Entonces, tiene ambas opciones y luego los servidores de Windows recomendados son 2012, 2016. El único requisito previo de NCache is .NET framework, de lo contrario, es compatible con todos los entornos de Windows.

Remote Clients

En términos de remote clients, el único requisito previo es tener .NET 4.0 o superior y su cliente sería realmente compatible. Tu puedes tener NCache en esos servidores.

Entorno de configuración

Entonces, ahora que hemos hablado sobre las diferentes cosas, lo básico, ya sabes, la introducción sobre NCache, hablemos de cómo podemos configurar el entorno. Entonces, cada vez que tenemos clientes que evalúan nuestro producto, les decimos lo que les decimos, les damos cinco pasos para trabajar con NCache. El primero es descargar una copia nueva del NCache Enterprise desde el sitio web y el segundo es instalar NCache dentro de su entorno. tengo NCache ya instalado en dos de mis máquinas. En realidad son cajas remotas demo1 y demo2. Y, en estas cajas una vez que instalo NCache, obtengo una herramienta de gestión de NCache , que son NCache gerente. Con esta herramienta puedo crear cachés, configurarlos y realizar diferentes operaciones e incluso monitoreo está involucrado en este caso.

Crear un caché a través de NCache Manager

Entonces, sigamos adelante y abramos el NCache gerente aquí. solo necesito buscar NCache y automáticamente sale. Entonces, una vez que lo abres, esta es la vista que obtienes. Entonces, ahora lo que debemos hacer es crear un nuevo caché en clúster. Para crear eso, haga clic derecho en 'Cachés agrupados', haga clic en 'Crear nuevo caché agrupado'.

NCache Manager

Entonces, aquí lo que tengo que hacer es darle un nombre. Voy a seguir adelante y darle un nombre 'democache'. Todos los cachés deben tener un nombre. Solo voy a mantener eso. Voy a hacer clic en siguiente.

Caché de demostración

Estas son las cuatro topologías que ofrece NCache Voy a mantener seleccionada la opción "Réplica con particiones" porque es la más recomendada y la más popular entre todos nuestros clientes. Es muy escalable, muy confiable.

Réplica Particionada

Esta es la estrategia de replicación entre la partición activa y la partición de respaldo en el caso de una réplica particionada. Voy a mantenerlo en Async, ya que es más rápido.

Estrategia de replicación

Aquí es donde especifico estos servidores que alojarán este caché agrupado. Entonces, aquí voy a especificar demo1 y demo2. Estas son las dos casillas que tengo, la 107 y la 108 y hago clic en siguiente.

Especificar servidores

Este es el puerto del clúster en el que se comunica el clúster. Se recoge automáticamente.

Parámetros TCP

Este es el tamaño que se configura en cada caja. Entonces, habrá 2 Gigas de tamaño total, uno en el servidor1 y otro en el servidor2.

Tamaño de la memoria

Estas son algunas opciones avanzadas. Tal vez si tiene un escenario lleno de caché, el caché puede eliminar automáticamente los elementos del caché. Si se trata de datos confidenciales, puede desactivar el desalojo, de modo que los elementos no se eliminen por sí solos y luego también tiene la opción de iniciar automáticamente el caché tan pronto como se inicia, tan pronto como se inicia la máquina. Entonces, solo voy a hacer clic en finalizar y eso realmente crea mi caché.

Opciones Avanzadas

Entonces, así de fácil fue crear un caché. Tengo el caché configurado ahora. Si solo hago clic izquierdo en el nombre del caché, se abren todas estas pestañas diferentes aquí a través de las cuales puedo hacer algunos cambios o configuraciones si es necesario en este punto.

Panel De Control

Entonces, lo siguiente que haré es agregar mi caja personal como remote client. Para hacer eso, simplemente haga clic derecho en el nombre del caché y haga clic en agregar nodo.

Agregar nodo

Y, aquí solo voy a dar la IP de mi casilla personal, que es la 102 y ya está agregada.

Caja IP

Entonces, una vez que se agrega, solo voy a hacer clic derecho en el nombre del caché y hacer clic en iniciar. Entonces, ahora el caché se está iniciando en el cuadro 107 y 108. Una vez que esté en funcionamiento, abriré las estadísticas y también les mostraré una herramienta de monitoreo de NCache , que son NCache monitor, que entra en detalles muy profundos con respecto a verificar básicamente diferentes cosas que están sucediendo dentro del caché. Entonces, el caché está en funcionamiento ahora. Para abrir las estadísticas, simplemente haga clic derecho en el nombre del caché y haga clic en estadísticas.

Estadísticas abiertas

Entonces, esto es lo que va a mostrar todas estas estadísticas para estos dos cuadros 107 y 108.

Estadística

Entonces, ahora abramos el herramienta de seguimiento de NCache. Para abrirlo, haga clic con el botón derecho en el nombre de la memoria caché y haga clic en el grupo de monitores.

Clúster de monitor abierto

El NCache El monitor ahora se abrirá, lo que nos dará dos paneles preconfigurados, es decir, el panel del servidor y el panel de visualización de informes. Entonces, al usar esto, puede tener una idea bastante buena de lo que está sucediendo dentro del caché. Si vemos aquí, este es, por ejemplo, el tamaño de caché que se está consumiendo actualmente y luego este es el gráfico de solicitudes por segundo. Por lo tanto, le brinda muchos detalles diferentes que están sucediendo actualmente dentro del caché y puede usar estos detalles para depurar algunos escenarios o llegar al fondo si está viendo algún tipo de problema.

Tablero del servidor

Por lo tanto, voy a volver rápidamente a la NCache manager y aquí también puede crear su propio tablero personalizado. Si tiene ciertas cosas que desea ver y no las que están preconfiguradas aquí, también puede hacerlo. Tiene controles presentes aquí bajo la categoría de servidor de caché y luego también bajo la categoría de clientes de caché. También puede crear sus propios tableros personalizados para ver solo aquellas cosas que realmente le interesan. Entonces, volvamos a la NCache gerente. Todo aparece cero porque no tenemos ninguna aplicación ejecutándose en este caché.

Simule estrés y monitoree estadísticas de caché

Entonces, en realidad, probemos rápidamente ejecutando una aplicación. Entonces, tengo el PowerShell abierto aquí. Aclarémoslo de verdad. De hecho, abramos uno nuevo. Bien, entonces, tengo una apertura de PowerShell. Entonces, lo que voy a hacer es ejecutar la aplicación de la herramienta de estrés para agregar una carga ficticia a mi caché en clúster, para simular alguna actividad. Entonces, usando esa actividad, también la hemos estado monitoreando a través del NCache gerente, así como, a través del NCache monitor, ver cómo funciona eso para nosotros.

Así que ejecute esa herramienta de prueba de estrés. Necesito escribirlo de nuevo. Primero eliminemos el proceso. Mientras tanto, si tiene alguna pregunta, no dude en publicarla en la pestaña de preguntas y respuestas. Kal, no creo que tengamos ninguna pregunta en este momento. Bien, perfecto. Alguna razón por la que no está recogiendo. Estoy de vuelta Sí. Lo siento, solo iba a decir eso, chicos, esta sesión se está grabando. Entonces, sea cual sea el motivo, si no puede asistir a la sesión completa o si se perdió la parte inicial, podrá verificar esta grabación. Creo que lo publicaremos más adelante en la semana o principios de la próxima. Por lo tanto, podrá continuar y pasar por la sesión completa nuevamente.

Entonces, lo que estoy haciendo ahora es ir directamente a ese directorio, para abrir el símbolo del sistema allí y ejecutar la herramienta de prueba de esfuerzo. Bien, entonces, veamos, sí, se recogió. Voy a seguir adelante y darle el nombre stresstesttool.exe y luego el caché de demostración. Entonces, ahora lo que estaría haciendo es agregar algunos datos ficticios en el caché. Si volvemos aquí, deberíamos ver algo de actividad en estas dos cajas ahora mismo. Ahí está. Entonces, vemos algo de actividad en estos dos recuadros 107 y 108.

actividad

En la topología que hemos seleccionado réplica particionada, cada cliente tiene una conexión con todos los nodos del servidor presentes dentro del clúster, por eso se conecta a ambos servidores. Si llegamos a la NCache monitor, podemos ver que hay un cliente conectado contra 108 y uno contra 107. Si observa el NCache solicitud por segundo gráfico, podemos ver que hay alguna actividad en curso.

NCache Supervisar actividad

Entonces, esta prueba fue solo para verificar si todo está bien, el caché está configurado correctamente, todo funciona bien y eso ha sido probado. Entonces, voy a detener la aplicación de la herramienta de prueba de esfuerzo. Ahora, volvamos a la NCache gerente. Avancemos y borre este caché, de modo que para nuestra prueba adicional no haya elementos presentes dentro del caché. Entonces, todo aparece en 0. Volvamos a la presentación. Entonces, nuestro entorno ahora está configurado y todo está listo. Lo que podemos hacer ahora es continuar con las diapositivas.

NCache Trucos – Optimización del rendimiento

Entonces, hablemos de las seis formas que vamos a utilizar para optimizar el rendimiento, una por una. Solo para reiterar NCache, la memoria caché del clúster ya es una característica de rendimiento que mejora el rendimiento dentro de su aplicación, sus viajes a la base de datos se reducen y luego encuentra datos de una fuente más rápida que es una memoria caché distribuida en memoria. Pero, estas características en realidad lo ayudarán a mejorar ese rendimiento según su caso de uso específico.

  • Caché de cliente

    Entonces, el primero del que vamos a hablar es caché del cliente. Lo que hace es que, básicamente, reduce sus viajes al caché agrupado real.

  • Llamadas masivas

    Luego, hablaremos sobre las llamadas masivas, que reducen los viajes al caché de tal manera que solo realiza una sola operación y usa solo una sola llamada y varias operaciones a cambio se procesarán en el extremo del servidor.

  • Compresión

    Entonces también tienes compresión. Tal vez si el tamaño de su objeto es mayor, puede usar esto para reducir el tamaño total del objeto que se está agregando o recuperando. En general, recomendamos dividir el objeto en un tamaño más pequeño, pero en el caso de que no sea posible, puede usar la función de compresión.

  • Actualizaciones asíncronas

    También tenemos actualizaciones asíncronas. Entonces, al usar estos, básicamente su aplicación no espera a que se realice la operación. Tal vez pueda crear una tarea separada para esto y luego, en función de eso, puede permitirse que los datos se agreguen solos y si hay algún tipo de actualización que desee recuperar, tal vez los datos se agregaron o no o si hay fue un problema, simplemente puede registrarse para una devolución de llamada contra eso.

  • Serialización compacta

    El siguiente es serialización compacta. Entonces, por ejemplo, si tiene objetos personalizados, objetos de dominio, que no están marcados como serializables y dentro de un caché distribuido, ya que está completamente fuera de proceso, todos los objetos serán necesarios para ser serializados. Por lo tanto, si tiene este escenario en el que no puede permitirse el cambio de código dentro de su entorno, pero también necesita que sus objetos personalizados u objetos de dominio sean serializables, puede usar la función de serialización compacta de NCache para marcarlos a todos como serializables y luego usarlos, en realidad puede continuar usando NCache dentro de su entorno. Es una opción sin cambio de código. Solo algo que puede descifrar desde la GUI y lo tiene todo configurado.

  • NIC duales

    Y finalmente tenemos el NIC duales rasgo. Entonces, si desea separar básicamente el tráfico de la comunicación del cliente al servidor y la comunicación del servidor al servidor, separar los recursos de la red, puede hacerlo con NCache. Esto es solo en el caso en el que tiene, ya sabe, los recursos de su red realmente se ahogan por el exceso de tráfico que ingresa. Solo en esos escenarios lo recomendaríamos. Pero, si no ve que esos recursos se están agotando en ese momento, puede mantener la misma tarjeta de interfaz de red para ambos tipos de comunicaciones.

De demostración

Por lo tanto, realicemos nuestra primera prueba, en la que agregaremos elementos a la memoria caché y recuperaremos elementos de la memoria caché, y usaremos esto como referencia con la API básica que tenemos. Una vez más, ya está optimizado, pero lo usaremos como base y realizaremos diferentes funciones además y veremos cómo funcionan para nosotros.

Entonces, el primero, volvamos a esta muestra aquí mismo. Entonces, esta es una muestra que también puedo proporcionar este código. Esto es lo que vamos a usar para mostrarle la línea de base que vamos a cubrir. Entonces, estamos en la prueba 1. En la prueba 1, lo que estamos haciendo es básicamente agregar 5,000 elementos en el caché de tamaño 100 KB y luego vamos a buscar esos elementos del caché. Esta prueba solo nos dará el tiempo que toma todo este código, esta parte de búsqueda tomará. En esta parte de recuperación, el ciclo se ejecuta en realidad 5000 veces, porque se deben recuperar 5000 elementos y en las diapositivas posteriores vamos a cubrir cómo las diferentes características pueden ayudar en este caso.

...
try
    {
        cache = NCache.InitializeCache(args[0]);
        cache.Clear();

        Console.WriteLine("TEST 1\n");
        Console.WriteLine("Press anything to add " + objectsCount + " items (100kb Object)");
        Console.ReadKey();
        Console.WriteLine("Adding items now");

        for (int i = 0; i < objectsCount; i++)
            {
                cache.Insert(key + i, obj1);
            }

        Console.WriteLine(objectsCount + " items added. Press any key to retrieve them.");
        Console.ReadKey();
        Console.WriteLine("\nRetrieving " + objectsCount + " items now");
        datetime1 = DateTime.Now;
        ...

Entonces, vamos a ejecutar esto. Primero verifiquemos que todo esté configurado correctamente. Sí, prueba democache 1 y voy a ejecutar esto. Entonces, nuevamente, esta es la prueba número uno, solo para obtener una línea de base de cómo se ven los números. Voy a pulsar Enter. Comenzará a agregar elementos en el caché. Si volvemos a la NCache gerente, eso es aquí, vemos que hay alguna actividad en marcha. Entonces, está agregando elementos al caché. Dado que hay dos servidores en la topología de partición de réplica, los datos se agregan en ambos servidores, se agregan en el servidor 1, que es 107, y también en el servidor 2. Por lo tanto, los datos se dividirán. Sobre todos los elementos totales dentro del caché serán 5,000.

Entonces, en este caso, esperemos a que se complete y, una vez que se complete, podemos anotar ese número y usarlo para nuestra comparación de las características posteriores con las que vamos a probar. Ya casi está terminado, ya se agregaron más de 4,000 elementos.

Elementos agregados

Tenga en cuenta que es un objeto de 100 KB, que es un tamaño bastante grande para las pruebas, pero esto fue solo para mostrarle cómo se ven las cosas diferentes. Yo creo que se suman todos, sí, se suman todos. El contador se ha detenido. Si hacemos clic en Entrar, tomó, si hacemos clic en Entrar, comenzará a recuperar estos elementos del caché y, si regresa aquí, mostrará la hora una vez que lo haga. Entonces, podemos ver que las recuperaciones por segundo en realidad están aumentando y también las solicitudes por segundo están aumentando para ambos servidores. Entonces, eso realmente muestra que hay un poco de actividad que comienza a recuperar esos elementos del caché. Una vez que haya terminado de obtener todos los 5000 elementos del caché, mostrará el temporizador en la pantalla y, al usar ese temporizador, lo configuraremos como línea de base para nuestras próximas pruebas.

Caché del cliente (caché cercano)

Entonces, hablemos de la siguiente. La siguiente, la función real que vamos a usar primero es la memoria caché del cliente. Entonces, déjame explicarte qué es un caché de cliente. Un caché de cliente es básicamente un caché local, que está presente en las casillas de cliente y en estas casillas de cliente, lo que hace es reducir sus viajes al caché agrupado. La memoria caché del cliente es un subconjunto de los datos de las memorias caché en clúster. Mantendrá una copia local consigo mismo de los datos de los cachés agrupados. Permanece sincronizado con la memoria caché del clúster.

Caché de cliente

Por lo tanto, cualquier actualización realizada en la memoria caché del cliente se propaga a la memoria caché en clúster y viceversa. Por lo tanto, permanece actualizado con el caché agrupado y lo que hace es si su aplicación está tratando de obtener algunos elementos del caché, proporciona, si tiene esos elementos presentes localmente aquí, solo comparte esos datos o esos elementos directamente allí y luego de una fuente local.

De hecho, volvamos a esto. De acuerdo, tomó alrededor de 45 segundos hacer esta operación. Entonces, una vez que usamos el caché del cliente, podemos ver cómo afecta dentro de ese escenario. Voy a hacer clic en Entrar. Vamos a mantener este recuerdo, este número que son 45 segundos.

Hora de hacer la operación

Entonces, ya estábamos hablando del caché del cliente. Entonces, como mencioné anteriormente, básicamente hay dos opciones que tienes. Puede ejecutar el caché del cliente como InProc o OutProc, es algo que puede calcular. En el caso de OutProc, se ejecutará un proceso separado, que permanecerá sincronizado con el caché agrupado.

En general, se recomienda el proceso OutProc, cuando tiene un escenario de jardín web donde tiene múltiples aplicaciones o múltiples instancias de las aplicaciones que se ejecutan en el mismo cuadro. Entonces, tendrían que lidiar con un recurso común, es decir, el caché del cliente, un proceso separado que se está ejecutando. La segunda opción es un caché InProc y se recomienda en el caso de que tenga un escenario de granja web, donde generalmente tiene una o dos aplicaciones ejecutándose en el mismo cuadro.

En el caso de uno, lo que sucede es que el caché del cliente reside dentro del proceso de las aplicaciones. Entonces, en ese caso, dado que es parte del mismo proceso, muchos de los gastos generales se eliminan. En este caso, la sobrecarga de serialización, la sobrecarga de comunicación entre procesos, todos estos se eliminan y aumentan considerablemente el rendimiento.

En el caso de OutProc, lo que está almacenando en caché es que la aplicación obtiene esos datos de una fuente local, que está presente en el mismo cuadro. Entonces, un viaje de red en realidad se reduce. Entonces, eso aumenta bastante el rendimiento y en realidad podemos verlo ahora.

Entonces, en esto lo que vamos a hacer es crear un caché de cliente, primero como OutProc y luego como InProc y vamos a ver cómo se ven los números. Y en el escenario actual, si recuerdas, tardó 45 segundos con get normales.

Kal, tengo una pregunta aquí y la pregunta es todas las características de las que estamos hablando ¿son parte del mismo producto? Entonces, supongo que están hablando de ediciones.

Sí, algunos de ellos solo están disponibles en la empresa, pero puedo compartir comparación de ediciones documento que en realidad cubre todos y cada uno de los detalles de todos ellos. Entonces, tal vez eso realmente le daría los detalles exactos que está buscando.

Y, aprovecharé esta oportunidad y les preguntaré a todos los demás si hay alguna pregunta en este momento. No, no tenemos ninguna pregunta, así que continúe hablando.

Caché de cliente fuera de proceso

Entonces, continuaré y borraré el contenido del caché. Ya terminaron. Entonces, ahora voy a seguir adelante y crear un caché de cliente. Entonces, en el NCache administrador, tiene el caché del cliente escrito aquí. Simplemente haga clic derecho aquí y haga clic en crear nueva caché de cliente. Entonces, aquí, voy a mantener el mismo nombre. Está configurado para la memoria caché del cliente. Mantenga todo predeterminado. A continuación, está configurado en OutProc ahora, pero lo cambiaremos a InProc más adelante. Haga clic en Siguiente. El tamaño que estableció en un Giga. Voy a mantenerlo así. De hecho, puedo cambiar eso a lo que quiera y algunas configuraciones avanzadas adicionales que también estaban presentes cuando estábamos creando un caché de clúster. Entonces, ahora el caché del cliente está configurado en mi casilla personal, es decir, 102.

Crear caché de cliente

Una forma rápida de verificar esto sería simplemente ejecutar la herramienta de cachés de lista, presente dentro de mi caja personal, una vez que instale NCache y al usar esa herramienta, en realidad me permite saber qué NCaches se están ejecutando en mi caja personal en este momento. Entonces, aquí, si vengo aquí, vamos a ejecutar cachés de lista. Está bien, está mostrando los cachés presentes en mi casilla personal, que es 102. Creo que en la parte de atrás, todavía está intentando habilitarlo por alguna razón. Sí, parece estar habilitado allí. Entonces, si viene aquí, podemos ver que el cliente se almacena en caché. Entonces, el caché del cliente es un caché local justo aquí y se está ejecutando. Por lo tanto, se está ejecutando en mi caja personal en este momento y podemos usarlo ahora.

Lista de cachés en ejecución

Entonces, antes de continuar, entonces, ¿qué NCache lo que hace es publicar estos contadores que incluso se muestran en la pantalla ahora mismo. Por lo tanto, se pueden ver a través del monitor de rendimiento de Windows. Lo que voy a hacer es abrir el monitor de rendimiento de Windows y abrir los contadores para el caché del cliente que voy a usar.

Entonces, voy a, desde mi caja personal, voy a buscar un PerfMon que esté monitoreando el rendimiento aquí mismo, y usando esto, lo que voy a hacer es, voy a abrir el NCache categoría y busque mi caché específico que era el caché del cliente y abra los contadores para esos. Ahora está abierto y voy a abrir un nuevo monitor de rendimiento para buscar la categoría de NCache. Ahí está y aquí tengo el caché del cliente como presente aquí. Voy a hacer clic en agregar y voy a hacer clic en Aceptar. Voy a cambiar la vista a vista de informe. Entonces, ahora, estos son los contadores. Todo lo que aparece es 0 en este momento porque no se está utilizando. Es un proceso separado que se está ejecutando porque lo configuramos en OutProc.

A ver cómo quedan los números ahora, desde mi caja personal. Voy a ejecutar la aplicación, el mismo código, no voy a hacer ningún tipo de cambio de código. Las funciones de caché del cliente no requieren cambios de código, como mencioné anteriormente, solo necesita habilitarlas o deshabilitarlas, cualquiera que sea su preferencia, y luego se recogerán automáticamente. Entonces, si hago clic en el botón de inicio, el mismo código, todo igual, incluso la misma prueba, comenzará a agregar esos elementos una vez que haga clic en 'Entrar'. Bien, entonces, una vez que hice clic en entrar, comenzó a agregar estos elementos. Si vuelves a la NCache administrador, vemos que en el caché agrupado se están agregando los elementos. Si abres el NCache monitor, ese es este, sí, este, vemos que hay algo de actividad aquí también, y eso es lo que estaba explicando inicialmente. Cuando tiene configurado el caché del cliente, utiliza y cuando agrega elementos en el caché, el caché del cliente también obtiene una copia y el caché en clúster también obtiene una copia.

Perfmon

Este caso de uso generalmente se recomienda cuando tiene, por ejemplo, una proporción de lecturas y escritura del 80 % al 20 % o incluso una proporción de lecturas y escritura del 70 % al 30 %. Esto generalmente se recomienda en escenarios donde tiene muchas lecturas, tal vez algunos datos de referencia de datos estáticos que tiene dentro de su entorno y ahí es donde vería grandes mejoras de rendimiento cuando tiene un caché de cliente habilitado.

Por lo tanto, tenga en cuenta que la primera prueba con solo la API de obtención ejecutada en un ciclo, obtuvimos 45 segundos en los que pudo obtener esos elementos del caché. Pero ahora, usando esta memoria caché del cliente, encontraría todos esos datos dentro de una fuente local, en un proceso separado que se ejecuta en el mismo cuadro y vamos a ver cómo funciona para nosotros. Entonces, si nos desplazamos hacia abajo aquí, podemos ver que este es el conteo del caché del cliente. Este conteo tiene que subir a 5,000 porque es una sola fuente. Entonces, todos los 5,000 elementos estarán presentes aquí en el clúster y se distribuirán entre todos los nodos del servidor. Entonces, solo estamos esperando que estos elementos suban a 5,000 y luego vamos a ejecutar la segunda parte de la prueba que es donde obtiene estos elementos del caché agrupado.

Entonces, otra cosa a tener en cuenta sería que una vez que obtengamos los elementos del caché, las llamadas no irán al caché agrupado, todas serán interceptadas por el caché del cliente que se encuentra actualmente localmente y eso es lo que voy a mostrar. desde estos mostradores, aquí mismo. Por lo tanto, estos contadores muestran los contadores de caché del cliente, pero si llega a esto, muestran los contadores del lado del servidor para el caché en clúster. Hagamos clic en ingresar aquí y comenzará a recuperar estos elementos del caché. Entonces, de nuevo, solo para mostrarle que no se está moviendo ninguna tarjeta aquí. Por lo tanto, no hay ninguna llamada que viene aquí. Si abre este, podemos ver que esta actividad está ocurriendo aquí. Hay ciertas búsquedas en curso. Por lo tanto, la memoria caché del cliente se está utilizando mucho en este momento y ese es el objetivo de tener una memoria caché del cliente en escenarios en los que tiene más lecturas que escrituras. Entonces, después de unos segundos, deberíamos ver los resultados aquí de cuánto tiempo tomó mostrarle 5,000 elementos de 100 KB de tamaño del escenario de caché del cliente. Entonces, aquí puede ver que de 45 segundos ha bajado a 33 segundos en el caso de que tenga habilitado un caché de cliente OutProc dentro de su entorno.

tiempo reducido

Entonces, puedes ver que es una gran mejora. Son más de 10 segundos los que puedes ver y en términos de aplicaciones eso es un gran momento. Por lo tanto, nos ha mostrado una gran mejora en este caso.

Caché de cliente en proceso

Entonces, voy a seguir adelante y crear una caché de cliente In-Proc ahora y usar esa caché de cliente InProc, vamos a ver cómo funciona para nosotros en comparación con estos 45 segundos para la prueba real, 33 segundos para la prueba OutProc de caché del cliente. Entonces, antes que nada, voy a seguir adelante y eliminar este caché. Ahora está eliminado. Voy a crear un nuevo caché. De nuevo, voy a escribir InProc al lado y voy a hacer clic en siguiente y voy a mantener el nivel de aislamiento en InProc, mantendré todo predeterminado y haré clic en finalizar. Entonces, ahora esto está creado en mi caja personal y voy a ejecutar exactamente la misma prueba. En realidad, primero borremos los datos en el caché.

Entonces, ahora las mismas pruebas, los mismos argumentos, y acabo de empezar. Entonces, ahora volverá a realizar exactamente la misma prueba. 5000 elementos en la memoria caché de tamaño 100 KB y luego recuperará esos elementos utilizando la memoria caché del cliente InProc. El concepto sigue siendo exactamente el mismo. Una vez que su aplicación esté agregando elementos a la memoria caché, también la agregaría en la memoria caché del cliente que está presente en el mismo proceso, porque ahora la estamos ejecutando como In Proc. Por lo tanto, también está agregando esos elementos a la memoria caché del cliente y también se está agregando a la memoria caché agrupada. Entonces, una vez que lo esté, voy a hacer clic en entrar ahora. Entonces, una vez que está buscando esos elementos, los encontrará dentro del local, dentro del mismo proceso.

Entonces, ahora sin ninguna sobrecarga involucrada, como comunicación entre procesos y serialización, deserialización, todo eso se elimina por completo ahora. Obtendría los datos allí mismo desde una fuente local y veríamos el rendimiento real de la memoria caché del cliente con un modo InProc para este escenario específico. Entonces, solo esperar a que se agreguen los elementos. Si volvemos aquí, deberíamos ver algunos contadores subiendo y bajando. Definitivamente podemos ver eso.

Estadísticas de caché

Entonces, mientras tanto, chicos, si tienen alguna pregunta, háganmelo saber. Sam está pendiente de la pestaña del panel de preguntas. Él me informará si hay alguna pregunta.

Entonces, lo siguiente, como mencioné anteriormente en la lista, serán las operaciones masivas. Por lo tanto, solo vamos a probar con uno solo, que está usando la API masiva. Pero hay diferentes conceptos de diferentes cosas que funcionan de la misma manera que las operaciones masivas y vamos a cubrir todo esto en teoría en esta presentación. Veamos realmente cuántos elementos se agregan. Entonces, ya se han agregado alrededor de más de 3000 artículos. Entonces, solo estamos esperando que llegue el marcador completo de 5000 y luego veremos cómo funciona esto. Bien, me quedo con el primero. Entonces, solo estoy esperando que se realicen las operaciones en la parte de atrás. Mientras tanto, solo estoy hablando de lo primero aquí en el caso de las operaciones masivas.

Por lo tanto, el concepto central de la operación masiva es simplemente restringir la cantidad real de llamadas que ingresan en el caché agrupado. Entonces, en lugar de realizar todas esas cosas dentro de un bucle, como ya hicimos, podemos hacer esas mismas llamadas como parte de una sola operación. Por lo tanto, se envía una sola operación a la memoria caché agrupada y luego se pueden realizar múltiples operaciones contra eso. Así que, si compartes en el caso de granel necesitas conocer las claves. Entonces, por ejemplo, acaba de proporcionar las claves y los objetos reales que desea agregar, solo una sola llamada y con eso, todos esos elementos se agregarán realmente al caché agrupado en la parte posterior.

Entonces, creo que deberían estar listos, sí, ya casi están listos. Si volvemos aquí, todos estos elementos ahora se agregan. Voy a hacer clic en entrar y podemos ver que todos esos elementos ahora se recuperan. Es muy sorprendente ver que ahora se eliminaron muchos gastos generales. Entonces, fue extremadamente rápido. Entonces, en el caso, si reiteramos lo que hicimos en la prueba inicial, con la prueba básica tomó 45 segundos, con el caché del cliente OutProc tomó alrededor de 33 segundos. Pero, en el caso de la memoria caché del cliente InProc, todo este tiempo se ha reducido a 0.1 segundos en este caso.

tiempo reducido

Entonces, esa es la mejora que puede ver con un caché de cliente de InProc si su caso de uso se corresponde con el que tenemos aquí. Entonces, esta es una gran mejora que puede ver si tiene más lecturas y más escrituras en curso.

Por lo tanto, sólo voy a hacer clic en entrar. Entonces, eso se acerca. Voy a eliminar este caché del cliente aquí y también lo limpiaré. Bien, volvamos a la presentación. Entonces, aquí, entonces, estábamos hablando de operaciones masivas.

Obtención masiva (basada en claves)

Entonces, en el caso de las operaciones masivas, la primera es que una vez que esté agregando, si tiene muchos elementos que desea agregar o incluso recuperar del caché, solo necesita proporcionarle la lista correspondiente y usando solo una llamada, puede realizar todas esas operaciones en el caché. Entonces, en general, si tiene un tamaño de objeto más grande, le recomendamos dividirlo en varios objetos y luego usar las características que NCache proporciona agruparlos o incluso obtenerlos o agregarlos al caché. Por lo tanto, la API masiva se puede usar en esos escenarios. La segunda es, por ejemplo, si no conoce las claves de estos elementos, ya que el volumen era una operación basada en claves, por lo que necesita conocer todas las claves.

Consultas de búsqueda de SQL/LINQ

En las consultas de búsqueda de tipo SQL o LINQ, básicamente, si no conoce las claves, puede buscar según un criterio determinado. Por ejemplo, si tiene productos agregados dentro del caché, en realidad puede obtener múltiples productos del caché según ciertos criterios. Entonces, digamos, ejecuto una consulta con el nombre 'SELECCIONE producto DONDE producto.precio > 10 Y producto.precio < 100'. Por lo tanto, todos los productos que realmente satisfagan ese criterio específico y estén presentes en el caché me serán devueltos. Entonces, en este caso no especifiqué ninguna clave, solo especifiqué con los criterios y me los devolvieron.

Grupos y subgrupos

El siguiente es si puede crear colecciones lógicas dentro del caché. Voy a cubrir ambos juntos, como grupos, subgrupos y luego etiquetas también. Entonces, puedes hacer eso. Entonces, por ejemplo, si tiene clientes y sus pedidos realizados dentro del caché, puede agrupar todos los pedidos. Dado que hay elementos separados en el caché, en realidad también puede mantener colecciones, pero le recomendamos que las divida, porque generalmente una vez que obtiene un elemento del caché, no necesita el objeto completo, necesita un cierto valor contra él. Entonces, si lo divide en varios objetos, puede usarlo de una manera más eficiente. Entonces, al usar estas funciones de recopilación lógica, básicamente puede agrupar elementos dentro del caché. Así, se pueden agrupar todos los pedidos de un determinado cliente y con una sola llamada. Digamos que en grupos, puede obtener por grupo o, en el caso de las etiquetas, obtener por etiqueta, solo se le proporciona la identificación del cliente y todos estos elementos asociados presentes en el caché se le devolverán. Nuevamente, en este caso no necesitaba conocer las claves, solo necesita saber el valor de cadena determinado que es un grupo o una etiqueta y, en función de eso, se le devolvió y luego también admite consultas paralelas.

Operaciones masivas - Demostración

Por lo tanto, pasemos a la muestra real de operaciones masivas. Entonces, si vuelves a esta prueba, aquí mismo. Esta es la prueba masiva, esa es la prueba 2 y vamos a ejecutarla. De hecho, comencemos primero y luego podemos entrar en detalles sobre lo que está haciendo. Entonces, lo acabo de cambiar a la prueba 2 ahora y lo comencé. Entonces, lo que está haciendo esta prueba es básicamente agregar 10,000 elementos de tamaño 10 KB en el caché en este momento. En primer lugar, está haciendo solo una inserción básica para agregar estos elementos en el caché y luego está obteniendo todos estos elementos y en realidad está registrando el tiempo para las adiciones y la parte de obtención también.

Console.WriteLine("TEST 2\n");
Console.WriteLine("Press anything to add " + objectsCountBulk + " items (10kb Object)");
Console.ReadKey();
Console.WriteLine("Adding items now");
datetime1 = DateTime.Now;
for (int i = 0; i < objectsCountBulk; i++)
{
    cache.Insert(key + i, obj2);
}
datetime2 = DateTime.Now;
Console.WriteLine(objectsCountBulk + " items added. Time to add " + objectsCountBulk + " items in a loop: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nPress any key to retrieve them.");
Console.ReadKey();

Entonces, una vez hecho esto, obtenemos una línea de base de cuánto tiempo tomó agregar 10,000 elementos de 10 KB de tamaño en el caché y luego comienza las operaciones masivas. En esas operaciones masivas, agrega todos esos 10,000 elementos en el caché con la misma llamada y los vuelve a buscar con una sola llamada también con la lista de claves y la lista de objetos predefinidos.

Ok, voy a hacer clic en entrar. Comenzará a agregar esos elementos en el caché. Si volvemos a la NCache gerente, vemos que hay algo de actividad aquí. Estos elementos ahora se están agregando a estos dos servidores que están presentes actualmente.

Actividad de operaciones masivas

Incluso si observa el grupo de monitores, podemos ver un cliente conectado aquí, un cliente conectado allí y luego vemos que hay un poco de actividad en estos gráficos. Entonces, al usar esto, puede tener una idea bastante clara de lo que está sucediendo dentro del caché, qué se está usando, qué no se está usando en este momento y cuánto se está usando. Ya casi terminé los 10,000 elementos, creo que ahora se agregaron. Sí, lo son y voy a presionar Entrar para recuperar estos 10,000 elementos. Entonces, en primer lugar, tomó alrededor de 37 segundos agregar estos elementos al caché. Ahora, lo que está haciendo es leer esos 10,000 elementos del caché. Entonces, si ve, aquí podemos ver que hay algunas recuperaciones por segundo en ambos nodos de servidor. Por lo tanto, los artículos se están recuperando en este momento. Entonces, ahora se está recuperando en un bucle en este momento. Tenga en cuenta que una vez que se complete, comenzará la prueba masiva. Entonces, en base a esa prueba masiva, compararemos estos dos números y veremos cómo afectan realmente. Entonces, aquí tomó alrededor de 30 segundos recuperar estos 10,000 elementos y con la API masiva en realidad terminó con las adiciones y pronto debería terminar también con la parte de obtención. Creo, oh sí, necesito presionar ENTER. Ok, esperemos a que se complete y luego puedo mostrarles cómo se ven todas estas cosas. Entonces, ahora está completo. Entonces, solo para repasar esta prueba, agregó 10,000 elementos de 10 KB de tamaño en el caché usando un bucle y tomó alrededor de 37 segundos. Para recuperar esos 10,000 elementos tomó alrededor de 30 segundos, de nuevo en un bucle. Con la prueba masiva, agregó esos 10,000 elementos en el caché y tomó alrededor de 5 segundos.

Prueba masiva completada

Entonces, esta es una gran brecha entre 37 segundos y 5 segundos, y para obtener esos elementos en el caché, se necesitaron, digamos, 6 segundos. Entonces, una gran diferencia nuevamente entre 6 segundos y 30 segundos. Por lo tanto, esta es la cantidad de mejora que las operaciones masivas pueden brindarle a usted y a su aplicación y, al usar esto, no necesita ejecutar la misma llamada una y otra vez. No necesita ir al caché agrupado cada vez. Básicamente, puede hacer una colección de todas las operaciones que necesita realizar, utilizando la API masiva, simplemente puede agregarlas al caché.

Compresión - Demostración

Entonces, ahora nuestra prueba masiva ya está hecha. Entonces, vuelve a la presentación. Entonces, la siguiente es la prueba de compresión. Nuevamente, como mencioné anteriormente, generalmente recomendamos dividir el objeto en un tamaño más pequeño, pero si no tiene esa opción disponible, lo que puede hacer es comprimir, en realidad puede establecer un cierto umbral. Cualquier objeto más grande que eso no se comprimiría a un tamaño más pequeño. Habilitemos la compresión en nuestro entorno ahora mismo. Entonces, antes que nada, sigamos adelante y borre el caché. Se hace. La compresión es algo que se puede hacer sobre la marcha. Por lo tanto, no es necesario detener el caché. Entonces, si hago clic izquierdo en el nombre del caché, se abrirán todas estas configuraciones diferentes. Si voy aquí y abro las opciones aquí, lo que tengo que hacer es simplemente hacer clic en esta opción para habilitar la compresión. Voy a configurarlo para que sea de 50 KB. Por lo tanto, todo lo que supere los 50 KB se comprimirá. Haga clic derecho en el nombre del caché y haga clic en aplicar configuraciones. Todas estas configuraciones ahora se van a aplicar en el clúster. Entonces, cualquier objeto más grande que eso en realidad se comprimiría.

Aplicar compresión

Entonces, voy a ejecutar la misma prueba que hicimos inicialmente y esa fue la prueba 1. Vuelva a cambiarla a la prueba 1, guardaré esto y presionaré ejecutar (iniciar). Esperemos a que comience y luego daré más detalles sobre cómo la compresión realmente ayuda en diferentes escenarios. Entonces, cómo funciona la compresión es que una vez que el cliente envía estos elementos al caché, los envía comprimidos. Entonces, cómo ayuda la compresión es que, una vez que el elemento viaja a través de la red, es de un tamaño más pequeño y una vez que permanece en el caché agrupado, también ocupa menos ubicación.

Kal, solo quería recordarte que tenemos 10 minutos antes de que termine la sesión, por lo tanto, mantén el ritmo en consecuencia. Bien, bien gracias. ¿Alguna pregunta en este punto? No, parece que todo el mundo es bueno. En realidad, tenemos dos confirmaciones, hasta ahora todo bien, así que estamos bien. Bien, perfecto. Gracias.

Bien, entonces, estaba hablando de cómo ayuda la compresión. Entonces, en el caso de que haya dos cosas, todo el recorrido de la red de un objeto de tamaño más pequeño obviamente será más rápido que el de un tamaño más grande y una vez que ese objeto se coloque dentro del caché, haga clic en Entrar para que comience a recuperar estos elementos. . Entonces, una vez que se coloca dentro del caché, en realidad también es más pequeño. Por lo tanto, está consumiendo menos espacio. También se reduce todo el tiempo necesario para procesar este artículo. Entonces, así es como ayuda la compresión dentro de su escenario. Hay una sobrecarga involucrada en el lado del cliente mientras se agrega. Pero, toda la mejora neta que notaremos en este momento es en realidad mayor que eso. Entonces, todo el tiempo que toma, ya sabes, todas las operaciones que se han encontrado en estos elementos en realidad va a ser mucho más rápido. Entonces, la prueba 1 hecha con compresión tomó alrededor de 26 segundos.

Resultados de compresión

Si recuerda inicialmente, en nuestra primera prueba sin nada, sin características especiales involucradas, solo la API básica tomó, creo que 45 segundos. Entonces, hay una gran diferencia entre 45 segundos y 26 segundos. Así es como realmente ayuda la compresión, y si estas operaciones se escalan aún más, habría una diferencia aún mayor en este caso. Entonces, eso ayuda mucho en este caso.

Operaciones asíncronas - Demostración

Entonces, pasemos al siguiente escenario que tenemos, que son las actualizaciones asíncronas. Las actualizaciones asincrónicas son básicamente que su aplicación no espera. Puede configurar una tarea separada para él y esa tarea realizará esas operaciones. Puede configurar devoluciones de llamada para obtener solo la información si el elemento se agregó o no se agregó para cualquier escenario. De hecho, también puedes configurar eso. Voy a ir rápidamente a la muestra ahora y creo que es la prueba número 3, pero puedo confirmarlo rápidamente. Bien, esta es la prueba número 3 para actualizaciones asincrónicas. De hecho, comencemos y luego podemos ver los detalles del código. Tan pronto como pueda recuperar el control, abriré el archivo de código y mostraré lo que está sucediendo en la prueba número 3, que es para actualizaciones asíncronas. Empezó ahora. Entonces, en las actualizaciones asincrónicas, esa es la prueba número 3, lo que sucede es que primero agrega elementos en el caché usando solo la llamada de inserción básica y luego, una vez que termina de agregar esos elementos, básicamente los elimina nuevamente en una parte de un círculo. Entonces, cada clave se elimina en una sola iteración.

...
else if (args[1].Equals("test3"))//ASYNC API TEST
{
    Console.WriteLine("TEST 3\n");
    Console.WriteLine("Press anything to add " + objectsCount + " items normally (100kb Object)");
    Console.ReadKey();
    Console.WriteLine("Adding items now");

    try
    {
        cache = NCache.InitializeCache(args[0]);
        datetime1 = DateTime.Now;
        for (int i = 0; i < objectsCount; i++)
        {
            cache.Insert(key + i, obj1);
            //cache.InsertAsync(key + i, obj1, OnItemAdded, "", "");
        }
...

Voy a hacer clic en Entrar. Está agregando 5,000 elementos en el caché de tamaño 100 KB y lo está haciendo normalmente. Normalmente aquí me refiero a una simple inserción y luego está eliminando esos elementos nuevamente en una parte del ciclo. Entonces, al usar esto, vamos a ver cuánto tiempo lleva esta parte y luego vamos a usar las llamadas asíncronas para adiciones, inserciones asíncronas y luego para eliminarlas. Mientras agrega estos elementos, retrocedamos y veamos cómo se ven. Entonces, en este caso, solo está haciendo una eliminación básica para eliminar estos elementos. En la parte de prueba asíncrona, lo que está haciendo es realizar la llamada de inserción asíncrona. Entonces, el cliente no espera, simplemente pasa la operación a la cola. La cola no significa que vaya a ser un proceso lento, el cliente no la espera y se realiza como un proceso bonito, ya sabes, en segundo plano, pero se realiza bastante rápido. Porque muchas operaciones dentro del caché se realizan de manera asíncrona.

...
datetime2 = DateTime.Now;
Console.WriteLine("Time to remove " + objectsCount + " objects normally: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nAdding items using Async API now");
datetime1 = DateTime.Now;

for (int i = 0; i < objectsCount; i++)
{
    //cache.Insert(key + i, obj1);
    cache.InsertAsync(key + i, obj1, OnItemAdded, "","");
}
datetime2 = DateTime.Now;
Console.WriteLine("Time to add " + objectsCount + " objects with Async API: " + (datetime2 - datetime1).TotalSeconds);
Console.WriteLine("\nRemoving " + objectsCount + " items with Async API now");
...

Dejame darte un ejemplo. Entonces, por ejemplo, si se habla de replicación, si recuerda en el proceso de creación de caché, lo configuramos para que sea asíncrono. Entonces, básicamente, muchos de ellos se realizan como un proceso en segundo plano. Son muy confiables. Es solo que su aplicación, el proceso principal, la tarea principal no se ve afectada por ello. Por lo tanto, agregó esos elementos en el caché, tomó alrededor de 49 segundos agregar esos elementos en el caché. Ahora, en realidad está eliminando esos 5,000 artículos. Ahora, una vez hecho esto, veremos cómo funcionan las llamadas asíncronas. Entonces, tiene que mover 5,000 artículos. Tomó alrededor de 25 segundos eliminar esos elementos y ahora está agregando elementos con la llamada asíncrona y vamos a ver cuánta diferencia obtenemos entre 49 segundos y el número que obtendremos ahora en términos de cuándo está agregando elementos en el caché. Ahí está. Entonces, de 49 segundos se bajó a 28 segundos en la parte de adiciones y en el caso de quitar esos elementos se bajó de 25 segundos a 1.6 segundos. Entonces, esa es la cantidad de rendimiento que realmente podemos ver una vez que tiene esto involucrado. Entonces, puedes ver que hay una gran diferencia. Hay una diferencia de aproximadamente 25 segundos entre eliminar elementos de una llamada de eliminación básica y luego de una llamada asíncrona de eliminación. Entonces, eso es algo que puede esperar de este tipo de funciones que ofrece NCache.

API asíncrona

NIC duales - Demostración

Volvamos a la presentación. Hemos cubierto asíncrono y el siguiente es la serialización compacta. Entonces, nuevamente, solo esto está cubierto en aquellos escenarios en los que no tiene el lujo de hacer una actualización dentro del código y, al usar esto, puede marcar todas esas clases como serializables. Kal con ese comentario, nos quedan unos 3 minutos, así que... Bien, bien. Voy a taparlo rápidamente. Entonces, las dos últimas cosas que quedaron fueron, una es la serialización compacta y la siguiente es que tenemos la función de NIC dual. Entonces, como mencioné anteriormente, si ve que su recurso de red se está agotando, de forma predeterminada tanto el tipo de comunicación, la comunicación de servidor a servidor como la comunicación de cliente a servidor, ambas ocurrirán en la misma tarjeta de interfaz de red. Pero, si ve que los recursos de su red se están agotando, lo que puede hacer es separar el tipo de comunicación entre el cliente y el servidor y luego entre el servidor y el servidor. Es una tarea muy sencilla dentro de la NCache gerente. Si viene aquí, para seleccionarlo, simplemente haga clic derecho aquí y haga clic en seleccionar NIC.

Configurar NIC

Una vez que seleccione NIC, puede especificar qué comunicación desea que tenga lugar en esta determinada IP. Ya que solo tengo uno, tengo estas opciones disponibles. Si tengo varias direcciones IP, puedo seleccionarlas allí mismo. Entonces, solo voy a hacer clic en cancelar.

Seleccionar NIC

No tuvimos la oportunidad de hacer la demostración de serialización compacta debido a la escasez de tiempo, pero en realidad puedo compartir esta muestra con ustedes y pueden probarla y ver cómo funciona para ustedes. Sam hacia ti. Perfecto. Bueno, muchas gracias por tu tiempo Kal.

¿Hay alguna pregunta antes de terminar la sesión de hoy? Solo voy a dar un minuto para ver si hay alguna pregunta. Bien, entonces, hay una pregunta.

¿Puedes compartir el enlace donde vas a compartir esta presentación? Entonces, Kal, supongo que estará disponible en nuestro sitio web, ¿verdad?

Sí, estará disponible y tengo su correo electrónico anotado allí. Entonces, lo que puedo hacer es enviarles un correo electrónico tan pronto como se cargue. Está bien. En realidad, tenemos otra pregunta.

¿Podemos programar una presentación? Entonces, ¿podemos programar una demostración para nuestro equipo?

Si, absolutamente. Sin duda puede programar una demostración. Puedes contactar con nuestro equipo de soporte support@alachisoft.com o nuestro equipo de ventas sales@alachisoft.com y háganos saber cuáles son sus preferencias de tiempo y estaremos encantados de programar una sesión personalizada para usted.

Está bien, Kal, voy a seguir adelante y concluir esto. No creo que tengamos más preguntas. Gracias a todos por unirse y asistir a la sesión de hoy, lo apreciamos. Como dije, si tiene alguna pregunta, comuníquese con nuestro equipo de soporte o si tiene preguntas relacionadas con las ventas, comuníquese con nuestro equipo de ventas. Estaremos aquí para ayudar. No dude en llamarnos. También puede comunicarse con nosotros directamente por teléfono. Está en nuestro sitio web. Hasta la próxima, muchas gracias y que tengas una buena noche, adiós.

¿Qué hacer a continuación?

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