2010-05-23 25 views
7

Estaba pensando en utilizar memcached para almacenar sesiones en lugar de mySQL, lo que me pareció una buena idea, al principio.Enfoques para sesiones de memcached

Cuando se trata de la parte de conmutación por error de la utilización de servidores memcached, es un poco preocupante que mis sesiones dejen de funcionar si la memcached se desconecta. Ciertamente afectará a mis usuarios.

Hay algunas técnicas que ya utilizamos para reducir la conmutación por error, como tener un conjunto de servidores disponibles para compensar en caso de inactividad, utilizar fragmentación/hashing constante en todo el grupo de servidores, y así sucesivamente. También haríamos una especie de degradación elegante que les diga a los usuarios que algo ha salido mal y que pueden volver a iniciar sesión, en caso de que se los expulse debido a una conmutación por error del servidor memcached.

Entonces, ¿cómo la gente en general trata estos problemas cuando almacena sesiones en servidores de memcached?

Respuesta

3

Puede crear un método a prueba de fallas utilizando tanto el db como el memcached. Verifique si su objeto memcached está en la memoria else almacena sesión en el db luego cree la instancia de Memcache. Sólo asegúrese de que cuando se cierre la sesión/cerrar la sesión, se vuelca/elimina el memcached ...

a fin de comprobar MemCached primero, si falla, compruebe db ... :)

+0

¡inteligente! Un poco más de código, pero un mejor rendimiento. Me gusta! – Industrial

9

Primero, si pone algo en Memcache solamente, debería estar bien perderlo. Para todo lo demás, hay almacenamiento persistente.

En segundo lugar, memcached simplemente no falla muy a menudo. No hay partes móviles como platos de disco. Las únicas veces que perdí sesiones fueron debido al reinicio de las actualizaciones del kernel. Pero perder esas sesiones no fue un gran problema, debido al primer punto.

Por lo tanto, para responder a su pregunta directamente, si puede perder un dato, almacenarlo en una sesión de Memcache solo está bien. Si no está bien perder, almacénelo en un almacenamiento persistente y, tal vez, lo almacene en memoria caché en Memcache para obtener mayor velocidad.

Cuestiones relacionadas