1. ¿Qué es el balanceo de carga? Un sitio web nuevo no debería estar balanceado en carga, porque el volumen de tráfico no es grande, así que no hay necesidad de involucrarse en estas cosas. Sin embargo, con el rápido crecimiento del tráfico y el tráfico web, un solo servidor está limitado por sus propias condiciones de hardware, y es difícil soportar un número tan grande de visitas. En este caso, hay dos opciones para elegir: 1. Actualizar el hardware de un solo servidor, de doble núcleo a cuádruple núcleo, aumentar la memoria, etc. 2. Aumentar el número de servidores para compartir la carga de los servidores. Para lograr el objetivo de aumentar el ancho de banda de la red y aumentar la potencia de procesamiento del servidor. El primer método puede entenderse como desarrollo vertical, que siempre está limitado. El segundo método es la opción correcta para resolver el problema Los métodos de balanceo de carga pueden dividirse en dos direcciones: una es usar software para lograr el balanceo de carga, y la otra es implementar un balanceo de carga por hardware (incluyendo la combinación de hardware y software) Utiliza software para lograr el balanceo de carga, y el proceso de lograr el balanceo también consume algunos recursos del sistema y aumenta el tiempo de respuesta. Por ejemplo, LVS, nginx, haproxy, apache, etc., estos programas de balanceo de carga basados en aplicaciones son adecuados para sitios web que no tienen un número particularmente elevado de visitas. Si tienes una web con muchas visitas como Sina y 163, usar hardware para implementar balanceo de carga es la opción más obvia. Existen muchos algoritmos de balanceo de carga, incluyendo el balanceo de carga basado en el número de solicitudes, direcciones IP raíz y algoritmos basados en el tráfico. Hay dos algoritmos que uso a menudo. Una se basa en el número de solicitudes R, puede darse cuenta de que cada servidor puede compartir la petición del cliente de forma equitativa, y si uno de los servidores cae, no causará un impacto negativo. b. El estado entre servidores debe estar sincronizado, como la sesión, y se necesitan otros medios para sincronizar estos estados. Uno es según IP R, ip_hash algoritmo puede asignar una IP a un servidor, lo que puede resolver el problema de la sincronización de sesiones b. Lo malo de ip_hash es que si uno de los servidores cae, los usuarios asignados a ese servidor se deprimirán. c, ip_hash puede fácilmente provocar un desequilibrio de carga, ahora el gobierno del cangrejo de río filtra las palabras clave de búsqueda de Google, a menudo verás que Google no puede abrir, pero estará bien después de un tiempo. Esto deprimió a esos entusiastas de Google, y muchos usuarios se fueron al extranjero en busca de agentes. Si esto ocurre, estos proxies se asignarán al mismo servidor, causando carga desbalanceada e incluso fallos.
Segundo, qué es la celebración de una sesión y cuál es su función Session hold se refiere a un mecanismo en el balanceador de carga que garantiza que las solicitudes de acceso asociadas al mismo usuario se distribuyan al mismo servidor mientras se realiza el balanceo de carga. ¿Qué hace el Session Hold? Poned un ejemplo Si una solicitud de acceso de usuario se asigna al servidor A y inicia sesión en el servidor A, y en poco tiempo este usuario envía otra petición, si no hay función de retención de sesión, la solicitud de este usuario probablemente se asignará al servidor B, en este momento no hay inicio de sesión en el servidor B, así que tienes que iniciar sesión de nuevo, pero el usuario no sabe dónde está asignada su petición, el usuario tiene la sensación de que está conectado, ¿por qué tiene que iniciar sesión de nuevo? La experiencia del usuario es muy mala. Y si compras algo en Taobao, desde login = "Shoot something=" add address = "to pay", esto es una serie de procesos, que también pueden entenderse como un proceso operativo, todos estos procesos operativos deben completarse en un solo servidor y no pueden ser asignados a diferentes servidores por el balanceador de carga. La retención de sesión tiene un límite de tiempo (excepto para servidores que están asignados a uno fijo, como ip_hash), y varias herramientas de balanceo de carga proporcionan esta configuración de tiempo de retención de sesión, LVS, apache, etc. Incluso el lenguaje PHP proporciona una session.gc_maxlifetime para establecer el tiempo de espera de la sesión El tiempo de espera de la sesión debería fijarse más que el tiempo de supervivencia de la sesión, lo que puede reducir la necesidad de sincronizar las sesiones, pero no puede eliminarse. Así que aún hay que sincronizar las sesiones.
Tercero, sincronización de sesiones ¿Por qué la sincronización de sesión? Se ha mencionado al hablar de la gestión de sesión. Para más información, consulte Tres métodos de sincronización de sesiones en un clúster web
Existen tres métodos de sincronización de sesiones en un clúster web
Después de hacer un clúster web, definitivamente considerarás primero la sincronización de sesión, porque después del balanceo de carga, el mismo acceso IP a la misma página se asignará a diferentes servidores. Este artículo ofrece tres formas diferentes de resolver este problema según esta situación: Primero, utiliza la base de datos para sincronizar la sesión No usé este método al hacer sincronización de sesiones multiservidor, pero si tuviera que usar este método, pensé en dos: 1. Utilizar un ordenador de gama baja para construir una base de datos que almacene la sesión del servidor web, o construir esta base de datos especial en el servidor de archivos; cuando el usuario acceda al servidor web, irá a esta base de datos especial para comprobar la situación de la sesión y lograr el propósito de sincronización de sesión. 2. Este método consiste en colocar la tabla donde se almacena la sesión junto con otras tablas de bases de datos; si MySQL también está agrupado, cada nodo MySQL debe tener esta tabla, y la tabla de datos de esta tabla debe sincronizarse en tiempo real. Explicación: Usar la base de datos para sincronizar sesiones aumentará la carga sobre la base de datos, que es inherentemente propensa a cuellos de botella. El primero de los dos métodos anteriores es mejor, ya que separa la tabla donde se coloca la sesión de forma independiente, reduciendo la carga sobre la base de datos real 2. Utilizar cookies para sincronizar sesiones La sesión es la situación de archivos almacenada en el lado del servidor, y la cookie es la situación de archivo en el cliente, ¿cómo lograr la sincronización? El método es muy sencillo, es decir, poner la sesión generada por la página de visita del usuario en la cookie, es decir, usar la cookie como estación de relevo. Visitas el servidor web A, generas una sesión y la pones en la cookie, tu acceso se asigna al servidor web B, en este momento, el servidor web B primero juzga si el servidor tiene esta sesión, si no, ve a ver si hay esta sesión en la cookie del cliente, si no, significa que la sesión realmente no se guarda, si hay una en la cookie, Sincroniza el sesein de la cookie con el servidor web B, para que la sesión pueda sincronizarse. Nota: Este método es sencillo y cómodo de implementar, y no aumentará la carga sobre la base de datos, pero si el cliente desactiva las cookies, la sesión no podrá sincronizarse, lo que traerá pérdidas al sitio web; Las cookies no son muy seguras y, aunque han sido cifradas, aún pueden ser falsificadas.
3. Usar memcache para sincronizar sesiones Memcache puede distribuirse y, sin esta función, no puede utilizarse para la sincronización de sesiones. Puede combinar la memoria del servidor web para formar un "mempool", sin importar qué servidor genere sessoin, puede incluirse en ese "mempool" y todo lo demás puede usarse. Ventajas: sincronizar las sesiones de esta manera no aumenta la carga sobre la base de datos, y la seguridad mejora mucho en comparación con el uso de cookies, y poner las sesiones en memoria es mucho más rápido que leer archivos. Desventajas: memcache divide la memoria en muchas especificaciones de bloques de almacenamiento, hay bloques y tamaños, y de esta manera también se determina que memcache no puede utilizar completamente la memoria, producirá fragmentación de memoria; si el bloque de almacenamiento es insuficiente, también producirá desbordamiento de memoria.
Cuarto, resumen Los tres métodos anteriores son factibles El primer método, el que más afecta a la velocidad del sistema, no se recomienda; El segundo método da buenos resultados, pero los riesgos para la seguridad son los mismos; El tercer método, personalmente creo que el tercero es el mejor, recomiendo a todo el mundo que lo use;
|