2010-01-18 12 views
6

¿Cómo funciona Digg o cualquier otra sesión de usuario de tienda de sitios web de alto tráfico? ¿Qué usan para almacenar las sesiones de usuario? Sistema de archivos, DB (¿cuál?), Memcache o ambos?¿Cómo digg (u otros sitios web de categoría de alta carga) están almacenando sesiones de usuario?

Imaginemos una situación simple. El usuario registrado ha configurado el indicador "Recordarme" durante el inicio de sesión. Hemos establecido una cookie de sesión con fecha de vencimiento de 1 año. Por ejemplo, estamos manteniendo la sesión en Memcache, pero también debemos mantener el registro de esta sesión en DB (en mi versión). Solo los usuarios con el indicador "Recordarme" se almacenan en DB. ¿Es una forma correcta de almacenar sesiones? Me refiero a sitios web de alto tráfico, por supuesto (con 2 o más servidores de aplicaciones, 2 o más bases de datos, servidores memecache, etc.). En sitios web pequeños, almacenar la sesión de manera predeterminada (en el sistema de archivos) está bien.

He intentado buscar en google, pero no he podido encontrar ninguna información al respecto. He leído algunas soluciones del libro "Programación avanzada de PHP", pero el acento principal se hizo en personalizar el controlador de almacenamiento de la sesión.

¡Realmente espero escuchar buenas ideas o enlaces!

Gracias.

Respuesta

5

Lo más seguro es que usen memcached o equivalentes.

+0

Sí, lo entiendo, pero ¿y almacenando la sesión a largo plazo? ¿Qué pasa cuando el usuario ha marcado la casilla "Recordarme"? Significa que debo almacenar esta sesión no solo en memcache (no puedo guardar los datos de la sesión del usuario en Memcache por semanas) ... ... ¿o tal vez están usando otro mecanismo "recordarme"? ¡Gracias! – Kirzilla

+2

Puede almacenar sesiones en una base de datos, en cualquier otro lugar y usar memcached además de eso. Nadie te lo prohíbe. Lo que sucede es que digamos que cuando "vuelves" serás "recordado" por la llamada a la base de datos (o por la llamada de casandra de línea plana), por lo que el chache se perderá, pero a partir de la próxima solicitud, el caché hará el trabajo. Si está completamente "olvidado", ambos regresarán mal. –

+0

Esto es exactamente lo que quería escuchar. ¡Gracias! – Kirzilla

6

Además de la respuesta de Alix, usted puede estar interesado en la comprobación hacia fuera este artículo:

Un breve extracto:

Lo que hizo que el Memcached como tienda de sesiones:

Poco después del lanzamiento de Digg v3, la no redundante de hardware MySQL almacenamiento de sesión estrelló. Esto llevó a una interrupción de Digg . Siempre habíamos planeado que en tal caso, simplemente generemos un cambio (trivial) para poner sesiones en Memcached en lugar de MySQL para ver cómo le fue a .


lo tanto, antes estaban golpeando el PP cada vez que para las sesiones?

Sí.

MySQL era capaz de seguir las inserciones y selecciona hacer para tratar las sesiones. Nuestro problema fue en realidad con borrando sesiones anteriores. La secuencia de comandos para eliminar sesiones antiguas, a pesar de ser bastante sofisticado en sus intentos para no sobrecargar la base de datos de las sesiones , todavía lo afecta.

Suponemos que Memcached eliminará sesiones vencidas con menos gastos generales que MySQL.


Utilizamos InnoDB para sesiones [antes de memcached]. No fue bloqueo a nivel de tabla o fila. Fue contención de nivel de sistema operativo. Usar Memcached en frente de MySQL hubiera reducido la carga y permitido el script de administración para hacer su trabajo, pero eso destaca la pregunta: ¿por qué incluso MySQL detrás de memcached en absoluto? No necesitamos ni queremos sesiones no volátiles . (Nota importante para el lector: es posible que necesite o desee sesiones no volátiles ).

"¿Por qué incluso MySQL está protegido por memcached?" ... "No necesitamos ni queremos sesiones no volátiles".

+3

Sí, gracias por este artículo ... Ahora mismo estoy viendo la presentación de diapositivas http: // www .slideshare.net/folke/netlog-what-we-learned-about-scalability-high-availability-430211 (sobre la arquitectura de Netlog). También hay algunas diapositivas al respecto ... – Kirzilla

+1

+1 para enlace a la historia de Digg – namespaceform

0

Mi implementación es, cuando el usuario hace clic en recordarme, coloco otra cookie y le asigno un valor aleatorio.

Compruebo de usuarios no registrados a esa cookie. Si existe también coincide con la entrada db, los inicio sesión, abra una sesión.

almacenar en Memcache debería ser maravillosa si no está en un alojamiento compartido :)

Cuestiones relacionadas