Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 2945|Respuesta: 0

El balanceo de carga Nginx aborda el problema de punto único en el backend de SESSION

[Copiar enlace]
Publicado en 10/1/2023 20:38:39 | | | |
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:

asp.net compartición de sesiones (a través de StateServer)
https://www.itsvse.com/thread-6613-1-1.html

. Arquitectura distribuida en la red: Compartición de sesiones basada en Redis
https://www.itsvse.com/thread-5189-1-1.html

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)




Anterior:【Acción práctica】Usa Docker para construir un repositorio privado de Gitlab
Próximo:Reescritura de URL IIS Eliminación de reglas del módulo
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com