ASP de escalado.NET Core Aplicaciones con NCache

Seminario web grabado
Por Ron Hussain y Zack Khan

ASP.NET es una tecnología muy popular para desarrollar aplicaciones web. Ahora su última versión ASP.NET Core está ganando popularidad rápidamente entre las organizaciones ansiosas por mover sus aplicaciones web a ASP.NET Core. Pero, ASP.NET Core se encuentra con problemas de escalabilidad y rendimiento cuando se somete a una gran carga de usuarios. Esto sucede porque su almacenamiento de datos se convierte en un cuello de botella. Sin embargo, hay una manera de evitar este cuello de botella de rendimiento y escalabilidad si utiliza el almacenamiento en caché distribuido. Aprenda cómo puede optimizar su ASP.NET Core rendimiento y escalabilidad para funcionar bajo cargas de transacciones extremas.

Esto es lo que cubre este seminario web:

  • Descripción general de ASP.NET Core cuellos de botella de escalabilidad y rendimiento
  • Cómo el almacenamiento en caché distribuido resuelve estos problemas
  • Almacenamiento en caché de datos de aplicaciones a través de ASP.NET Core Interfaz IDistributedCache y Direct NCache API
  • ASP.NET Core Almacenamiento de sesión con NCache
  • ASP.NET Core Almacenamiento en caché de respuestas con NCache
  • Algunas importantes NCache características de caché distribuida

En el seminario web de hoy vamos a hacer una descripción general de ASP.NET Core cuellos de botella de escalabilidad y rendimiento y cómo el almacenamiento en caché distribuido resuelve esos cuellos de botella y otros problemas. Vamos a hablar de ASP.NET Core aplicaciones, cuáles son sus cuellos de botella de rendimiento y escalabilidad y luego hablaremos sobre cómo resolver esos cuellos de botella de rendimiento y escalabilidad con la ayuda de NCache sistema de almacenamiento en caché distribuido.

NCache es un sistema de almacenamiento en caché distribuido en memoria para .NET y .NET Core aplicaciones Está escrito en .NET y principalmente para .NET y .NET Core aplicaciones, pero principalmente el enfoque de hoy estará en torno a ASP.NET Core aplicaciones web y tengo algunas funciones de muestra disponibles. También he alineado algunas aplicaciones de muestra. Por lo tanto, será un seminario web práctico en el que compartiré algunos detalles del nivel de funciones de diferentes casos de uso que puede capturar y las funciones que están ahí para ayudar a abordar esos casos de uso y también demostraré esos ejemplos. Empecemos.

Entonces, nuestras primeras diapositivas son diapositivas introductorias sobre ASP.NET Core plataforma en general. Estoy bastante seguro de que todo el mundo sabe lo que ASP.NET Core es. Es la nueva plataforma de aplicaciones web ASP. Es limpio, liviano, modular. Es principalmente arquitectura MVC, en lo que respecta al enfoque de aplicación web. Ya sabes, el popular front-end Angular, React es principalmente un front-end basado en JavaScript y luego la arquitectura MVC para respaldarlo. Es multiplataforma. Puede ejecutarlo en Windows, Linux y cualquier otro sistema operativo, como macOS. Y, por lo general, también es algo que es muy compatible con las aplicaciones heredadas 4.0 ASP.NET.

ASP.NET Core (Popular en aplicaciones de alto tráfico)

Si tiene una aplicación ASP.NET MVC, ahora puede migrar y luego comenzar a usar ASP..NET Core tecnología para el caso, que es una arquitectura muy rápida, muy robusta y muy ligera y limpia, en general.

¿Qué es la escalabilidad?

Lo primero que hablaremos de ASP.NET Core plataforma es que requiere escalabilidad. Entonces, definamos qué es la escalabilidad. Cualquier aplicación que se ejecuta con una carga de usuario normal y por normalizada me refiero a que algunos usuarios están allí. Digamos que de 5 a 10 usuarios están conectados y están realizando ciertas transacciones, ciertas operaciones, solicitudes de lectura y escritura. La idea típica aquí es que su aplicación sería súper rápida con poca carga de usuarios. Pero, tan pronto como la carga de su aplicación crece y eso es algo que también es un requisito para el negocio, necesita que más y más usuarios inicien sesión en sus aplicaciones. Ahí es cuando sus aplicaciones tienden a ralentizarse. Podría haber un rendimiento lento bajo cargas máximas.

Si su aplicación no puede mantener el mismo rendimiento que tenía con una cantidad baja de usuarios y luego, cuando tiene una gran cantidad de usuarios, puede mantener el mismo rendimiento, esa aplicación se clasificaría como una aplicación muy escalable. La arquitectura tiene esa capacidad de escalar horizontalmente y ser capaz de manejar la mayor carga de sus usuarios finales. Por lo tanto, el alto rendimiento bajo cargas máximas es lo que realmente define el factor de escalabilidad.

Aquí hay un gráfico. Por lo general, la escalabilidad se logra dentro de ASP.NET y ASP.NET Core plataforma a través de múltiples servidores web o de aplicaciones.

Escalabilidad lineal

Puede distribuir la carga de su aplicación. Simplemente implementa su aplicación en varios servidores web o de aplicaciones y, en función de eso, simplemente distribuye la carga de usuarios de su aplicación en esos servidores y, a medida que agrega más servidores, obtiene una mejora lineal en la capacidad de manejo de solicitudes. Más servidores significan más capacidad de manejo de solicitudes fuera de su aplicación.

Aquí hay una escalabilidad no lineal en la que incluso después de agregar más servidores, la arquitectura no está diseñada de tal manera que, aunque está agregando muchos servidores web o servidores de aplicaciones, sus aplicaciones no se están escalando, ya que su carga de usuarios es creciente.

Escalabilidad no lineal

Por lo tanto, sus requisitos de transacción están creciendo y está agregando servidores, está haciendo todos los pasos correctos, pero aún no puede obtener la capacidad que necesita para acomodar el aumento de la carga de solicitudes. Entonces, ese problema generalmente está asociado con las fuentes de datos de back-end y hablaré sobre eso.

Entonces, antes que nada, veamos qué aplicaciones necesitan escalabilidad. ¿Cuáles son los diferentes tipos de aplicaciones? Dentro de ASP.NET y .NET Core tenemos aplicaciones web y aplicaciones web MVC, que ejecutan el negocio principal, algunos servicios web, algunas llamadas de servicio, algunos microservicios, esa es la nueva arquitectura y podría ser cualquier otro .NET general o .NET Core Solicitud.

Todo esto exige escalabilidad, porque es posible que tenga muchos usuarios internos o externos o que se produzca una carga de solicitudes, que debe cumplir la arquitectura de su aplicación.

El problema de la escalabilidad

Mencioné que puede crear una granja web. Puede distribuir la carga de su aplicación en varios servidores. Entonces, ¿dónde está exactamente el problema de escalabilidad? Como puede ver, si agrega servidores, debería poder manejar más y más carga de solicitudes, ya que le brinda una escalabilidad lineal en lo que respecta a la granja de aplicaciones o la granja web.

Pero, ¿cuándo exactamente comienza a ver una escalabilidad no lineal o ninguna escalabilidad en absoluto? Eso es típicamente con bases de datos relacionales. Su nivel de aplicación se escala muy bien, correcto. Puede agregar más servidores. Puede crear varias instancias de la misma aplicación en la misma caja o puede tener cajas separadas que alojen sus aplicaciones. Pero todas estas aplicaciones normalmente se comunican con una base de datos relacional de back-end y la base de datos relacional es muy buena para el almacenamiento, pero cuando se trata de manejar una cantidad extrema de carga de solicitudes, por ejemplo, tiene mucha carga transaccional en sus aplicaciones, esa base de datos se convierte en un cuello de botella En primer lugar, va a ralentizar las cosas, por lo que es un cuello de botella en el rendimiento y luego no tiene capacidad para aumentar la escalabilidad. No tiene ninguna capacidad para aumentar la capacidad. Simplemente le daría la capacidad del servidor dado donde está alojada la base de datos.

