IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

WCF derrière load balancer : communication inter-service, partage de callback, autre ?


Sujet :

Windows Communication Foundation .NET

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut WCF derrière load balancer : communication inter-service, partage de callback, autre ?
    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.
    Kropernic

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'imagines que tu as un serveur de données derrière les 3 serveurs web
    auquel cas moi je ferais soit en sorte de passer par la base de données, soit par un service wcf hébergé soit sur le serveur de données, soit sur un autre server (par la base n'étant pas le meilleur choix)
    par la base ca serait si j'ai pas le client dans ma liste je fais un insert dans une table, et tous les serveurs viennnent interroger pour savoir s'ils ont quelque chose à transmettre (+ delete)
    par un service wcf en plus ce service pourrait avoir la liste des clients de chaque instance, pour qu'il puisse contacter l'instance qui a le tcp ouvert vers le client concerné pour qu'il transmette
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Il y a effectivement toujours un serveur données mais pas forcément un serveur sur lequel on pourrait installer des trucs.
    On voudrait donc se limiter à installer des choses sur les serveurs web.

    Mais si j'ai bien compris ton idée c'est que, plutôt que de faire communiquer les services directement ensemble, tu ferais un service à part qui ferait office de facteur pour diriger le message vers la bonne instance du service WCF principale.
    Cela revient au même que ce que j'avais imaginé si ce n'est que c'est plus simple techniquement pour savoir qui communique avec qui. Dans ton cas, tout le monde communique avec le facteur. Dans mon cas, c'est pas aussi simple je crois.

    Mais j'me disais qu'il y avait probablement quelque chose de natif pour quand on se place derrière un load balancer. Que Microsoft n'ait rien prévu pour ce cas-là me paraîtrait gros. Mais je n'ai pas encore trouvé...
    Kropernic

  4. #4
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    J'ai beau chercher, je ne vois rien qui serait "magique" pour mettre en oeuvre mon besoin.

    Je pense donc me diriger vers la communication inter-service. Le partage de callback est exclu car si j'ai bien compris ce que j'ai lu, ce n'est pas serializable...

    Reste le choix entre les instances qui communique toutes entre-elles ou l'utilisation d'un broker (facteur).

    Avec le broker, on a N connexion où N est le nombre d'instance.
    Sans le broker, on a N(N+1)/2 connexion.

    Donc avec un load balancing sur 3 serveurs, on a 3 connexion dans le premier cas et 6 dans le second.
    A petite échelle, c'est pas la mort non plus.

    Je laisse la discussion ouverte au cas où quelqu'un aurait une idée en plus.
    Kropernic

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/12/2017, 21h40
  2. Solution pour SQL Server avec Load Balancing de secour
    Par lneoncyberl dans le forum Développement Web avec .NET
    Réponses: 1
    Dernier message: 28/01/2016, 23h19
  3. Utilisation de WCF pour communication inter processus
    Par bleuerouge dans le forum Windows Communication Foundation
    Réponses: 0
    Dernier message: 03/07/2015, 14h35
  4. Linux Virtual Server -- Visu site depuis load-balancer
    Par steph.thib dans le forum Administration système
    Réponses: 0
    Dernier message: 27/02/2011, 18h03
  5. Server Load Balancing
    Par rajensias dans le forum Réseau
    Réponses: 0
    Dernier message: 14/04/2009, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo