ASP.NET se ha convertido en la principal opción de los desarrolladores para desarrollar aplicaciones web de alto tráfico. Debido a su naturaleza escalable, el nivel de aplicación de ASP.NET puede manejar sin problemas miles de usuarios simultáneos con millones de solicitudes por día. Estas aplicaciones ASP.NET de alto tráfico se implementan en una granja web con equilibrio de carga con un equilibrador de carga, que enruta las solicitudes de los usuarios a varios servidores web.
Si bien el nivel de la aplicación ASP.NET funciona excepcionalmente bien incluso durante cargas transaccionales altas, la aplicación enfrenta algunos cuellos de botella de escalabilidad críticos en otras áreas. Estos cuellos de botella pueden ralentizar su aplicación ASP.NET e incluso pueden detenerse cuando la actividad de su negocio está en su apogeo.
El problema: cuatro cuellos de botella en el rendimiento
Estos cuatro cuellos de botella de rendimiento de ASP.NET se describen a continuación:
Cuello de botella de la base de datos
En una granja web con equilibrio de carga, cuando aumenta la carga de transacciones, puede agregar fácilmente más servidores web para escalar linealmente. Pero no puede agregar más servidores de bases de datos al nivel de la base de datos (SQL Server, Oracle, otros) de la misma manera. Entonces, la base de datos comienza a ralentizarse e incluso puede bloquearse en un punto. Este desglose es el cuello de botella de rendimiento más crítico al que se enfrenta su aplicación.
Cuello de botella de almacenamiento de estado de sesión de ASP.NET
El estado de sesión de ASP.NET debe almacenarse en algún lugar y su almacenamiento se convierte en un cuello de botella como la base de datos de la aplicación. Hay tres opciones de almacenamiento proporcionadas por Microsoft, a saber, InProc, State Server y SQL Server. Los tres tienen cuellos de botella de rendimiento.
InProc le obliga a utilizar un solo proceso de trabajo por servidor web, lo que no funciona en un entorno multiprocesador o multinúcleo, donde se prefiere tener varios procesos de trabajo.
Y, en una granja web con equilibrio de carga, se requiere un bit de sesión permanente en el equilibrador de carga para enviar siempre solicitudes de usuario al servidor web, creando la sesión, incluso si este servidor web está sobrecargado mientras otros están inactivos.
Además, SQL Server no es un almacén ideal para el estado de sesión de ASP.NET porque los almacena como BLOB y SQL Server no funciona bien con él.
NCache Detalles Caché de sesión ASP.NET Documentos de almacenamiento en caché de sesión de ASP.NET
ASP.NET View State Embotellamiento
ASP.NET View State es una función de administración de estado del lado del cliente construida en el servidor web para mantener los datos de controles como botones y menús desplegables. Estos datos se envían al navegador solo para regresar cuando se produce una devolución de datos. Y un ASP.NET View State La cadena puede tener fácilmente un tamaño de cientos de KB, multiplicado por millones de solicitudes que recibe cada día.
Esto no solo ralentiza el tiempo de respuesta de su aplicación ASP.NET, sino que también consume una gran cantidad de ancho de banda adicional que puede aumentar significativamente su costo operativo.
Ejecución de página innecesaria
Muchas veces, la salida de la página ASP.NET no cambia en varias solicitudes porque los datos subyacentes no cambiaron. Pero la página aún se ejecuta para producir el mismo resultado que la última vez. Esta ejecución de página adicional consume una gran cantidad de recursos del sistema, incluida la memoria y la CPU, y también realiza llamadas a la base de datos.
La solución: caché distribuida en memoria
La solución más adecuada a todos estos problemas es incorporar un In-Memory Distributed Cache en su ASP.NET y ASP.Net Core . NCache es un popular caché distribuido de código abierto para .NET. Analicemos rápidamente cómo solucionar nuestros cuatro cuellos de botella de rendimiento con NCache.
NCache Detalles ASP.NET Core Estrategias de almacenamiento de sesiones ASP.NET View State Propiedades de almacenamiento en caché y descripción general
Almacenamiento en caché de datos de aplicaciones
NCache le permite almacenar en caché los datos de su aplicación (tanto datos de referencia de solo lectura como datos transaccionales que cambian con frecuencia) para reducir esos costosos viajes a la base de datos. En lugar de ir a la base de datos, NCache enruta el 85-90% de sus solicitudes al caché. Esto descarta las posibilidades de cualquier contención de la base de datos.
A diferencia de una base de datos, NCache nunca se convierte en un cuello de botella porque es un caché distribuida y escalas linealmente. NCache crea un grupo de servidores de caché y le permite agregar más servidores al grupo a medida que aumenta la carga de transacciones. El siguiente es un código de muestra que obtiene los datos de la base de datos y los almacena en el clúster de caché (si aún no está presente en el caché).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Customer Load(string customerId) { // Key format: Customer:PK:1000 string key = "Customers:CustomerID:" + customerId; Customer cust = (Customer) _cache[key]; if (cust == null) { // Item not in cache so load from db LoadCustomerFromDb(cust); // Add item to cache for future reference _cache.Insert(key, cust); } return cust; } |
Configuración de almacenamiento de estado de sesión
NCache también le permite almacenar sus sesiones ASP.NET en el caché. Esta es una tienda en memoria mucho más rápida que sus otras opciones de almacenamiento. Para brindar confiabilidad, NCache replica sus sesiones en múltiples servidores. Por lo tanto, si un servidor falla, no habrá pérdida de datos de sesión. Lo bueno del almacenamiento de estado de sesión ASP.NET en NCache es que no hay esfuerzo de programación y puede conectarlo sin problemas a través de un cambio de web.config. A continuación se muestra un ejemplo.
1 2 3 4 5 6 7 8 9 |
<configuration> ... <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="20"> <providers> <add name="NCacheSessionProvider" |
Ver configuración de estado
NCache le permite almacenar en caché su ASP.NET View State en el extremo del servidor web enviando solo una clave de identificación al navegador. Al regresar en una devolución de datos, NCache obtiene los resultados de View al interceptar la clave del identificador a través de su controlador HTTP. Este estado de vista luego se envía a su página ASP.NET.
El resultado neto es una aplicación ASP.NET mucho más rápida con un ancho de banda mucho menor. A continuación se muestra un ejemplo de cambio de configuración de cómo usar NCache para almacenar en caché ASP.NET View State:
Caché de salida ASP.NET
Para evitar la ejecución innecesaria de páginas ASP.NET cuando su salida no cambia, ASP.NET proporciona un Caché de salida marco para configuraciones de un solo servidor y un solo proceso de trabajo. NCache, por otro lado, lo extiende para configuraciones de procesos de múltiples servidores y múltiples trabajadores.
A través de esta formación, el personal docente y administrativo de escuelas y universidades estará preparado para manejar los recursos disponibles que derivan de la diversidad cultural de sus estudiantes. Además, un mejor y mayor entendimiento sobre estas diferencias y similitudes culturales permitirá alcanzar los objetivos de inclusión previstos. NCache, también puede esperar que sus páginas caduquen cuando sus datos relacionados se modifiquen en la base de datos. A continuación se muestra un ejemplo.
Conclusión
En breve, NCache an caché distribuida en memoria con escalabilidad lineal, configuración de estado de vista simple y configuración perfecta con su aplicación es la mejor solución para todos estos cuellos de botella de rendimiento. Estas características optimizan la actuación de su aplicación .Net y hacerla más rápida, más confiable y altamente disponible.