Hello tout le monde,
Tout est dans le titre mais voici quand même plus de détails et un cas pratique.
Cas d'utilisation : Un client A envoie un message à un client B.
Dans une configuration classique/simple, on a un serveur et un client. Le client s'enregistre sur le serveur et on peut alors ouvre un canal (bidirectionnel ou non) de communication entre le client et le serveur.
Dans cette configuration, le flux est trivial. Le client A signale au serveur qu'il veut dire qqch à B et c'est le serveur/service qui transmet l'information.
Là où j'ai un problème, c'est lorsqu'un load balancer entre en jeu...
Nous avons donc un load balancer et, derrière ce dernier, 3 (ou plus, ou moins) serveurs web qui hébergent chacun une instance du service WCF.
Quand le client A veut s'enregistrer au service, le load balance regarde quelle instance à le moins de charge (pour l'exemple, on démarre avec 0 session sur chaque serveur) et redirige le client vers le premier serveur de sa liste vu qu'ils ont tous la même charge.
Le client B arrive ensuite pour s'enregistrer. Le serveur 1 ayant une session de plus que les autres, il est exclu par le load balancer qui redirigera le client B vers le premier serveur de la liste restante soit le n°1.
On a donc le client A sur le serveur n°1 et le client B sur le serveur n°2.
Lorsque le client A transmet un message au serveur n°1 à l'intention du client B, comment le serveur 1 fait-il pour transmettre la réponse au client B étant donné qu'il ne possède pas de canal de communication ouvert avec ce dernier client ?
En réfléchissant 5 minutes, je me suis dit que je n'avais qu'à faire communiquer les instances entre-elles de sorte que quand un client envoie un message à destination d'un autre, ce message soit transmis à toutes les instances. Chacune inspecte alors sa liste de clients et transmet le message si elle retrouve le destinataire dans sa liste. Cela ne me semble pas trop compliqué à mettre en oeuvre et permet d'adapter le nombre de serveur uniquement au niveau de la configuration.
Mais peut-être est-il possible de partager les canaux de communication entre les différentes instances ?
Ou bien faut-il utiliser encore une autre solution ?
J'ai alors voulu valider mon approche en demandant à mon ami Google mais je ne trouve que des articles expliquant comment faire du load balancing en utilisant WCF. C'est pourquoi je viens demander l'avis de la communauté. Je ne dois certainement pas être le premier à chercher à faire ce genre de choses. Quelles sont vos expériences sur le sujet ? Quels sont les mots clefs à utiliser dans mes recherches Google ?
Merci d'avance à ceux qui répondront.
Partager