También podría ser alguna base de datos de mainframe. Podría ser algún sistema de archivos. Todas estas fuentes son un cuello de botella de escalabilidad para su aplicación y ahí es donde sus aplicaciones se ralentizan. Sus solicitudes comienzan a acumularse y la experiencia general del usuario final se ve afectada por eso. NoSQL no es la respuesta Sabes, entiendo que muchas NoSQL los productos están ahí. También tenemos un producto llamado NosDB, Que es un NoSQL database. Pero el problema principal con NoSQL databases es que sus aplicaciones requerirían una nueva arquitectura, donde deja de usar una base de datos relacional y comienza a usar una NoSQL fuente de datos no estructurada en comparación.

Por lo tanto, rediseñar la aplicación tampoco es fácil, ¿verdad? Entonces, ese es otro problema que debes tomar. Por lo tanto, en general, sus aplicaciones no son escalables, principalmente debido a las fuentes de datos de back-end.

La solución: NCache Caché distribuida

¿Cuál es la solución? Es muy simple, que comience a usar un sistema de almacenamiento en caché distribuido como NCache. Está en la memoria, por lo que es súper rápido en comparación con la base de datos. Entonces, ese es el primer beneficio que obtienes. Entonces, con el acceso en memoria, en comparación con el acceso basado en disco NCache es súper rápido en comparación. Entonces, en primer lugar, sus solicitudes regulares de solicitud van a NCache en comparación con la base de datos, será súper rápido y también quitará carga de la base de datos al ahorrar viajes a las fuentes de datos de back-end. Por lo tanto, su base de datos también es libre de hacer otras cosas. El segundo beneficio es que es muy escalable. Es linealmente escalable en su modelo. No es sólo un único servidor. Hay varios servidores que puede usar para alojar su clúster de caché. Es un clúster de caché. Por lo tanto, el equipo de servidores trabaja en combinación entre sí y ayuda a atender las solicitudes de sus clientes. Más servidores significan más capacidad de manejo de solicitudes de NCache y ahí es donde te brinda enormes beneficios, donde no solo obtienes respuestas súper rápidas de NCache, es súper rápido, de baja latencia y también le brinda un alto rendimiento y una escalabilidad extremadamente alta. Puede seguir agregando más servidores y puede aumentar linealmente esa capacidad siempre que crezca la carga de usuarios, sin cambiar nada dentro de la arquitectura de su aplicación.

Y, lo bueno de NCache es que lo usa además de una base de datos back-end. No es un reemplazo de sus fuentes de datos relacionales convencionales. No tenemos que rediseñar la aplicación para empezar a usar NCache. Siempre puedes usar NCache en combinación con una fuente de datos de back-end, donde algunos o la mayoría de sus datos están dentro NCache y la base de datos tiene una copia maestra de la misma. Pero, para algunos casos de uso, el caché tendría todos los datos. Por ejemplo, para sesiones y para otros casos de uso.

NCache Números de escalabilidad

Aquí están nuestros números de rendimiento. Realizamos estas pruebas en nuestro laboratorio de AWS. Estos fueron datos de una aplicación de la vida real, simulados en nuestro laboratorio de AWS. Por lo tanto, no es un toque y listo. Datos reales de aplicación simulados, en nuestro entorno. Donde usamos 5 NCache servidores y pudimos lograr 2 millones de solicitudes por segundo de NCache.

Entonces, ese es el tipo de mejoras de rendimiento que tiene si usted o los números de escalabilidad que tiene, si tiene más y más servidores agregados. Entonces, 2 millones de solicitudes por segundo con solo 5 NCache servidores y fue una tendencia de aumento muy lineal y debería seguir aumentando, si continúa agregando más servidores.

Estos también se publican en nuestro sitio web. Hay una demostración de video Disponible también.

Arquitectura de implementación

Esta es nuestra arquitectura de implementación. Típicamente, así es como NCache se implementa el sistema de almacenamiento en caché distribuido. Es compatible con todos los entornos locales y en la nube. Puede, solo necesita que .NET o NET Core Framework estén disponibles. Ese es el único requisito previo para NCache y puede implementarlo tanto en Windows como en servidores Linux. Podrían ser sus cajas físicas o virtuales en las instalaciones o podría ser cualquier nube pública o privada, donde tenga .NET o .NET Core instalado en Windows o Linux. Entonces, estos son dos requisitos.

Aparte de eso NCache es compatible con todas las plataformas. esta disponible en Azure Marketplace, así como AWS y también estamos ideando un modelo basado en SaaS o implementación de NCache en nuestras próximas versiones.

Hay dos opciones de implementación. Una es que debe usar servidores dedicados para el almacenamiento en caché y sus aplicaciones se conectan en un modelo de servidor cliente. Ese es el modelo preferido en la nube también donde no tiene máquinas virtuales del lado del cliente pero tiene una implementación del lado del servidor.

Y, la segunda opción de implementación es que use sus cajas de aplicaciones existentes como su NCache servidores también. Eso es principalmente en las instalaciones donde ya tiene un nivel de aplicación allí. Configuraciones más pequeñas, es posible que desee utilizar NCache para ser instalado en la misma caja, mismo conjunto de servidores.

De cualquier manera NCache maneja la mayor parte de su tráfico. Se recomienda el 100% y parte del tráfico siempre puede ir a la base de datos de back-end y estas podrían ser sus operaciones transaccionales de lectura y escritura que puede manejar a través de la memoria caché a las fuentes de datos de back-end.

Por lo tanto, puede usar el caché como patrón de sitio donde su aplicación tiene datos y actualiza datos o obtiene datos del caché y la base de datos en conjunto o puede usar el enfoque de lectura y escritura que también está disponible con NCache.

Usos comunes de la caché distribuida

Hablaré sobre algunos casos de uso y luego pasaremos directamente a nuestro ASP.NET Core almacenamiento en caché específico características. Entonces, hablemos de algunos casos de uso comunes de NCache. Hay muchos casos de uso. Y, desde un punto de vista técnico, he enumerado algunos y estos son específicos de ASP.NET Core aplicaciones, pero en general para cualquier .NET o ASP.NET o ASP.NET Core or .NET Core. Podría ser una aplicación web, alguna aplicación back-end, algunos flujos de trabajo, algunos servicios de Windows, cualquier aplicación puede utilizar NCache y hay muchos casos de uso entre los que puede elegir.

  1. Almacenamiento en caché de datos de aplicaciones

    Principalmente, para ASP.NET Core, nos centraremos en el almacenamiento en caché de datos de la aplicación y en esto tenemos dos opciones. Puedes usar Interfaz IDistributedCache. Si ya está usando IDistributedCache en sus aplicaciones, simplemente puede conectarlo NCache como proveedor de eso. Entonces, esa es la primera opción. La segunda opción es esa, usas direct NCache Las API y el almacenamiento en caché de datos de la aplicación almacenan en caché casi cualquier cosa dentro de su aplicación. Podrían ser sus objetos de dominio, colecciones, conjuntos de datos, cualquier dato que le gustaría usar más de una vez y no desea ir a la base de datos de back-end, ha recuperado esos datos y ahora puede conservarlos en el caché y puede seguir usando el repositorio de caché y ahorrar viajes a la base de datos.

  2. ASP.NET Core Caché de sesión y SignalR Backplane

    El segundo caso de uso es ASP.NET Core almacenamiento en caché específico. Estas son nuestras funciones de almacenamiento en caché de front-end web. En este frente, tenemos muchas características. Puedes usar ASP.NET Core estado de sesión. Ya sabes, son sesiones de un solo sitio y de varios sitios. NCache es un clúster de caché distribuido. Entonces, sus sesiones se almacenan de manera distribuida dentro NCache. También es una opción sin cambio de código, casi con una línea de cambio de código en el método de extensión donde se conecta NCache. No se necesitan cambios extensos en el código para usar esto y estos son muy confiables en el interior NCache porque las sesiones se replican entre servidores. Por lo tanto, cualquier servidor que se caiga, no tendría ninguna pérdida de datos o tiempo de inactividad de la aplicación de su parte.

    La segunda característica aquí es ASP.NET Core almacenamiento en caché de respuestas. Si tienes páginas estáticas. Históricamente, en ASP.NET teníamos almacenamiento en caché de salida. En el ASP más reciente.NET Core plataforma, puede usar el almacenamiento en caché de respuestas, donde define encabezados de nivel de página y, en función de esos, todas las salidas de página de esas páginas se almacenan en caché dentro NCache. Por lo tanto, las respuestas se almacenan en caché. Si vuelve a emitir exactamente las mismas solicitudes, obtendrá la respuesta almacenada en caché disponible. Entonces, esa es una característica dentro NCache, que también es una opción de cambio de código que puede usar en ASP.NET Core nivel de almacenamiento en caché de front-end.

    Y luego, si usa SignalR y tiene una granja de servidores web, necesita un backplane como requisito indispensable. Asi que, SignalR Backplane es necesario si pasa de un servidor único a una implementación de granja web y, en ese caso, NCache puede actuar como un ASP.NET Core plano posterior, SignalR Backplane para sus aplicaciones SignalR. Está utilizando Pub/Sub Messaging en segundo plano, que se basa en eventos. Muy rápido, muy escalable. Por lo tanto, obtiene beneficios de alto rendimiento y escalabilidad y alta disponibilidad y confiabilidad, si se conecta NCache como ASP.NET Core SignalR Backplane.

  3. Mensajería de publicación/suscripción

    Finalmente, el tercer caso de uso es Pub/Sub Messaging. Mensajería de publicación/suscripción es un caso de uso separado también. Para SignalR, detrás de escena que estamos usando es Pub/Sub Messaging. Pero Pub/Sub Messaging se puede usar como un caso de uso separado dentro NCache así como. Para la aplicación de Microservicios esto tiene mucho sentido, donde tiene aplicaciones simples definidas bajo la arquitectura de Microservicios. Esos son responsables de una tarea dedicada. Un propósito muy importante que están sirviendo. Por lo tanto, es muy difícil organizar la comunicación entre esos microservicios y NCache puede resolver ese problema. No es necesario que implemente ninguna comunicación dentro de sus aplicaciones de microservicios. Puedes confiar en NCache plataforma de comunicación para eso y cualquier aplicación conectada a ella puede enviar y recibir mensajes y no tiene que sufrir ninguna degradación del rendimiento mientras lo hacen.

    Puede tener un modelo de suscriptor de editor. Donde los editores publican datos en el caché y luego el caché almacena y transmite esos mensajes a todos los suscriptores. Es un mecanismo impulsado por eventos Async. Por lo tanto, el editor y los suscriptores ni siquiera tienen que conocerse. Por lo tanto, no hay latencia, no hay espera involucrada, no hay llamadas sincrónicas involucradas. Por lo tanto, es una arquitectura muy sólida, muy rápida y débilmente acoplada y todo está administrado por NCache, en lo que respecta a esta plataforma.

