Requisitos: Utiliza Nginx para construir un proxy inverso, responsable de programar todas las solicitudes, el backend es desarrollado por ASP.NET MVC y desplegado en varios servidores diferentes, formando un clúster backendLa información de la sesión no puede compartirse, lo que provoca que algunas solicitudes no se procesen correctamente。 Surgirán los siguientes problemas:
ASP.NET El sitio web puede denominarse de la siguiente manera:
Las soluciones más utilizadas son las siguientes:
Utiliza la base de datos para almacenar la SESSION
Como cada servidor necesita usar la misma sesión, podemos almacenar la sesión en la misma base de datos; cada vez que accedemos, vamos a la base de datos para comprobar si existe esta sesión o si ha expirado, y entonces podemos sincronizar la sesión de varios servidores;
Mérito:Utilizar este método es sencillo, cómodo y fácil de empezar;
Defecto:Utilizar la base de datos para sincronizar sesiones aumentará la IO de la base de datos y aumentará la carga sobre la base de datos. Al mismo tiempo, cada acceso debe interceptar solicitudes y consultar la base de datos, lo que resulta en una capa adicional de acceso y tiempo perdido de sesión de la base de datos.
Utiliza un mecanismo de caché como Memcache o Redis para almacenar la SESSION
El uso de mecanismos de caché distribuida como memcache o redis para almacenar datos de sesión es una solución popular para el balanceo de carga y sesiones síncronas en muchos proyectos a gran escala. Su principio es que el proyecto utiliza la caché memcache o redis en el mismo lugar; cuando el usuario inicia sesión, la sesión se almacena en la caché, y luego, independientemente del servidor del proyecto al que se acceda, la caché de sesión se obtiene desde el mismo lugar, de modo que la sincronización de sesión se realiza fácilmente;
Mérito:Usar caché para sincronizar sesiones no aumentará la carga sobre la base de datos, ni necesitas juzgar manualmente si la sesión existe o expira, eliminando algo de lógica de negocio.
Defecto:Memcache o Redis divide la memoria en muchas especificaciones de bloques de almacenamiento, y existen bloques con tamaños, lo que también determina que Memcache o Redis no pueden utilizar completamente la memoria, lo que producirá fragmentación de memoria, y si los bloques de almacenamiento son insuficientes, también ocurrirá un desbordamiento de memoria.
Aprovecha el patrón ip_hash en Nginx
Esta técnica, también conocida como mantenimiento de sesión, es la ip_hash tecnología en nginx que te permiteLas solicitudes desde una determinada dirección IP se fijan en el mismo servidor de aplicaciones backend, de modo que un cliente y un backend bajo esta IP puedan establecer una sesión estable.
(Pero también existe una desventaja, si la red del operador es más volátil e inestable,La IP de salida es dinámicaSí, habrá problemas con este método. )
El método de prueba consiste en abrir dos sitios basados en docker,Necesitas crear un nuevo archivo de index.html bajo los directorios /data/testsite/a y /data/testsite/b, respectivamente, el comando es el siguiente:
Acceso a través de un navegador como se muestra a continuación:
Si creas un nuevo contenedor nginx basado en Docker, sin usar ip_hash tecnología, la solicitud puede enviarse a diferentes servidores backend, como se muestra en la figura siguiente:
Utilizando ip_hash tecnología, crea un nuevo archivo /data/testsite/nginx.conf con la siguiente configuración:
El comando de inicio de Docker es el siguiente:
(Se omitió la gestión de sesiones basada en cookies, que puede consultarse en el módulo fijado,)
Configuración de Nginx:El inicio de sesión del hipervínculo es visible.
(Fin)
|