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

C++ Discussion :

load balancing en C++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Points : 41
    Points
    41
    Par défaut load balancing en C++
    Bonjour à tous.

    Je m'interresse au load balancing pour du http. J'ai trouvé des solutions telles que mod_proxy_balancer qui semble pratique et simple, mais par curiosité et plaisir j'ai envie de me casser la tête et gerer ça moi même si possible.

    Je me suis posé la question de la faisabilité d'un mini serveur qui ecouterait sur le port 80 et qui transmettrait la requette à un serveur (parmis plusieurs) back-end.

    J'ai pensé à betement dupliquer les actions :
    Quand je recois une connection d'un client j'en ouvre une vers l'un des back-end
    quand je recois des paquets je les envoie au backend
    quand le backend transmet, je transmet au client
    si le back end ou le client ferme la connection, je ferme aussi l'autre.

    Par contre avec cette methode le serveur back-end qui recoit la requette aura comme IP celle du serveur qui faira le loadbalancing et ça c'est problematique.

    Ma question est donc est-ce qu'il est possible avec des socket à partir d'un prog C++ de transmettre une requette de facon transparnte comme si c'etait le client lui même qui le faisait !?

    Merci à vous !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Il y a de multiples techniques pour répartir la charge entre plusieurs servers. Elles diffèrent selon le niveau de la couche protocolaire à partir de laquelle la répartition de charge s'effectue (applicatif, IP,...).

    Si on souhaite faire un répartiteur de charge qui permettent au serveur élu de répondre directement au client...

    C'est possible.... Ca s'appelle même "load balancing with direct return" et une implémentation à regarder peut être "Linux Virtual Server".

    Ceci dit, les sockets sont abstraction "end-to-end": lorsque le serveur "accept"e la connexion, la couche TCP/IP aura effectué des associations (adresses, ports entre la source et la destination) qu'il sera difficile de défaire, modifier de façon transparente.

    Comme pour faire un "direct return", il faut au moins modifier l'addresse de la source (remplacer celle du répartiteur de charge par celle du client), les sockets sont trop "hautes" dans la pile protocolaire. A ce niveau, on pourra implémenter un répartiteur des connexions IP entre les différents serveurs (un proxy).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Points : 41
    Points
    41
    Par défaut
    Et q'en est-il des raw socket ?

    Pour moi ce qui serait génial c'est de pouvoir instentanement controler la charge d'un serveur par rapport à un autre sans avoir à relancer un quelconque service. Je pourai du coup faire mon propre algo pour gerer la charge en fonction de ce que j'ai envie. Alors que si je passe par un proxy je vois pas tropà comment le gerer moi même :/

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Les raw sockets permettent d'attaquer le problème au niveau IP. C'est "mieux" puisqu'on pourra dans ce cas re-écrire l'adresse de la source.

    Ceci dit, il y a un gros travail de conception à faire: comment se fait la répartition de charge, l'election du serveur le moins chargé, le retour direct.

    Difficile (à priori) de faire cela sans accéder aux adresses MAC, et je ne suis pas sûr que les raw sockets suffisent pour aller si bas.

    Côté libraries, il faut sans doute regarder libpcap (qui permet aussi d'expédier ses propres paquets).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    En fait, je pense que tu as besoin de te comporter au mieux comme un routeur. Il te faut descendre assez bas pour répartir la charge, probablement jusqu'au niveau ethernet pour maintenir les différentes @IP.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 113
    Points : 41
    Points
    41
    Par défaut
    C'est bien ce que je pensais, mais VLS et le mod_proxy_balancing le font ! Du coup je me suis dit qu'il devait etre possible de le faire simplement !

Discussions similaires

  1. Load balancing avec 2 wan
    Par beloc dans le forum Réseau
    Réponses: 3
    Dernier message: 04/10/2006, 01h24
  2. couplage apache2.2-tomcat5.5.17 et load balancing
    Par n00noors dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 10/08/2006, 09h36
  3. [Tomcat 5] Load Balancing
    Par Sniper37 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 13/03/2006, 11h20
  4. (load balancing) choix de provider
    Par timsah dans le forum Développement
    Réponses: 1
    Dernier message: 20/09/2005, 17h42
  5. [Load balancing] Quel serveur de retour ?
    Par ruready dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 6
    Dernier message: 11/05/2005, 11h48

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