Demostración práctica

Por lo tanto, hemos cubierto estas características de alto nivel. A continuación, les mostraré el producto real en acción. Donde crearé un clúster de caché. Pruébalo. Mostrarle algunos aspectos de monitoreo y luego hablaremos sobre todas estas características que puede usar en ASP.NET Core uno a uno. Entonces, he alineado algunas aplicaciones de muestra para eso. Entonces, estoy iniciando sesión en mi entorno de demostración.

Entonces, aquí tenemos dos NCache servidores que usaré y mi caja actuaría como una máquina cliente desde donde ejecutaría todas estas aplicaciones de muestra. Entonces, la idea aquí es que voy a usar el herramienta de gestión basada en web y herramienta de seguimiento.

Entonces, esta herramienta de administración basada en la web le permite administrar y monitorear todo desde un solo punto. Podría ser cualquier solicitud web, solicitud http desde cualquier lugar, desde su entorno a uno de sus NCache servidores o clientes y debería permitirle administrar y monitorear todo de forma remota a través de la web.

Crear una caché en clúster

Entonces, localhost, puede proporcionar una dirección IP y puede acceder a este recurso desde cualquier lugar a través de Internet. Entonces, voy a seguir adelante y crear un nuevo caché. Digamos, 'aspcorecache'. Todos los cachés deben tener un nombre. También puede crear varios clústeres de caché y puede crear cualquier nombre de caché significativo según sea necesario.

El modo de serialización podría ser binario o JSON. Por lo tanto, me quedaré con binario, me quedaré con binario y luego JSON también es muy flexible, entonces, si desea usar eso, elegiré la partición de la topología de caché de réplica.

En un radio de NCache Hay muchos topologías de almacenamiento en caché. Si te llevo rápidamente hacia el final. Entonces, tenemos muchas topologías de almacenamiento en caché para elegir. Hemos particionado y luego tenemos particionado con copias de seguridad. Entonces, en esto tenemos cada servidor manteniendo dos particiones. Una partición de datos activa, donde se conectan los clientes y una partición de réplica pasiva de otro servidor. Como puede ver, el servicio uno está activo, su copia de seguridad está en dos y el servidor dos está activo, su copia de seguridad está en el servidor uno. En caso de que algún servidor se caiga, la copia de seguridad se activa y obtienes todos los datos desde aquí. En operaciones normales, estas particiones tienen una distribución equitativa de los datos.

Los clientes están conectados a todos los servidores, por lo que las solicitudes de lectura y escritura son súper rápidas y, si agrega más servidores, obtiene más capacidad de manejo de solicitudes de lectura y escritura porque todos esos servidores funcionan en combinación entre sí. Entonces, esa es la topología que elijo partición de réplica.

Y luego la opción de replicación asíncrona. Entre activo y copia de seguridad, puede elegir sincronizar o asíncrono. La sincronización es más confiable. Asíncrono es más rápido. Entonces, voy a seguir adelante con eso.

El tamaño 1024 es lo suficientemente bueno para esta demostración, pero puede encontrar cualquier tamaño que le parezca significativo.

Parámetros TCP.

Pregunta: Actualmente estamos usando NCache, ¿hay alguna manera de evitar un archivo client.ncc o nc conf o algo que tenga en su proceso de desarrollo?

Sí. Eso es absolutamente posible. client.ncconf le permite especificar configuraciones para conectarse a un servidor de caché, donde se ejecuta el clúster de caché, a la derecha. En mi caso, tengo dos cajas y un nombre de caché. Entonces, client.ncconf tiene el nombre del caché y los servidores donde está configurado este caché. Si desea evitar client.ncconf, puede proporcionar todas estas configuraciones en línea. Tenemos parámetros de inicialización de caché. Los llamamos parámetros de inicio de caché. Esos son que el objeto le permite especificar todas estas configuraciones dentro del código de la aplicación. Entonces sí. Para responder a esa pregunta, debe usar los parámetros de inicio de caché.

Pregunta: ¿Podemos desplegar NCache en azul?

Absolutamente. Discutí esto cuando compartíamos detalles sobre la arquitectura de implementación. NCache es totalmente compatible con Microsoft Azure y AWS y cualquier otra nube pública o privada. Solo prerrequisito para NCache es .NET o .NET Core, depende del sistema operativo que elija. También estamos desarrollando nuestro modelo SaaS dentro de Azure y AWS. Por lo tanto, es totalmente compatible. Nuestra imagen de mercado también se publica. Entonces, hay muchas maneras en que puede usar NCache en Azure.

NCache es un protocolo de agrupamiento de caché basado en TCP/IP. Por lo tanto, requiere una dirección IP y un puerto. Entonces, mantendré todo predeterminado en la pantalla.

Si mi caché se llena, tengo dos opciones, puedo rechazar nuevas actualizaciones y seguir usando el caché para leer o puedo activar los desalojos y eliminaría automáticamente algunos datos para dejar espacio para los elementos más nuevos.

Para las sesiones, para el estado de vista, para el almacenamiento en caché de respuestas e incluso para el almacenamiento en caché de objetos, si los datos son de naturaleza importante, le recomiendo que desactive el desalojo y proporcione un tamaño de gas lo suficientemente grande para que nunca se llene e incluso si se llena. puede cambiar el tamaño de caché en tiempo de ejecución. Pero, si está bien pagar, está bien perder algunos datos, si puede pagar eso, entonces, en ese caso, puede habilitar los desalojos y cuando el caché se llene, eliminará automáticamente algunos datos y dejará espacio para los datos más nuevos. Entonces, eso es lo que hace el desalojo.

Inicie este caché al finalizar e inicie automáticamente este caché al iniciar el servicio. Entonces, cada vez que mi servidor se reinicia, el caché se inicia automáticamente y eso es todo. Así de fácil es configurar un clúster de caché de dos nodos con NCache.

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

Entonces, nuestro caché está en funcionamiento. También está activado, así que voy a seguir adelante rápidamente y probarlo. Ventana de estadísticas. Entonces, estos me muestran contadores de perfmon en ambos servidores y luego monitorean aspectos de NCache.

