¿Cuántos servidores web tiene StackOverflow / ServerFault?
Si la respuesta es 'más de uno', entonces ¿logra la permanencia de la sesión durante el sondeo de DNS?
domain-name-system
web-server
p.campbell
fuente
fuente
Respuestas:
Los sitios web grandes pueden tener "carga equilibrada" en varias máquinas. En muchas configuraciones de carga equilibrada, un usuario puede golpear cualquiera de las máquinas de back-end durante una sesión. Debido a esto, existen varios métodos para permitir que muchas máquinas compartan sesiones de usuario.
El método elegido dependerá del estilo de equilibrio de carga empleado, así como de la disponibilidad / capacidad de almacenamiento de back-end:
Información de sesión almacenada solo en cookies : la información de sesión (no solo un identificador de sesión) se almacena en la cookie de un usuario. Por ejemplo, la cookie del usuario puede contener el contenido de su cesta de la compra. Para evitar que los usuarios alteren los datos de la sesión, se puede proporcionar un HMAC junto con la cookie. Este método es probablemente el menos adecuado para la mayoría de las aplicaciones:
El equilibrador de carga siempre dirige al usuario a la misma máquina : muchos equilibradores de carga pueden establecer su propia cookie de sesión, indicando desde qué máquina de fondo está solicitando un usuario, y dirigirlos a esa máquina en el futuro. Debido a que el usuario siempre se dirige a la misma máquina, no es necesario compartir sesiones entre varias máquinas. Esto puede ser bueno en algunas situaciones:
Base de datos de fondo compartida o almacén de clave / valor : la información de la sesión se almacena en una base de datos de fondo, a la que todos los servidores web tienen acceso para consultar y actualizar. El navegador del usuario almacena una cookie que contiene un identificador (como el ID de sesión), que apunta a la información de la sesión. Este es probablemente el método más limpio de los tres:
En general, la mayoría de las aplicaciones web dinámicas realizan una serie de consultas a la base de datos o solicitudes de almacenamiento de clave / valor, por lo que la base de datos o el almacén de clave / valor es la ubicación de almacenamiento lógica de los datos de la sesión.
fuente
Si su pregunta es cómo mantener sesiones en múltiples servidores web front-end, entonces la respuesta suele ser utilizar una base de datos centralizada. En lugar de confiar en las instancias del servidor web para rastrear los archivos de sesión en los sistemas de archivos locales, escribiría los identificadores de sesión y los datos en una base de datos central, y todos los servidores web recuperarían los datos de allí.
fuente
Usar nemcached parece ser una buena solución no mencionada por @David Pashley
Significa tener una instancia remota de memcached compartida por todos los servidores y usar la extensión PECL de memcache que proporciona su propio controlador de sesión.
¡Solo requiere cambiar dos parámetros en la configuración de php!
Aquí hay un buen tutorial http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/
fuente
IIRC, en DotNetRocks # 440 dijeron un período de servidor. No sé si ese sigue siendo el caso.
Editar: En realidad, fue Hanselminutes # 134 . Lo siento.
fuente
Puedes configurar una cookie.
Puede calcular un hash de la IP remota (en su forma más simple, los hosts remotos con números impares van al servidor A, los hosts con números pares van al servidor B).
Parece que también puede hacerlo a través de algunos valores que permanecen con el sistema de origen si está utilizando un túnel SSL.
Normalmente, cada uno de los mecanismos anteriores requiere un servidor "proxy inverso" o un equilibrador de carga de algún tipo. Ese equilibrador de carga acepta el tráfico y luego lo dirige a cualquier servidor que inicialmente haya tenido la sesión, según uno de los criterios anteriores.
Sin embargo, no estoy seguro de qué quiere decir con "sondeo de DNS"
fuente
a) Puede almacenar información de sesión en la cookie del usuario. Consulte las cookies reforzadas sin estado, que no almacenan datos en el lado del servidor, pero conserva el estado de la sesión http://www.cl.cam.ac.uk/~sjm217/papers/protocols08cookies.pdf . b) Puede cambiar el almacenamiento de fondo de la sesión a la base de datos o memcached. Para eliminar un solo punto de falla, puede configurar la replicación de la base de datos o múltiples nodos memcached. Tenga en cuenta que se recomienda memcached en tales configuraciones donde perder el estado del usuario en la sesión no es un gran error y no lo hace muy infeliz. Para casos en los que es vital preservar el estado, use bases de datos Tanto PHP, Django y Rails permiten al desarrollador escribir sesiones de fondo personalizadas.
fuente