2010-11-04 16 views
5

Je conçoit actuellement un système où nous avons besoin de savoir si l'utilisateur est toujours en ligne/connecté.Conception « Je suis vivant » Service

Le système est basé sur le Web .Net, donc nous avons l'intention de le faire ceci en utilisant le code AJAX/JSONP, qui pique le serveur toutes les 2 minutes.

Il y a un grand nombre d'utilisateurs, donc un ping toutes les 2 minutes provoque ca. 600 pings par seconde.

Nous avons donc l'intention de placer ce service sur son propre serveur et de stocker toutes les informations en mémoire en utilisant Velocity.

Le cache sera une hiérarchie de paires de valeurs nommées, premier groupe puis personne, et un horodatage pour chaque personne.

La question est peut-on écrire directement dans le cache de vélocité pour chaque ping? Ou cela causera-t-il un blocage? Devrions-nous d'abord écrire dans une file d'attente, puis mettre à jour le cache de la file d'attente?

En même temps que nous mettrons à jour le cache, d'autres utilisateurs demanderont des informations par groupe.

+0

Pour Redis trucs de groupe est beaucoup mieux adapté: http://code.google.com/p/redis/wiki/SaddCommand ... Je doute que vous devez vous soucier de verrouillage ou lors de l'accès vitesse concurrency –

+0

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

Répondre

2

Je pense que vous devriez être capable de le faire si vous pouvez changer votre modèle pour baser chaque élément de cache autour d'un utilisateur comme étant associé à un groupe d'utilisateurs comme vous l'avez mentionné. Si vous avez besoin d'interroger ces éléments par groupe, vous devrez penser à un moyen de conserver un index (potentiellement en mémoire) des clés et des groupes pour interroger les éléments (la requête sera évidemment un point lent).

Cela rendrait la probabilité de vous mettre à jour le même article en même temps près Nill (que chaque client ne serait que de mettre à jour toutes les 2 minutes)

Cela vous permettra de profiter du Optimiste Concurrency modèle pour vitesse comme discuté sur MSDN sur le lien ci-dessous, sans perdre de données.

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