Muy bien. Por lo tanto, también me brinda una vista del informe del tablero del lado del servidor y del lado del cliente. Entonces, todos los parámetros están ahí.

Lo siguiente es probar este caché. No hay ninguna aplicación conectada, así que voy a seguir adelante y hacerlo. Ese es el nombre del caché y, detrás de escena, usa configuraciones del lado del cliente para conectarse y se conectaría a mi clúster de caché y comenzaría a simular solicitudes. Como puede ver, el contador de solicitudes por segundo y el contador promedio de microsegundos por operación de caché muestran la actividad. También tenemos adiciones, recuperaciones, actualizaciones y tenemos un contador de tamaño de caché, CPU, memoria y tenemos direcciones IP de clientes que actualmente están conectadas a la memoria caché.

Déjame seguir adelante y ejecutar otra instancia de esta herramienta.

Pregunta: Otra pregunta, mientras hacía esto es, ¿podemos monitorear todos los clientes conectados a nuestros cachés?

Absolutamente. Esa es una de las características muy poderosas dentro NCache. Puedo mostrar esto con la ayuda de este ejemplo. Ahora que tenemos dos clientes conectados. En primer lugar, puedo ver los paneles de los clientes. Por lo tanto, estos dos clientes se ejecutan desde 107 y puedo ver que se realizan operaciones de lectura desde este cuadro de cliente. Si estoy ejecutando aplicaciones desde mi caja, lo que haría, también vería las estadísticas de mi caja aquí y, de manera similar, también podemos ver los procesos, sus ID de proceso, puertos, bytes enviados y recibidos desde aquí. Pero, creo que lo principal que está buscando son diferentes aspectos de monitoreo desde el lado del cliente. Entonces, tenemos operaciones de lectura por segundo, adiciones por segundo, actualizaciones por segundo, recuperaciones.

Por lo tanto, tenemos un conjunto completo de contadores del lado del cliente, que están disponibles como parte de NCache, a la derecha, y Cache health y todos estos son contadores del lado del servidor, pero todos estos contadores, que está mostrando en el lado del cliente, se pueden agregar y también puede revisarlos para sus servidores de aplicaciones cliente.

¿Entonces NCache es muy extenso en su soporte para el monitoreo del lado del cliente. Espero haber respondido a tu pregunta.

Ahora, he ejecutado, en realidad puedo ejecutar dos instancias de la herramienta de prueba de esfuerzo y puede ver entre 800 y 900 solicitudes por segundo por cada NCache servidor. Entonces, se manejan alrededor de 1500 solicitudes por segundo en promedio.

Entonces, esa fue una demostración rápida. Voy a detener estas herramientas. A continuación, le mostraré las funciones reales que puede utilizar. Entonces, hemos pasado una buena cantidad de tiempo explicando cómo NCache es muy escalable.? ¿Cómo se despliega? ¿Cómo configurar y crear un clúster de caché?

Ahora, lo siguiente que me gustaría destacar es cómo utilizar NCache en ASP.NET Core aplicaciones y cuáles son los principales casos de uso. Cubrimos diferentes casos de uso. Entonces, comenzaré con los casos de uso de almacenamiento en caché de front-end web dentro de ASP.NET Core.

NCache ASP.NET Core Caché de sesión

Entonces, la primera característica que voy a resaltar es NCache ASP.NET Core almacenamiento en caché de la sesión. Tenemos dos opciones aquí. Puede usar, si ya está usando sesiones y lo más probable es que esté usando la interfaz IDistributedCache. Entonces, puedes enchufar NCache como proveedor de almacenamiento en caché de sesiones a través de IDistributedCache. Tiene un proveedor en memoria independiente. Tiene un proveedor de servidor SQL. Independiente es un único punto de falla. No es escalable. El servidor SQL también es un punto único de falla en algunos casos. No es escalable y es muy lento.

NCache El proveedor es súper rápido. Está en la memoria. Es muy escalable. No es un punto único de falla y aumenta la capacidad en tiempo de ejecución. Por lo tanto, puede agregar más y más servidores y puede lograr una escalabilidad ilimitada a partir de NCache. Entonces, IDistributedCache, repasemos eso rápidamente. Entonces, aquí está nuestro juego de conjeturas, IDistributedCache.

public void ConfigureServices(IServiceCollection services)
{
	//Add framework services
	services.AddMvc();

	services.AddNCacheDistributedCache(configuration =>
        {
	   configuration.CacheName = "MyNCacheCache";
	   configuration.EnableLogs = true;
	   configuration.ExceptionsEnabled = true;
        });
}

public void Configure(IApplicationBuilder app)
{
	app.UseNCacheSession();
}

Todo lo que necesita hacer es agregar servicios NCache Caché distribuida y luego diga Uso de la aplicación NCache Session y aquí hay una aplicación de muestra que hará precisamente eso.

public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            //To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
            services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
			services.AddSession();			
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

La segunda opción aquí es NCache proveedor de sesión que tiene características avanzadas y también tengo una aplicación de muestra para eso. Entonces, centrémonos en esto. Principalmente, porque nuestro proveedor es mucho más rico en funciones en comparación con IDistributedCache, por lo que me gustaría resaltar esto y, como parte de eso, vería todas las funciones que el proveedor de IDistributedCache también le brinda.

Entonces, volviendo aquí. En primer lugar, necesitas NCache Paquete NuGet, que ya he agregado dentro de este. Entonces, si tenemos AspNetCore.Sesiones.NCache, derecho. Entonces, ese es el paquete NuGet y permítanme regresar rápidamente aquí y revisar la sesión aquí también y esto tiene NCache.Extensiones.de.Microsoft.Almacenamiento en caché. Por lo tanto, los paquetes NuGet de la sesión IDistributedCache son ligeramente diferentes a los NCache proveedor de sesión real.

Por lo tanto, voy a centrarme en este aquí. Todo lo que necesitas hacer es…. En primer lugar, ven a Startup.cs. Dispones de servicios.AñadirNCacheSesión y se tarda NCache ajustes en la configuración.

... 
    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();
        
        //To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
        //services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
		//services.AddSession();
			
        services.AddNCacheSession(Configuration.GetSection("NCacheSettings"));
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
... 

Y, dentro de la configuración, especificas todo NCache configuración del proveedor. Por ejemplo, estoy usando ASP.NET Core cache. SessionAppId es un atributo de identificación de aplicación que se agrega a la aplicación con la clave del elemento de caché. Su identificación de sesión se convierte en la clave de caché y este atributo se le agregará. Por lo tanto, puede ver de forma única sesiones de diferentes aplicaciones dentro NCache y luego configura un bloqueo de sesión. Puede, si establece esto en verdadero. De acuerdo, entonces, si establece esto en verdadero, eso le permitiría simplemente bloquear la sesión, de modo que no se permita el acceso simultáneo.

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "NCacheSettings": {
    "CacheName": "mycache", //Replace "myPartitionedCache" with the name of your cache
    "SessionAppId": "GuessGame", //(Optional)Specifies an identifier to make sure that session ID remains unique in case multiple applications are using the same cache.
    "EnableSessionLocking": false, //(Optional)If this flag is set, NCache Session Store Provider exclusively locks the session-store item for which multiple concurrent requests are made. The default is false.
    "SessionLockingRetry": -1, //(Optional)If enableSessionLocking is true and this integer is not less than 0, NCache Session Store Provider will return empty session after sessionLockingRetry, which specify the number of retries to acquire a lock. The default is -1.
    "EnableLogs": false, //(Optional)When this flag is set, store provider logs all error information. The log files are created in %NCHOME%/log-files/SessionStoreProvider. The default is false.
    "EnableDetailLogs": false, //(Optional)When this flag is set, store provider logs all debugging information. The log files are created in %NCHOME%/log-files/SessionStoreProvider. The default is false.
    "ExceptionsEnabled": false, //(Optional)Specifies whether exceptions from cache API are propagated to the page output. Setting this flag is especially helpful during development phase of application since exceptions provide more information about the specific causes of failure. The default is false.
    "OperationRetry": 0, //It specifies the number of times server will retry the operation, in case connection is lost with a server while an operation is executing. Its default is zero.
    "operationRetryInterval": 0 //It specifies the time interval between each operation retry, in case connection is lost with the server. Its default value is zero.
  }
}

