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

Langage PHP Discussion :

PHP et architecture load balancing


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut PHP et architecture load balancing
    Bonjour,

    J'ai développé tout une plateforme à la main avec gestion des utilisateurs, paniers, etc... sans utiliser de framework tel que Laravel ou Symfony. L'architecte de mon code est procédurale, la connexion MySQL se configure via un fichier de conf et je peux donc facilement pointer mes requêtes SQL vers un autre serveur.

    On m'a sorti que mon code n'utilisait pas de framework comme Laravel ou Symfony et que par conséquent il serait difficile de l'adapter pour du load balancing, il faudrait faire bcp de modif. Alors que les frameworks comme Laravel ou Symfony sont prévus pour des environnements de load balancing.

    N'ayant jamais configurer d'architecture en load balancing je n'ai pas su quoi répondre mais quand je regarde ce tutoriel https://blog.nicolashachet.com/archi...mance-en-2018/ je ne vois pas en quoi le code doit être adapté pour faire du load balancing...

    Est-ce qu'il faut adapter son code PHP pour le faire tourner dans un environnement load balancing ?

    Merci.

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Ca dépend surtout si ton app a des sessions ou non.

    Si tu as des sessions, il faut pouvoir les partager entre les différentes instances balancées, mais on peut régler ça avec des sticky sessions au niveau du load balancer.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Oui tout à fait j'ai des sessions et forcément elle devraient être partagées entre les différentes instances. Par contre, mon code PHP en lui-même est-ce qu'il y a quelque chose à modifier ? Personnellement je ne vois que des config au niveau serveurs à faire, du style sur chaque instance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session.save_handler = memcache
    session.save_path = "tcp://path.to.memcached.server:11211"
    Ensuite, quand on me dit que le framework Symfony est nativement préparé à du load balancing, est-ce vrai ? Quel code PHP peut préparer à cette architecture serveurs avec partage des Sessions entre chaque serveur ?

  4. #4
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    Je ne connais pas php, je ne peux pas t'aider sur ce point.

    Les possibilités d'architecture dépendent de ce que tu veux réaliser avec le load balancing (répartion de charge? high availability? blue green deployment?...) suivant les cas, la solution sera différente.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Citation Envoyé par yildiz-online Voir le message
    Je ne connais pas php, je ne peux pas t'aider sur ce point.

    Les possibilités d'architecture dépendent de ce que tu veux réaliser avec le load balancing (répartion de charge? high availability? blue green deployment?...) suivant les cas, la solution sera différente.
    On parlait de high availability et de répartition de charge mais par rapport au code PHP et à l'utilisation ou pas d'un framework, pas au niveau configuration serveur.

  6. #6
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 565
    Points
    4 565
    Par défaut
    L'implémentation est dépendante de l'écosystème, si tu fais du sticky session par exemple, tu vas pas te préoccuper du session sharing dans le code, pour la répartition de charge, ça dépendra si elle est au niveau du nombre d'utilisateur, ou des tâches à accomplir.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    Symfony comme n'importe quel framework n'aide en rien pour faire du load balancing. Tout code PHP est théoriquement éligible au load balancing. Mais il y a des aspects comme les sessions, les logs de ton application, les fichiers stockés... qui peuvent poser problème quand l'internaute est load balancé sur un autre serveur.Et aucun framework ne te donne la solution et ne dit comment faire.
    Concernant memcache, la seule configuration des directives session.save_handler et session.save_path du fichier php.ini suffisent pour dire à PHP de sauvegarder les sessions dans le memcache. dans ton code tu utilises les variables de sessions comme d’habitude.
    L’inconvénient avec memcache c'est qu'il sauvegarde les données en mémoire(RAM), donc après redémarrage du serveur tu risques de perdre les données. Perso je pencherai plus pour des sessions persistances en BD( redis, mysql ...) en définissant un gestionnaire de session(http://php.net/session_set_save_handler).

    Après tu peux très bien t'en passer des sessions et les remplacer par un token (comme jwt).

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 551
    Points : 264
    Points
    264
    Par défaut
    Merci armel18, cela me rassure je n'arrivais pas à conceptualiser du code pouvant gérer les sessions sur plusieurs serveurs à la fois sachant que j'ai 3 fonctions principales pour les sessions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    function session__cookieStart() {
        $session_lifetime = 30*24*3600; //30 days
        session_set_cookie_params($session_lifetime,"/");
        ini_set('session.gc_maxlifetime', $session_lifetime);
        ini_set('session.name', 'MyWebSite');
        session_start();
    }
    function session__create($user) {
        $_SESSION['UserId'] = encrypt($user['id'], $config['KeySessionID']);
        $_SESSION['user_lang'] = $user['lang'];
    }
    function session__delete() { 
        unset($_SESSION['UserId']);
        unset($_SESSION['user_lang']);
    }
    Perso je pencherais pour un stockage des sessions dans un répertoire partagé en NFS, un serveur NFS qui serait aussi utilisé pour partager les fichiers uploadés par les utilisateurs.

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    ayant eu à régler ce problème, à l'époque on avait opté pour le stockage de session en base de données. Comme la base de données est commune à toutes les instances, plus de problèmes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/03/2016, 22h29
  2. Load Balancing en PHP
    Par vieks dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2012, 09h13
  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