2008-11-14 7 views
5

Uso los servicios de ASP.NET y WCF en un entorno de servidor web con equilibrio de carga, utilizando Memcached en la capa de servicio.¿Memcached es intercambiable con ASP.NET State Server?

También quería reemplazar el uso de ASP.NET State Server (para el estado de sesión) con Memcached. Ahora me temo que no es algo bueno, porque por lo que entiendo, Memcached es un servidor de caché en lugar de un servidor de estado, ¿es cierto?

Si entiendo correctamente, Memcached no está distribuyendo datos a otros nodos en la granja de servidores Memcached. En su lugar, se usa un algoritmo de hash especial para determinar cuál de los nodos de la granja contiene los datos de una clave solicitada, , mientras que ASP.NET State Server distribuye los datos ASAP cuando se ha agregado, para evitar un único punto de error .

En otras palabras, Memcached debe usarse solo por motivos de rendimiento, los datos almacenados en él siempre deben volver a crearse, en caso de que el elemento se haya eliminado para dejar espacio para nuevos objetos, o en el caso de que en realidad el almacenamiento de los datos se redujo.

Entonces, ¿no puedo confiar en Memcached solo para almacenar los datos de estado de la sesión? Si no puedo, entonces no entiendo cómo se compara y se ve a menudo Memcached como una alternativa al uso de ScaleOut StateServer y ASP.NET State Server, ya que estos son realmente servidores de estado, que es otra cosa, correcto ?

No estoy seguro de cuál es el mejor enfoque para el estado de sesión distribuida de alto rendimiento en una granja de servidores web.

Gracias

+1

No creo que exista la propiedad de conmutación por error que está atribuyendo al Servidor de estado ASP.NET. No hay manera de hacerlo, al menos, por lo que yo sé. Es un punto único de falla. –

Respuesta

1

Memcached no admite la duplicación de datos en la actualidad, sólo se ofrece la posibilidad de dividir sus entradas a través de servidores múltiples para tratar de evitar que uno de conseguir inundado. Esto funciona mezclando la clave con la dirección del servidor o usando el algoritmo de hash consistente (libketama).

En general, Memcached no se debe ver como una capa de almacenamiento persistente, y en casi todos los casos, los datos en la memoria caché deben ser los mismos que en la base de datos. Si está realizando un cambio en los datos de sesión de un usuario y desea almacenarlo en caché, actualícelo en Memcached y luego actualícelo en la base de datos inmediatamente después. Si quiere ser muy cuidadoso, puede implementar un sistema de diario simple para asegurarse de que estos datos permanezcan consistentes en caso de falla del sistema.

Sin embargo, Memcached definitivamente se está utilizando para las sesiones de caché, el creador lo dice en un artículo de Jinux Journal. En realidad, solo está destinado a optimizar las operaciones de lectura, al final del día, todos los datos que le interesan deberían almacenarse en la base de datos.

0

En una situación ideal, los datos de la sesión son solo un valor único, la representación numérica interna de la identificación del usuario. Significa que el usuario ha pasado satisfactoriamente la página de inicio de sesión con la contraseña correcta.

Pero, ¿qué pasa con otros como, por ejemplo, takeoveroverflow, los datos dinámicos en la página dependiendo del usuario: el apodo del usuario, el número de reputación, las insignias obtenidas, la permsión para dejar un comentario. A menudo son el resultado de múltiples JOIN en múltiples tablas de bases de datos.

Si no usa memcached en uso, estas consultas casi siempre leen los datos del disco, que es una operación muy lenta, no muy escalable. ¿El caché dentro de la base de datos?¿Cuál crees que sería la razón de aciertos considerando que la base de datos hace otras cosas además de administrar datos de sesión? ¿Por qué tienes que leer desde el disco mientras puedes desde la memoria?

Por supuesto, cualquier escritura en la información del usuario relevante debe invalidar la sesión correspondiente en memcached.

+0

¿Quién dijo algo acerca de una base de datos? La pregunta es si Memcached es directamente intercambiable como un servidor de estado, al Servidor de estado ASP.NET, teniendo en cuenta que la memoria caché Memcached no está sincronizada, por lo que si un nodo falla, los datos se pierden potencialmente. – baretta

+0

Uso memcached como memoria caché para combinaciones de bases de datos, que tiene datos redundantes. Por lo tanto, un único punto de falla no tiene importancia siempre y cuando no escriba información nueva solo en su memcached. La información en su forma pura está siempre en la base de datos principal. – yogman

4

http://www.codeplex.com/memcachedproviders tiene un proveedor de estado de sesión para asp.net que almacena valores en memcached. Proporciona la capacidad de realizar una copia de seguridad de los datos de la sesión en ' SQL Server. Como yogman dijo que los datos de la sesión se almacenan como un valor. Si ocurre un desalojo, se perderá toda la sesión de ese usuario y se dirigirá al usuario a la pantalla de inicio de sesión. Memcached no expulsa ningún dato antes de la caducidad a menos que se esté quedando sin espacio para contener datos nuevos.

Cuestiones relacionadas