Entonces, solo puedes leer la sesión. El acceso de escritura solo se otorga a la solicitud actual que tiene el registro y luego tenemos registros detallados disponibles. Sesiones de un solo sitio y de múltiples sitios están disponibles. Por lo tanto, todas estas funciones solo están disponibles si conecta nuestro ASP.NET Core proveedor de sesión Las sesiones de IDistributeCache son compatibles, pero son limitadas. Entonces, voy a ejecutar esto muy rápido y eso simulará una aplicación que eventualmente se conectará a este ASP.NET Core cache.

En realidad, déjame detener esto. Permítanme agregar mi caja como cliente primero. Entonces, aquí todo lo que necesito hacer es agregar el cuadro del cliente que es mi cuadro aquí.

Ahí tienes Tengo todas las configuraciones ahora y ahora puedo ejecutar esta aplicación una vez más y eso debería poder conectarse a mi clúster de caché. Muy bien. Por lo tanto, tomará algún tiempo para la instanciación por primera vez.

Entonces, esto crearía un objeto de sesión dentro NCache. Veré, si voy al aspecto de monitoreo, vería un cliente conectado. Una vez que el proveedor se inicialice, ese cliente se conectará a 107 y 108 y creará objetos de sesión dentro NCache. Por el momento, solo se crearía un objeto de sesión porque ese es el usuario principal. Voy a ser el único usuario que haya iniciado sesión, pero si tiene varios usuarios de aplicaciones, verá varias sesiones creadas dentro NCache. Pero, la idea aquí es, es muy simple que todo lo que necesita hacer es agregar estas dos líneas de códigos. Agregar NCache sesión y luego decir Usar NCache de preguntas y respuestas.

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();

//To test sessions with NCache Distributed Cache, uncomment the following lines and comment the line after it
//services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
//services.AddSession();
			
