2013-06-10 1 views
0

J'ai la situation suivante: Un utilisateur se connecte à une application ASP.NET MVC4 à l'aide d'un PC. Cette application s'exécute sur plusieurs serveurs IIS, derrière un équilibreur de charge. Après cela, une connexion SignalR entre le serveur et le client est établie. Lorsque l'utilisateur est connecté à cette application principale, un deuxième écran peut être ajouté en utilisant une tablette ou un téléphone (peut être un réseau différent). Ici, l'utilisateur se connecte également et obtient une connexion SignalR.Équilibrage de charge: un utilisateur, plusieurs périphériques sur le même serveur

Dans l'application sur le serveur se produit un type d'événement et ces événements doivent être envoyés aux deux appareils sur SignalR. Par conséquent, il est nécessaire que les deux périphériques soient connectés au même serveur IIS.

Je n'ai aucune expérience avec les équilibreurs de charge du tout. Puis-je faire en sorte qu'un équilibreur de charge utilisant un seul utilisateur, utilisant plusieurs périphériques, redirige toujours vers le même serveur avec tous ses périphériques? Si oui, quel équilibreur de charge est recommandé?

Répondre

0

Certains équilibreurs de charge peuvent gérer l'affinité grâce à l'utilisation de cookies. Vous pourriez être en mesure d'utiliser les mêmes valeurs de cookie pour toutes les connexions par le même utilisateur connecté. Je sais qu'un produit Barracuda supporte cette approche. Je voudrais que d'autres le fassent aussi, vous auriez besoin de faire des recherches. Une alternative consisterait à essayer de contourner ce problème et d'autoriser les connexions à votre concentrateur via n'importe quelle instance IIS et que toute instance IIS puisse traiter les demandes. Si cela signifie partager certaines informations entre les instances, vous pouvez utiliser un cache partagé (AppFabric, NCache, MemCached) pour y parvenir. Cette approche vous permettrait de mieux répartir la charge dans votre ferme.

+0

Lorsque j'écris les événements que je dois envoyer aux périphériques dans un cache partagé, chaque serveur doit interroger le cache pour voir s'il existe des événements à envoyer au périphérique, ce qui n'est pas idéal. – pexxxy

+0

Bien sûr. C'est une approche et vous devez peser le coût/bénéfice. J'ai travaillé sur un projet il y a quelques années où nous avions une ferme de serveurs et, de la même manière, nous utilisions SignalR pour renvoyer les résultats au navigateur où le navigateur pouvait ou non être connecté à l'instance IIS originale après sa demande initiale. Nous avons fait un appel à ce moment-là pour le faire interroger une «source de vérité» centrale plutôt que d'essayer de forcer l'affinité. Cela a été bon pour nous dans notre situation et je ne dis pas que cela correspond à votre image, donc vous devriez faire quelques calculs. –

Questions connexes