ASP.NET Core es un marco de código abierto utilizado para crear aplicaciones web escalables. Proporciona capacidades multiplataforma y es bastante popular entre los microservicios arquitectura. Y, con la llegada de .NETO 6.0, solo está mejorando en términos de rendimiento y experiencia de desarrollo. Sin embargo, todavía existen ciertos cuellos de botella que frenan su verdadero potencial.
Uno de estos cuellos de botella son los tiempos de lectura de la base de datos y este cuello de botella es especialmente notable cuando su aplicación tiene que servir a cientos de miles de usuarios a la vez. ÁSPID.NET Core el almacenamiento de sesiones puede ayudar a mitigar estos problemas mediante el uso del almacenamiento de datos en la memoria. Sin embargo, el proveedor de almacenamiento de sesiones predeterminado tiene algunas limitaciones. Estos son:
- Pérdida de sesión: Las sesiones se pierden si el servidor de aplicaciones deja de funcionar.
- Limitaciones de memoria: Dado que los datos se almacenan en el espacio de memoria del proceso de aplicación.
- Sin replicación de sesiones: Si el tráfico se redirige a otro servidor por cualquier motivo, las sesiones no se transfieren.
- Sesiones pegajosas: En un entorno de granja web, se deben usar sesiones pegajosas, lo que anula el propósito del balanceo de carga.
Afortunadamente para ti NCache está aquí para resolver todos estos problemas y más. Entraremos en más detalles en las siguientes secciones.
NCache Detalles Descargar NCache ASP .NET Core Estrategias de almacenamiento de sesiones
¿Por qué usar el almacenamiento de sesión distribuido en primer lugar?
Por definición, HTTP es un protocolo sin estado, lo que significa que la información no se retiene en varias solicitudes. Por lo general, se utiliza un mecanismo de terceros para transferir información. Uno de esos mecanismos es el almacenamiento de sesiones. ÁSPID.NET Core ofrece su almacenamiento de sesión, que realiza una copia de seguridad de los datos en un caché. Entonces, en lugar de simplemente ir directamente a la base de datos, la aplicación primero verificará si tiene la información almacenada en el caché, si es así, la aplicación devolverá esa información y, si no, solo entonces la aplicación consultará la base de datos.
Sin embargo, tenga en cuenta que los datos de la sesión se consideran datos efímeros. La aplicación debería seguir funcionando independientemente de que la caché de sesión esté vacía. Los datos de la sesión solo deben usarse para las necesidades de optimización del rendimiento. ÁSPID.NET Core ofrece dos opciones para el almacenamiento en caché de la sesión:
Ambas opciones son bastante rápidas y, en su mayor parte, harán el trabajo. Sin embargo, sus implementaciones predeterminadas tienen los mismos inconvenientes. Ambos ofrecen cachés independientes con un único punto de falla y sin opción de replicación de datos en caso de que un servidor se caiga. Para las aplicaciones de misión crítica, donde una gran cantidad de usuarios solicitan recursos al mismo tiempo y la pérdida de datos de sesión no es una opción, un caché distribuido es el camino a seguir.
¿Por qué NCache?
NCache es un caché distribuido en memoria de código abierto desarrollado de forma nativa en .NET y .NET Core. Se puede configurar para que funcione localmente y también en algunas plataformas de alojamiento de terceros. Además, NCache se puede configurar como un almacén de respaldo para el almacenamiento de sesiones con muy pocos cambios de código y, debido a su naturaleza distribuida inherente, se abordarán los siguientes problemas:
- Limitaciones de memoria: El caché en sí estará ahora en un proceso separado de la aplicación web real, por lo que no habrá más limitaciones de memoria.
- Mejor fiabilidad: El clúster de caché puede incluso estar en un conjunto de máquinas completamente separado, para lograr una confiabilidad aún mayor.
- Topologías de almacenamiento en caché: NCache ofrece 4 diferentes topologías de almacenamiento en caché. Puede elegir cualquiera de ellos según sus requisitos, ya sea que priorice la escalabilidad, la alta disponibilidad o la replicación de datos (a costa del uso de la memoria).
- Replicación de datos: Incluso si un servidor de aplicaciones se va, los datos de la sesión se mantendrán seguros.
- Multi-Almacenamiento de sesión de región: NCache ofrece Uso compartido de sesiones en varias regiones también. Las sesiones se replican sin problemas a través de WAN. Por lo tanto, si es necesario redirigir a los usuarios a una ubicación diferente, sus sesiones se mantendrán intactas.
NCache ofrece dos estrategias para el almacenamiento de sesiones, una es con el Proveedor de almacenamiento de sesión y el otro es NCacheLa implementación de IDistributedCache. En las siguientes secciones, entraremos en los detalles técnicos de cómo NCache puede ayudar en el almacenamiento de sesiones de ASP.NET Core.
NCache Detalles ASP .NET Core Estrategias de almacenamiento de sesiones ASP.NET Core Almacenamiento en caché
Almacenamiento de sesión usando NCache
Configuración NCache como almacén de respaldo para el almacenamiento de sesiones es muy sencillo. Veremos dos enfoques ofrecidos por NCache:
Método 1: proveedor de almacén de sesión
Para este enfoque, necesita instalar el AspNetCore.Sesión.NCache Paquete NuGet. Después de instalar este paquete, asegúrese de incluir el Alachisoft.NCache.Web.SessionState
espacio de nombres en el Inicio.cs archivo de su aplicación, y agregue NCache como un servicio en su colección de servicios:
1 2 3 4 5 6 7 8 9 10 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; }); } |
Y eso es todo, ha configurado con éxito NCache como proveedor de almacenamiento de sesiones. Para más detalles sobre NCache, puedes echar un vistazo a NCache guía de programadores.
Método 2: Implementación de IDistributedCache
En caso de que ya esté utilizando una implementación de IDistributedCache
, puede ir con este enfoque. Solo instala el NCache.Extensiones.de.Microsoft.Almacenamiento en caché Paquete NuGet. Y al configurar servicios para su ASP.NET Core aplicación simplemente agregue el siguiente código:
1 2 3 4 5 6 7 8 9 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheDistributedCache(configuration => { configuration.CacheName = "demoCache"; configuration.EnableLogs = true; configuration.ExceptionsEnabled = true; }); } |
Y listo, ahora puedes usar NCachela implementación de IDistributedCache
.
Almacenamiento de sesiones multirregional mediante NCache
Además de las capacidades de replicación de datos proporcionadas por las diversas topologías de almacenamiento en caché, NCache también ofrece un uso compartido completo de la sesión entre clústeres de caché separados. Esto puede ser muy útil en situaciones en las que tiene diferentes centros de datos para diferentes regiones, y tal vez debido a algunas circunstancias inevitables, necesita redirigir su tráfico de una región a otra.
Puede configurar fácilmente el uso compartido de sesiones entre sus diferentes regiones. Las sesiones de una región se replicarán sin problemas a través de WAN a las otras regiones. Los datos de la sesión se replican desde la caché principal a una o más cachés secundarias. Para usar el uso compartido de sesiones en varias regiones, debe usar el NCache proveedor de almacenamiento de sesión y solo se requerirán los siguientes cambios en su Inicio.cs archivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void ConfigureServices(IServiceCollection services) { services.AddNCacheSession(configuration => { configuration.CacheName = "LondonCache"; configuration.EnableLogs = true; configuration.SessionAppId = "demoApp"; configuration.SessionOptions.IdleTimeout = 5; configuration.SessionOptions.CookieName = "AspNetCore.Session"; configuration.EnableLocationAffinity = true; configuration.AffinityMapping = new CacheAffinity[] { new CacheAffinity { CacheName = "LondonCache", CachePrefix = "LDNC" }, new CacheAffinity { CacheName = "NewYorkCache", CachePrefix = "NYKC" }, new CacheAffinity { CacheName = "TokyoCache", CachePrefix = "TKYC" } }; }); } |
Nota: Una cosa a tener en cuenta es que la afinidad de ubicación debe estar habilitada para usar el uso compartido de sesiones en varias regiones.
El nombre de la memoria caché se especifica en el configuration.CacheName
será su caché principal, mientras que todos los cachés restantes especificados en el configuration.AffinityMapping
serán sus cachés secundarios. los CachePrefix
es importante, ya que este prefijo se adjunta a la ID de sesión. Este prefijo identifica dónde se almacenan los datos de la sesión. Por lo tanto, si llega una solicitud a un caché y el prefijo del caché es diferente del prefijo del caché actual, entonces se contacta al caché real para los datos de la sesión (si los datos aún no están presentes). Ahora que el caché actual tiene los datos de la sesión, todas las solicitudes posteriores ahora se atenderán localmente desde este caché.
NCache Detalles ASP .NET Core Estrategias de almacenamiento de sesiones Uso compartido de sesiones en varias regiones
Conclusión
En este blog, analizamos por qué el almacenamiento de sesiones es una característica poderosa de ASP.NET Core y cómo puede mejorar drásticamente el rendimiento de su aplicación. También investigamos cómo NCache puede mejorar enormemente el almacenamiento de la sesión con la ayuda del almacenamiento en caché distribuido y, si necesita una confiabilidad aún mayor, siempre puede optar por NCacheLa función de uso compartido de sesión en varias regiones de para una experiencia de usuario de primer nivel.