services.AddNCacheSession(Configuration.GetSection("NCacheSettings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }
    app.UseStaticFiles();
    //To test NCache Distributed Cache, uncomment this and comment the line below this
    //app.UseSession();
    app.UseNCacheSession();
... 

Estos métodos de extensión cubrirán todo. La primera creación de instancias lleva un poco más de tiempo, eso es lo que hemos visto en ASP.NET Core pero una vez que las aplicaciones estén listas y funcionando, deberíamos poder probarlo muy rápido. Ahí tienes Un cliente ya está conectado, así que creo que estamos allí.

Mientras tanto, déjame ejecutar un comando rápido que dice exportar. Esta herramienta vuelca todas las claves de caché que están actualmente allí.

Entonces, espero que se agregue un objeto de sesión en el caché porque un cliente está conectado y eso debería permitirme que haya dos sesiones. Uno del intento anterior y otro de este, ya está. Ahí tienes

Este es un juego de adivinanzas que le permite adivinar un número y agrega esos números dentro de la sesión y también muestra esos números. Entonces, déjame adivinar un número más grande y así es como va a hacer la solicitud a NCache.

Entonces, es una aplicación bastante simple, pero si regresa aquí, tenemos dos elementos en el caché que están allí y debe haber visto esas dos solicitudes que acabo de hacer. NCache lado del servidor.

Entonces, eso completa nuestra primera demostración, que puede conectar NCache para el almacenamiento en caché de la sesión. Hay muchas características. Se admiten sesiones de un solo sitio y de varios sitios. Se admite el bloqueo de sesión. El registro extensivo está disponible. Es muy seguro. Tenemos seguridad y encriptación encima. Entonces, es un paquete completo, si planea usar NCache para el almacenamiento en caché de la sesión.

ASP.NET Core Almacenamiento en caché de respuestas

La segunda característica aquí es ASP.NET Core almacenamiento en caché de respuestas. En esto, tenemos encabezados http en las aplicaciones. Puede elegir que las salidas de la página se almacenen en caché y usar NCache middleware de almacenamiento en caché de respuesta para el almacenamiento en caché y es nuevamente a través de la interfaz IDistributedCache. Entonces, si vuelvo aquí mismo, tenemos esto aplicación de muestra.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Alachisoft.NCache.Caching.Distributed;

namespace ResponseCaching
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            #region Option1
            // Reading NCacheSettings using appsettings.json

Entonces, todo lo que necesita hacer para usar esto es usar este paquete NuGet NCache.Extensiones.de.Microsoft.Almacenamiento en caché. Esto cubrirá las sesiones, IDistributedCache para el almacenamiento en caché de objetos y el almacenamiento en caché de respuestas en un paquete NuGet.

Y, luego, lo siguiente que debe hacer es servicios.AñadirNCacheCaché distribuido.

// This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            #region Option1
            // Reading NCacheSettings using appsettings.json
            services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
            #endregion

            #region Option2
            // Reading NCacheSettings using hardcoded values
            //services.AddNCacheDistributedCache(options =>
            //{
            //    options.CacheName = "myPartitionedCache";
            //    options.EnableLogs = true;
            //    options.ExceptionsEnabled = true;
            //});
            #endregion

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

Entonces, esa es una interfaz IDistributedCache que se conecta, pero la usaremos para el almacenamiento en caché de respuestas y en la configuración de la aplicación tenemos los nombres de caché y algunas configuraciones de registro que hemos configurado y si vuelvo aquí, tendría almacenamiento en caché de respuestas. configurado también, services.AddResponseCaching();

...
namespace ResponseCaching
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddResponseCaching();
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
...

Entonces, esta aplicación espera que se realice el almacenamiento en caché de la respuesta. Se haría a través NCache utilizando la interfaz IDistributedCache. Entonces, voy a ejecutar esto muy rápido porque lleva algo de tiempo y luego espero que pueda conectarse realmente a NCache y luego le mostraremos los datos que se agregan.

Si te muestro el código. Ya sabes, también puedes especificar configuraciones en línea. Por ejemplo, 'AgregarNCacheDistributedCache' y puede decir el nombre de caché 'demoClusteredCache' o 'aspCoreCache' y puede especificar todas las configuraciones en línea

public void ConfigureServices(IServiceCollection services)
{
...
   services.AddNCacheDistributedCache(configuration => 
   {
	configuration.CacheName = "demoClusteredCache";
	configuration.EnableLogs = true;
        configuration.ExceptionsEnabled = true;
   });
...
}

o simplemente puede usar el NCache configurar y dar configuraciones a través de NCache configuración, aquí mismo. Podría ser a través de la configuración o mediante la configuración en línea. Entonces, es muy simple en ese frente.

public void ConfigureServices(IServiceCollection services)
{
   services.AddResponseCaching();

   //remaining services here
   ...
   //Add NCache services to the container
   services.SetNCacheSessionConfiguration ( 
	Configuration.GetSection("NCacheSettings"));

   services.AddNCacheDistributedCache();

   services.AddMvc();
}

Si vuelvo aquí ahora, esperamos que se conecten dos clientes porque la aplicación de almacenamiento en caché de respuestas también establecería una conexión con NCache y veríamos algunos elementos en el caché como resultado de eso.

Pregunta: ¿Cómo se cifran y mantienen seguros exactamente los datos?

Permítame mostrarle esta muestra de almacenamiento en caché de respuestas y luego le mostraré las funciones de cifrado de seguridad internas. NCache. Entonces, tenemos la aplicación ejecutándose y, como puede ver, hemos agregado algunos elementos. Si simplemente actualizo esto, tenemos los valores que se actualizan desde aquí y esto está siendo, el contenido de salida de esta página se almacena dentro NCache a través de nuestro almacenamiento en caché de respuestas y si le muestro las claves de caché, ahora tenemos algunos elementos más en el caché. Entonces, dos elementos además de los elementos de sesión que ya están allí.

Ahora, volviendo a cifrado de seguridad. Son muy extensos por dentro NCache. Tenemos características de seguridad y encriptación. Hay muchos proveedores de seguridad entre los que puede elegir. Contamos con proveedores de AES y DES. Múltiples de esos. Tenemos proveedores de encriptación compatibles con FIPS y también tenemos soporte para TLS 1.2. Por lo tanto, la seguridad a nivel de transporte también está disponible con NCache. Entonces, eso es lo que cubre su encriptación. Donde puede tener un cifrado de extremo a extremo entre sus cajas de cliente y servidor y luego, desde el punto de vista de la seguridad, puede elegir quiénes podrían ser administradores de caché, quiénes podrían ser usuarios de caché y tenemos un proveedor de seguridad de cifrado basado en LDAP basado en Active Directory que usted puede enchufar

Entonces, si hay alguna pregunta específica, puede enviarnos un correo electrónico y trabajaremos con usted y compartiremos todos los detalles sobre cómo configurarlos. Pero tenemos un apoyo muy extenso dentro NCache. Entonces, volviendo aquí. Entonces, esto cubre nuestro ASP.NET Core Almacenamiento en caché de respuestas.

ASP.NET Core SignalR Backplane

La siguiente característica es ASP.NET Core SignalR Backplane. En esto, si está usando una granja web, puede usar NCache como backplane para él y en comparación con los backplanes convencionales, NCache es mucho más rápido, muy confiable y muy escalable también.

Entonces, aquí está el paquete NuGet que agregué. AspNetCore.SignalR.NCache que puedes buscar. Ya está instalado. Todo lo que necesita hacer, nuevamente es tomar un nombre de caché a través de la configuración de la aplicación y luego aquí está el método de extensión. Entonces, si tiene services.AddSignalR, en eso tenemos un método de extensión donde agrega NCache tiene un SignalR Backplane para ASP.NET Core aplicaciones.

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.Configure<NCacheConfiguration>(Configuration.GetSection("NCacheConfiguration"));
    services.AddSignalR().AddNCache(ncacheOptions =>
    {
        ncacheOptions.CacheName = Configuration["NCacheConfiguration:CacheName"];
        ncacheOptions.ApplicationID = Configuration["NCacheConfiguration:ApplicationID"];
        // Uncomment in case of cache security enabled.
        //ncacheOptions.UserID = Configuration["NCacheConfiguration:UserID"];
        //ncacheOptions.Password = Configuration["NCacheConfiguration:Password"];
    });
}

Lo ejecutaré muy rápido porque está tomando algo de tiempo. Creo que muchas cosas están funcionando. Entonces, ejecutaré esta muestra. Entonces, eso activaría una aplicación de chat y estaría usando, detrás de escena, está usando Pub/Sub Messaging de NCache. Entonces, para eso, lo que realmente haré es volver aquí y, en el lado del servidor, le mostraré algunos contadores de rendimiento, que le permitirán administrar y monitorear específicamente los mensajes de Pub/Sub y SignalR está usando Pub/. Mensajería secundaria detrás de escena. Entonces, déjame decir SignalR, correcto. Entonces, y si nota aquí, tenemos la sección de mensajes aquí mismo. Donde podemos ver el tamaño del almacén de mensajes, el número de mensajes, entregados por segundo, caducados por segundo, publicados, número de temas.

Los temas le permiten tener una separación de preocupaciones. Múltiples aplicaciones usando NCache como herramienta de edición del SignalR Backplane tendrían múltiples temas creados dentro NCache. Por lo tanto, los temas de un mensaje de naturaleza similar se pueden asignar a un tema separado. Por ejemplo, puede crear un tema para pedidos. Puede crear un tema para los mensajes de los clientes. Por lo tanto, puede tener diferentes mensajes en diferentes temas y los suscriptores conectados a un tema separado solo reciben los mensajes relacionados con ellos. Entonces, ya veo algo de actividad aquí, lo que significa que mi aplicación está en funcionamiento. Entonces, si vuelvo al panel del servidor, ahora tenemos tres aplicaciones ejecutándose. No veré nada en las estadísticas regulares. Vería todo en las estadísticas de mensajería. Por lo tanto, puede ver el número de mensajes.

Entonces, hubo algunos mensajes, el tamaño de la tienda, son alrededor de 800 bytes. Mensaje publicado y luego tenemos, creo, otros parámetros en la fecha que no están allí porque aún no tenemos ningún vencimiento.

Entonces, volviendo a mi aplicación, ejecutaría otra instancia de esto. Muy bien, entonces, tengo dos aplicaciones. Debería haberlo ejecutado de incógnito, pero el mensaje de prueba tan pronto como lo envíe, también se envía aquí. Pruebe el mensaje 2 y verá ese mensaje en el otro lado también, correcto, y si vuelvo aquí, tenemos algo de actividad aquí.

Por lo tanto, utiliza la mensajería Pub/Sub en segundo plano y le permite crear un backplane. Entonces, SignalR en sí mismo, el caso de uso para él, enfatiza la notificación automática en lugar de la encuesta del usuario que puede enviar contenido a sus usuarios. Pero con la granja web, existe la limitación de que solo puede enviar contenido a los clientes conectados a ese servidor web. Si tiene varios servidores web, necesita un cuerpo central y Backplane por ASP.NET y ASP.NET Core resuelve eso.

Entonces, puedes usar NCache como Backplane para eso. Es una plataforma de comunicación donde todos los mensajes se transmiten a NCache, Enviado a NCache y luego NCache a su vez, lo envía a todos los servidores web, lo transmite y esos servidores web pueden transmitir esos mensajes a sus usuarios finales, eventualmente. Entonces, eso es lo que hace que la arquitectura general sea muy rápida porque el NCache está en la memoria. Es súper rápido, muy escalable, muy confiable y de alta disponibilidad.

Bueno. Entonces, creo que estamos bien en este frente. ¿Alguna pregunta? De lo contrario, seguiré adelante y hablaré sobre el aspecto del almacenamiento en caché de datos. Por lo tanto, dedicaremos los últimos 10 a 15 minutos al almacenamiento en caché de datos, algunas de las características. Hay muchas características en este frente. Entonces, rápidamente mostraría algunos.

Entonces, antes que nada, hay muchas maneras en que puede usar NCache para el almacenamiento en caché de la base de datos o el almacenamiento en caché de datos de la aplicación. Donde guardas datos en caché dentro NCache Y guardas viajes a la base de datos backend. Si ya está utilizando IDistributedCache, aunque es muy limitado, puede conectarlo NCache como proveedor.

Tengo una aplicación de muestra aquí. Una vez más, es muy simple. Necesita agregar el paquete NuGet. es ASP.NET Core y NCache.Extensiones.de.Microsoft.Almacenamiento en caché.

public async Task<IActionResult> onPostResetCachedTime()
{
    var currentTimeUTC = DateTime.UtcNow.ToString();
    byte[] encodedCurrentTimeUTC = Encoding.UTF8.GetBytes(currentTimeUTC);
    var options = new DistributedCacheEntryOptions()
        .SetAbsoluteExpiration(TimeSpan.FromSeconds(20));
    _cache.Set("cachedTimeUTC", encodedCurrentTimeUTC, options);

    return RedirectToPage();
}

Entonces, eso cubre IDistributedCache y luego necesita la configuración de la aplicación donde especifica el nombre del caché y dentro de startup.cs que conecta. services.AddNCacheDistributedCache proporciona la configuración a través de la configuración o puede usar la opción dos donde especifica las configuraciones, todas las configuraciones a través del código directamente.

public void ConfigureServices(IServiceCollection services)
    {
        // Reading NCacheSettings using appsettings.json
        services.AddNCacheDistributedCache(_config.GetSection("NCacheSettings"));

        services.AddMvc().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);
    }

Y, en index.html.cs tenemos algunos métodos aquí. Donde estamos llamando a cache.GetAsync.

public string CachedTimeUTC { get; set; }
public async Task OnGetAsync()
{
    CachedTimeUTC = "Cached Time Expired";
    var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

    if(encodedCachedTimeUTC != null)
    {
        CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
    }
}

Y una cosa que debe tener en cuenta es esta interfaz IDistributedCache, por ejemplo, si le muestro GetAsync, está recuperando una matriz de bytes. Entonces, no es un objeto serializado o deserializado lo que está obteniendo. Tienes que hacer la serialización y la deserialización tú mismo.

using System.Threading;
using System.Threading.Tasks;

namespace Microsoft.Extensions.Caching.Distributed
{
public interface IDistributedCache
{
    byte[] Get(string key);
    Task<byte[]> GetAsync(string key, CancellationToken token = default);
    void Refresh(string key);
    Task RefreshAsync(string key, CancellationToken token = default);
    void Remove(string key);
    Task RemoveAsync(string key, CancellationToken token = default);
    void Set(string key, byte[] value, DistributedCacheEntryOptions options);
    Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, 
    CancellationToken token = default);
}
}

