ASP.NET es conocido por desarrollar aplicaciones web de alto tráfico. Muchas de estas aplicaciones se implementan en múltiples ubicaciones geográficas. Esta implementación en varios sitios se realiza con fines de recuperación ante desastres o para manejar el tráfico regional al tener la aplicación ASP.NET más cerca del usuario final.
En el caso de la recuperación ante desastres, suele haber un sitio activo y un sitio pasivo. El sitio pasivo se vuelve activo tan pronto como el sitio activo deja de funcionar por cualquier motivo. En otros casos, dos o más sitios pueden estar activos pero manejando el tráfico más cerca de su región (por ejemplo, Nueva York, Londres y Tokio).
NCache Detalles NCache Docs Proveedor de estado de sesión de ASP.NET
ASP.NET mantiene información específica del usuario en su objeto de estado de sesión en el servidor web. Cuando el usuario accede a la aplicación ASP.NET por primera vez, se crea su estado de sesión y permanece allí mientras el usuario esté usando activamente la aplicación. De forma predeterminada, después de 20 minutos de inactividad por parte del usuario, ASP.NET caduca esta sesión.
El objeto de estado de sesión de ASP.NET se almacena en la memoria del servidor web (InProc), en cualquier servidor (StateServer), en una base de datos de SQL Server o en una tienda de terceros mediante la arquitectura SSP.
La opción de terceros suele ser un caché distribuido en memoria como NCache, es un excelente lugar para almacenar el estado de la sesión. Los motivos son un rendimiento más rápido, una mayor escalabilidad y una mejor confiabilidad del estado de la sesión de ASP.NET debido a la replicación de la sesión. A continuación se muestra un ejemplo de cómo puede especificar una opción de almacenamiento de sesión personalizada en el archivo web.config, lo que da como resultado NCache como almacenamiento de estado de sesión ASP.NET:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<sessionState cookieless ="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="NCacheSessionProvider" timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"> <providers> <add name ="NCacheSessionProvider" type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider" sessionAppId="demoApp" cacheName="demoClusteredCache" writeExceptionsToEventLog="false" asyncSession="false" enableLogs="false"/> </providers> </sessionState> |
Implementación multisitio activo-pasivo
Pero, si su aplicación se ejecuta en una implementación de varios sitios, entonces la pregunta que debe abordar es qué hacer al respecto. Sesión ASP.NET almacenamiento estatal. Si implementó su aplicación ASP.NET en una configuración multisitio activo-pasivo, todos sus estados de sesión ASP.NET se crearán y almacenarán en el sitio activo. El sitio pasivo no tiene ningún dato de sesión. Por lo tanto, si el sitio activo deja de funcionar y todo el tráfico se redirige al sitio pasivo, todos los usuarios perderán repentinamente sus sesiones y tendrán que empezar de nuevo. Puede evitar esto usando el NCache Topología de puente.
Una vez que crea un Puente entre los sitios activo y pasivo, el sitio activo comienza a enviar todos los agregados, actualizaciones y eliminaciones de objetos de estado de sesión de ASP.NET al puente. El puente los replica de forma asíncrona a través de la WAN al sitio pasivo. La arquitectura de Bridge no bloquea las operaciones del sitio activo, por lo que no observa ninguna degradación del rendimiento. El único problema que debe tener en cuenta es que, dado que Bridge se replica de forma asíncrona, puede haber algunas sesiones en la "cola de replicación" que no llegarán al sitio pasivo si el sitio activo se cierra abruptamente. Pero esto suele ser un número insignificante. Leer más sobre NCache Topología de puente y todas las situaciones en las que es beneficioso para ti.
NCache Detalles NCache Docs Propiedades del proveedor de estado de sesión de ASP.NET
Implementación multisitio activo-activo
Si su aplicación ASP.NET se implementa en dos o más sitios activos simultáneamente, debe evitar replicar Estado de sesión de ASP.NET a todos los sitios para ahorrar en costo de ancho de banda. Sin embargo, probablemente desee tener la capacidad de enrutar parte del tráfico a otros sitios para manejar situaciones de desbordamiento.
Alternativamente, es posible que deba desactivar uno de los sitios para realizar tareas de mantenimiento sin interrupciones para los usuarios. En este caso, puede utilizar la función de almacenamiento de estado de sesión ASP.NET multisitio en NCache. La función le permite manejar estos casos y especificar en web.config para generar ID de sesión con un prefijo de ubicación para el sitio "principal" de esta sesión. Entonces, incluso si esta solicitud de sesión se enruta a otro sitio, ese sitio sabe dónde encontrar esta sesión.
Las sesiones no se mueven de su ubicación principal incluso si el usuario solicita una ruta al otro sitio. Pero el otro sitio puede acceder a esta sesión desde su sitio "principal". Cada sitio especifica su sitio "primario" y todos los demás como sitios "secundarios". A continuación se detallan los pasos que debe seguir para lograr este objetivo:
- Agregar entrada en web.config. Se requiere generar una identificación de sesión ASP.NET de la misma manera en todos los servidores y sitios. Puede usar la utilidad genmackeys disponible con NCache instalación para generar las claves.
1<machineKey validationKey ="A01D6E0D1A5D2A22E0854CA612FE5C5EC4AECF24"decryptionKey ="ACD8EBF87C4C8937" validation ="SHA1"/> - Para habilitar la afinidad de ubicación de una ID de sesión, agregue la configuración que se menciona a continuación:
123456<configSections><section name="ncache" type="Alachisoft.NCache.Web.SessionStateManagement.NCacheSection,Alachisoft.NCache.SessionStateManagement, Version=x.x.x.x, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/></configSections><ncache><sessionLocation><primaryCache id="London_Cache" sid-prefix="LDNC"/><secondaryCache id="NewYork_Cache" sid-prefix="NYKC"/><secondaryCache id="Tokyo_Cache" sid-prefix="TKYC"/></sessionLocation></ncache> - Especifique un administrador de ID de sesión personalizado mediante el atributo sessionIDManagerType del elemento sessionState en web.config.
12345678910111213141516171819202122232425262728293031<<sessionStatecookieless ="false"regenerateExpiredSessionId="true"mode="Custom"customProvider="NCacheSessionProvider"timeout="60" sessionIDManagerType="Alachisoft.NCache.Web.SessionStateManagement.CustomSessionIdManager, Alachisoft.NCache.SessionStateManagement"><providers><add name ="NCacheSessionProvider"type="Alachisoft.NCache.Web.SessionState.NSessionStoreProvider"sessionAppId="demoApp"cacheName="demoClusteredCache"writeExceptionsToEventLog="false"asyncSession="false"enableLogs="false"/></providers></sessionState>
Tenga en cuenta que en el ejemplo anterior, la sección de cada sitio será diferente, lo que significa que cada sitio tendrá su propio "principal" y considerará a todos los demás sitios como "secundarios".
NCache Detalles NCache Docs ASP.NET Core Talleres
ASP.NET genera sid (identificación de sesión) en un formato específico para que el prefijo sid pueda ser parte de la identificación de sesión. Esta identificación de sesión ayuda a ASP.NET a conocer el origen del estado de sesión de ASP.NET para que se acceda al caché de ese sitio. Con esta configuración, si enruta cualquier solicitud de un sitio a otro para el desbordamiento, el otro sitio obtiene el estado de sesión de ASP.NET de su sitio "primario" original porque esto es parte de la ID de sesión como prefijo de ubicación. Minimiza el consumo de ancho de banda de su WAN y solo paga por el tráfico desbordado.
La otra situación es cuando desea cerrar un sitio. Puede redirigir todo el tráfico del sitio a otros sitios sin apagar los servidores de caché de este sitio; puede apagar los servidores web. Luego, espere a que caduquen todos los objetos de estado de sesión de ASP.NET existentes después de que sus usuarios hayan dejado de usar la aplicación. Una vez que el tráfico se redirige, simplemente apague los servidores de caché. Con esto, sus usuarios no sentirán ningún tiempo de inactividad. Echa un vistazo a cómo NCache le ayuda a lograr este objetivo. Descargue una versión de prueba de 60 días totalmente funcional de NCache.