2010-11-04 20 views
5

Actualmente estoy diseñando un sistema en el que necesitamos saber si el usuario se encuentra conectado/registrado.Diseño de "estoy vivo" servicio

El sistema es una web basada en .Net, por lo que tenemos la intención de hacer esto usando el código AJAX/JSONP, que hace ping al servidor cada 2 minutos.

Hay una gran cantidad de usuarios, por lo que un ping cada 2 minutos causa ca. 600 pings por segundo.

Por lo tanto, tenemos la intención de colocar este servicio en su propio servidor y almacenar toda la información en la memoria usando Velocity.

La memoria caché será una heirachy de pares de valores con nombre, primer grupo, luego persona y una marca de tiempo para cada persona.

Pregunta: ¿podemos escribir directamente en la memoria caché de velocidad para cada ping? ¿O esto causará bloqueo? ¿Deberíamos primero escribir en una cola y luego actualizar la caché de la cola?

Al mismo tiempo que actualizamos la memoria caché, habrá otros usuarios que solicitarán información por grupo.

+0

Para Redis cosas grupo es camino más adecuado: http://code.google.com/p/redis/wiki/SaddCommand ... Dudo que necesita preocuparse por el bloqueo o la concurrencia cuando se accede a la velocidad –

+0

http://msdn.microsoft.com/en-us/library/ee790890.aspx –

Respuesta

2

Creo que debería poder hacer esto si puede cambiar su modelo para basar cada elemento de caché alrededor de un usuario como si fuera un grupo de usuarios como usted mencionó. Si necesita la posibilidad de consultar estos elementos por grupo, tendría que pensar en una forma de mantener un índice (potencialmente en memoria) de las claves y grupos para consultar elementos (la consulta sería obviamente un punto lento).

Esto haría que el likelyhood de que la actualización del mismo artículo, al mismo tiempo cerca nula (ya que cada cliente sólo se actualiza cada 2 minutos)

Esto permitirá tomar ventaja del modelo de concurrencia optimista para velocidad como se discutió en MSDN en el siguiente enlace, sin perder ningún dato.

http://msdn.microsoft.com/en-us/library/ee790890.aspx

Cuestiones relacionadas