Lo que hemos hecho en este ejemplo, en realidad lo tomamos de tal manera que serializamos el objeto antes de agregarlo y después de recuperarlo, lo deserializamos, ¿verdad? Entonces, estamos recuperando la cuerda a través de esto.

public string CachedTimeUTC { get; set; }
public async Task OnGetAsync()
    {
        CachedTimeUTC = "Cached Time Expired";
        var encodedCachedTimeUTC = await _cache.GetAsync("cachedTimeUTC");

        if(encodedCachedTimeUTC != null)
        {
            CachedTimeUTC = Encoding.UTF8.GetString(encodedCachedTimeUTC);
        }
    }

Entonces, eso es algo que hemos hecho extensamente y eso es lo que tienes que hacer. Con NCache utilizado directamente como la plataforma de almacenamiento en caché de datos de su aplicación, no tiene que hacer todo esto. NCache serializaría y deserializaría sus objetos automáticamente. Solo necesita marcarlos como serializables.

Entonces, voy a ejecutar esta muestra muy rápido y eso debería permitirme mostrar la interfaz IDistributedCache también y, finalmente, mientras se ejecuta esto, también me gustaría construir, entonces, esta es nuestra interfaz IDistributedCache y esta es la segunda opción aquí, que estoy mostrando aquí, es la directa NCache API. Aquí están nuestras API.

/*Cache Connection*/
Cache cache = NCache.InitializeCache("myCache");
cache.Dispose();

/*Fetching Data*/
Employee employee = cache.Get<Employee>("Employee:1000");
bool isPresent = cache.Contains("Employee:1000");

/*Writing Data*/
cache.Add("Employee:1000", employee);
cache.AddAsync("Employee:1000", employee);

cache.Insert("Employee:1000", employee);
cache.InsertAsync("Employee:1000", employee);

Employee employee = (Employee) cache.Remove("Employee:1000");
cache.RemoveAsync("Employee:1000");

Alternativamente, le recomendamos encarecidamente que obtenga más control si administra todo a través de NCache Llamadas a la API. te conectas a NCache usando initialize cache u get cache en las versiones actuales y luego dices cache.Get para recuperar elementos de caché.Agregar para agregar elementos. Add Async también está disponible Insert e Insert Async también está disponible y luego puede llamar a cache.Remove. Entonces, ese es el segundo enfoque que mostraré una vez que se ejecute este ejemplo y se admita IDistributedCache, pero nuestras API directas son más amplias y ricas en funciones en comparación.

Pregunta: Podemos usar NCache API junto con IDistributedCache y para eso, ¿dónde podemos obtener las muestras?

Entonces, antes que nada, sí, puede usar IDistributedCache. Ya debe estar usando IDistributedCache. Entonces, puedes enchufar NCache como fuente para eso. Entonces, ese podría ser un punto de partida y luego, además de eso, también puede comenzar a usar nuestras API directas en la misma aplicación. Entonces, sí puedes hacer eso. No te limitamos a usar uno u otro. Todos estos casos de uso que hemos discutido Caché de sesión, Caché de respuesta, SignalR Backplane, IDistributedCache o directo NCache Llamadas a la API. Cinco de estas características, también puede usarlas todas en una sola aplicación. Entonces, esa es la belleza de NCache donde puedes combinar todos esos casos de uso.

Aplicaciones de muestra, todas estas muestras son, vienen instaladas con NCache, derecho. Entonces, no estamos usando nada personalizado aquí. Entonces, todos estos están disponibles en la muestra del archivo de programa, NCache muestras Estos también se publican en nuestro sitio web.

Entonces, esta muestra se ha ejecutado. Entonces, si restablezco el tiempo de caché, haría eso y si vuelvo rápidamente aquí, mostraría las claves de caché y ahora vería algunas claves de caché más. Creo que algunos elementos han caducado, pero ves el tiempo de caché UTC. Algunos objetos de almacenamiento en caché de respuesta deben haber caducado.

Así es como se usa la interfaz IDistributedCache con NCache.

Ahora voy a mostrar el directo NCache Llamadas API, que recomendamos encarecidamente. Eso es algo que también puedes hacer. Entonces, para esto puedes usar el Alachisoft.NCache.SDK Paquete NuGet. Ese es nuestro SDK completo, que incluye todos los recursos del lado del cliente y todas las funciones se pueden exponer en el extremo del cliente usando este SDK y, en base a esto, puedo decir que incluya estos espacios de nombres. Alachisoft.NCache.Cliente y también puedes incluir Alachisoft.NCache.Tiempo de ejecución porque hay algunas funciones avanzadas que puede usar a través de eso.

using Alachisoft.NCache.Runtime;
using Alachisoft.NCache.Sample.Data;
using Alachisoft.NCache.Client;
using System;
using System.Configuration;
using Alachisoft.NCache.Runtime.Caching;

namespace Alachisoft.NCache.Samples
{
    public class BasicOperations
    {
        private static ICache _cache;
    }
}
...

Interfaz ICache. Esta es nuestra propia interfaz a diferencia de IDistributedCache, ¿verdad? Entonces, tenemos muchas funciones, como puede ver en comparación, y dentro de estas, también tenemos múltiples funciones. Entonces, estos son algunos objetos en ICache.

Entonces, puede inicializar el caché. La inicialización se realiza a través de NCache.Cliente. CacheManager.GetCache, entonces, así es como te conectas a él. Obtiene un identificador de caché y, al usar ese identificador de caché, puede configurar un vencimiento basado en el tiempo. Dar el objeto que es cliente en este caso, Agregar objeto a caché y estamos consiguiendo un cliente. Luego dice caché. Se agrega un elemento de valor clave. Por lo tanto, el objeto del cliente se serializaría automáticamente mientras lo agregaría a la memoria caché y luego la recuperación se realiza a través de la memoria caché. Obtener, actualizar a través de la memoria caché. Insertar, donde puede cambiar algunos valores. Cambie el tiempo de caducidad y luego puede llamar al caché. Eliminar para eliminar datos también.

Entonces, dentro de esta muestra si es rápido. Bien. Entonces, obtiene el caché de la configuración de la aplicación. Si doy el nombre de este caché para que sea ASP Core Caché, esto también comenzará a usar el mismo caché para el almacenamiento en caché de datos y ya ha visto esto donde he usado el mismo caché en diferentes aplicaciones pero, si es una gran aplicación usando todas estas características en conjunción entre sí, en combinación entre sí, eso también es compatible.

Entonces, mientras esto se ejecuta, hay muchas características. Solo muestro uno o dos en los ejemplos porque son solo operaciones básicas y esto agregaría algunos datos en el caché. Puede que no se detenga en ningún momento, no estoy muy seguro, pero veamos. Mientras tanto, si te muestro un cliente está conectado. Ha hecho algunas operaciones, ¿verdad? Esperemos que Déjame poner un punto de ruptura en alguna parte y ejecutarlo una vez más.

Entonces, lo que realmente hizo fue, en realidad inicializó el caché, agregó un objeto, lo recuperó, lo actualizó, lo recuperó nuevamente, luego lo eliminó y luego se eliminó el caché. Entonces, antes de desechar, puse un punto de interrupción, por lo que, con suerte, ahora puede ver eso inicializado, agregado, buscar, detalles actualizados, actualizados en el caché. Entonces, todos estos métodos han sido ejecutados.

Entonces, así de simple es ejecutar esta muestra. Todo lo que necesita es el paquete NuGet y los espacios de nombres que se incluirán y luego jugar con diferentes API, que mostraré aquí.

Muchas características están disponibles. Voy a dedicar los últimos 5 a 6 minutos a diferentes funciones, que están disponibles como parte de nuestra NCache API. Por lo tanto, puede utilizar la caducidad basada en el tiempo. La caducidad absoluta y deslizante está disponible. Absoluto es cuando das un tiempo por adelantado y los datos se eliminarán después de que transcurra ese tiempo. Deslizar es, si continúa usando esos datos, digamos que tiene 10 minutos de vencimiento deslizante, si no accede a ese elemento durante 10 minutos, solo entonces se elimina. De lo contrario, permanecería en el caché, si sigues usando ese objeto.

Puede sincronizar su caché con la base de datos. Cualquier cambio en el contenido del elemento almacenado en caché, a la derecha. Por ejemplo, el elemento almacenado en caché cualquier cambio en el registro de la base de datos. Si tiene elementos almacenados en caché que pertenecen a la base de datos, cualquier cambio en la base de datos invalidaría el elemento del caché y tenemos una dependencia de SQL para eso, que se basa en eventos. Tenemos dependencia basada en base de datos, dependencia de sondeo de base de datos, que se basa en sondeo. Se agrupa para los cambios y si encuentra que se han cambiado algunos registros en la base de datos, eliminaría los elementos correspondientes del caché. Procedimientos almacenados de .NET CLR, donde puede realizar NCache Llamadas API desde los servidores de bases de datos directamente. También puede sincronizar su caché con bases de datos no relacionales. Dependencias de archivos disponibles. Puede hacer que los elementos de caché dependan de los archivos. O también podría ser una dependencia personalizada, donde ejecuta un registro de código con NCache y eso determinaría si ese elemento debe caducar del caché. Por lo tanto, según su lógica comercial, puede caducar elementos del caché. Tenemos dependencia de base clave. Puede usarlo para manejar las relaciones entre los elementos almacenados en caché. Por lo tanto, las relaciones uno a uno, uno a muchos y muchos a muchos se pueden administrar dentro NCache.

Soporte del lado del servidor, el soporte de código es muy extenso. Puede usar el patrón de caché aparte o puede usar el patrón de lectura y escritura simultánea, donde lee en el caché, desde el caché, y si los datos no están en el caché, puede leer el caché ejecutando su proveedor. Es una interfaz que implementa y registra con nosotros y puede leer el caché y obtener ese elemento o destruirlo de la base de datos de back-end.

Y la escritura simultánea es lo contrario, donde actualiza la memoria caché y luego también puede actualizar automáticamente la base de datos del servidor llamando a su controlador de escritura simultánea, una interfaz que implementa y registra y la escritura posterior actualizaría la base de datos del servidor de forma asíncrona. que es muy rápido en comparación, donde no tiene que hacerlo ni siquiera para las operaciones de escritura, su elemento de caché solo se actualizará en el caché y su aplicación regresa y, detrás de escena, el caché actualizará las bases de datos de back-end.

Grupos, subgrupos están disponibles. Puede crear colecciones lógicas dentro NCache. Las etiquetas son compatibles. Puede adjuntar palabras clave en los elementos y puede recuperar, eliminar o buscar o incluso jugar o buscar elementos en función de su etiqueta correspondiente.

Las búsquedas similares a SQL están disponibles. Se admiten búsquedas de SQL y LINQ. Puede buscar elementos en función de sus atributos. Puede ejecutar un criterio de búsqueda, que puede ser algo así como seleccionar productos donde el producto es el tipo de objeto donde y decir seleccionar productos donde el precio del producto es mayor que 10 y el precio del producto es menor que 100. Entonces, según sus criterios especificados NCache formularía el conjunto de resultados en sus aplicaciones.

Y también se admiten consultas LINQ. Estos son paralelos. La indexación de datos es compatible como parte de esto. Necesitas eso como una necesidad que hace que sea muy rápido buscar fuera de NCache.

Mensajes y eventos Pub/Sub

Los eventos y mensajes de Pub/Sub son una característica separada. Tenemos una plataforma de mensajería Pub/Sub impulsada por eventos asincrónicos. Tenemos una consulta continua basada en criterios, donde puede mapear un conjunto de datos y obtener eventos de ese conjunto de datos. Por ejemplo, puede mapear todos los productos, donde los precios de los productos son inferiores a 100. Entonces, ese podría ser su conjunto de datos. Cualquier cambio en ese conjunto de datos se le notificará.

Los eventos básicos clave están disponibles. Por lo tanto, puede recibir una notificación si un elemento se actualiza o elimina o podría ser el nivel de caché donde se supervisan todos los elementos.

Clúster de caché dinámica

Finalmente algunos detalles sobre NCache agrupamiento Se basa en el protocolo de agrupamiento de caché dinámico. NCache le permite agregar o eliminar servidores sobre la marcha. Por lo tanto, no hay un único punto de falla. En caso de que algún servidor se caiga, se gestiona dentro del protocolo. Si agrega más servidores, automáticamente comienza a usar el servidor recién agregado. Si un servidor deja de funcionar, no tiene tiempo de inactividad ni siquiera en ese caso y no hay un único punto de falla principalmente porque hay varios servidores que alojan este caché.

Agregar y quitar servidores es sencillo, en lo que respecta a sus aplicaciones. Le brinda un tiempo de actividad del 100 %, un escenario de caché de alta disponibilidad y luego ya hemos cubierto las topologías.

Tenemos algo Caché de cliente. Replicación WAN características. Puede tener replicación de sitio a sitio entre sitios activo-activo o activo-pasivo. Eso también se gestiona.

Replicación WAN de caché distribuida

Entonces, ya sabes, la lista continúa. Creo que hemos cubierto muchos detalles y quería darle una descripción general rápida de cómo puede utilizar NCache en ASP.NET Core. Entonces, ya nos dirigimos hacia el final de esta presentación. Creo que un marcador de hora.

Creo que concluyamos esto en este punto. Por favor, avíseme si hay alguna pregunta hasta ahora. De lo contrario, se lo entregaré a Zack y él podrá encargarse de ello desde allí. ¿Alguna pregunta? Dejaremos la palabra abierta durante aproximadamente un minuto. Si tiene alguna pregunta o todavía está pensando en alguna, no dude en descartarla.

Y mientras estamos en eso, hemos cubierto prácticamente todas estas características que está viendo. ÁSPID.NET Core Sesiones, almacenamiento en caché de respuestas, SignalR Backplane, IDistributedCache, almacenamiento en caché de datos y directo NCache Llamadas a la API e incluso tenemos aplicaciones de muestra para Pub/Sub Messaging. Si está interesado en esta sección por separado, también puede obtener una aplicación de muestra por separado.

Pregunta: ¿Estará disponible esta presentación más adelante?

Sí, será. No solo podremos obtener una grabación del seminario web, sino que también tendremos las diapositivas disponibles si desea descargarlas y usarlas también, y recibirá un correo electrónico con un enlace al seminario web grabado una vez que esté listo. Por lo tanto, siempre puede visitar nuestro sitio web una vez que esté en vivo y en los seminarios web grabados puede encontrarlos.

Pregunta: ¿Cuál es la diferencia entre IDistributedCache y NCache ASP.NET Core ¿Proveedor de almacén de sesiones?

Bien, creo que la pregunta se centra más en la diferencia del uso de la sesión a través de IDistributedCache y el uso de la sesión a través de nuestro proveedor de caché. Entonces, en un nivel alto, IDistributedCache está limitado en términos de su funcionalidad. NCache proveedor le da más control. En primer lugar, puede utilizar el bloqueo de sesión. IDistributedCache Session es un almacén sin bloqueo. Puede utilizar sesiones de un solo sitio y de varios sitios. Esa es una característica específica dentro NCache que no está disponible en IDistributedCache. Aunque, NCache es compatible con el proveedor de sesiones IDistributedCache tal cual. Le brinda muchos beneficios además de IDistributedCache, pero cuando comparamos las sesiones de IDistributedCache con NCache y sabes, NCache Proveedor de almacén de sesiones con NCache, ahí es donde NCache proveedor tiene una clara ventaja. Luego, hay muchas funciones, como el uso compartido de sesiones entre diferentes aplicaciones. Hay un atributo de ID de aplicación de sesión que puede especificar. Sus excepciones se pueden registrar en el registro de eventos, se pueden crear registros de caché, se pueden crear registros de clientes. Entonces, hay una gran lista de características que son diferentes entre estos dos.

Por lo tanto, se recomienda encarecidamente que, si utiliza el almacenamiento en caché de sesión con NCache, por lo que personalmente recomendaría revisar nuestro proveedor de almacén de sesiones en comparación con IDistributedCache Session con NCache porque obtienes muchos beneficios.

Pregunta: ¿Cómo puede la agrupación de datos hacer que la recuperación de datos sea más fácil?

Derecha. Entonces, adjunta un grupo a varios elementos y luego hay API basadas en grupos donde dice obtener datos del grupo y obtiene todos esos elementos a la vez. Por lo tanto, no tiene que dar claves de esos objetos individuales por separado. Entonces, lo hace con una llamada API, todos los datos del grupo se pueden recuperar. Puede eliminar datos en una llamada a la API. Entonces, así es como el proceso de recuperación y actualización es más fácil en comparación.

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