Partage
  • Partager sur Facebook
  • Partager sur Twitter

Architecture communication serveur

Sujet résolu
    19 octobre 2018 à 11:50:05

    Bonjour,

    Dans le cadre de mon travail, je suis en charge de moderniser les échanges clients serveurs pour nos applications afin de rendre le tout plus rapide.

    Actuellement, nous avons une plateforme permettant d’héberger et créer des sites web sur différents serveurs distantsdans notre parc. La plateforme web doit pouvoir communiquer avec chacun des serveurs pour demander une installation, demander une modification du paramétrage, changer les accès sur le ftp, etc.. Toutes les commandes à exécuter sont des scripts shell, le php se chargeant de générer un fichier XML contenant le script à envoyer ainsi que les différents paramètres. Le serveur envoie ensuite une réponse à la plateforme qui se charge de l’interpréter en php pour avertir le client. Tout ceci fonctionne correctement actuellement mais est horriblement lent. Le système qui avait été choisi était un système de cron se chargeant de transférer les fichiers XML (exécuté toutes les 5 minutes).

    Il y a 4 étapes :

    • 1) Création du fichier de requête en XML sur le serveur de la plateforme.
    • 2) Un cron passe, lit les requêtes en attente, se connecte en ftp à chacun des serveurs qui ont une requête à exécuter et transfère le fichier dessus.
    • 3) Un cron passe sur chacun des serveurs, lit les requêtes en attente et demande l’exécution shell.
    • 4) Exécution Shell
    • 5) Génération d’une réponse XML
    • 6) Un cron passe pour vérifier les réponses en attente, se conencte en ftp à la plateforme et transfère les fichiers
    • 7) Un cron passe pour interpréter la réponse et avertir le client final.

    Chaque cron passe à un intervalle de 2 minutes et il y a 4 crons. Il peut donc y avoir au maximum un délai de 8 minutes entre l’envoi de la requête et la réponse.

    L’idée est d’accélérer le processus en se passant des crons et en ayant un vrai dialogue en direct entre php sur le serveur de la plateforme et chacun des serveurs distants. La plateforme envoie instantanément une requête au serveur distant qui exécute le bon script shell et qui renvoie une réponse dès que fini. Je viens donc à la pêche aux infos sur les différentes technologies permettant de réaliser ceci simplement. J’ai regardé du côté de node.js ou phpMQ pour gérer la communication serveur mais si vous connaissez des bonnes technos à ce sujet je suis preneur.

    Merci du coup de main :)

    -
    Edité par Vince_85 19 octobre 2018 à 11:50:28

    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2018 à 17:02:51

      Bonjour,

      Alors c'est sûr que le processus indiqué n'est pas des plus performants voire sécure ... et cela fait développement plutôt ancien.

      Il y a des tas de manière de faire de la communication machine to machine plus "temps réel" en se passant des cron, du ftp : rpc, websocket, ... créer des api, etc.

      Tout dépend des possibilités de faire évoluer les différentes plateformes, du temps (argent) à investir des compétences.

      Sans en savoir plus pas facile à mon sens d'être plus précis.

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2018 à 18:46:15

        Tout ça est bien compliqué o_O mais peut être à raison, ou bien juste parce que c'est historique peu importe... 

        Il s'agit d'échange entre plusieurs serveurs, donc si tu veux rester en php, je suppose que le développement d'un petit webservice maison est le plus adapté. A condition de pouvoir installer un serveur http sur chaque serveur - enfin je me comprends :) 

        Mais je ne suis pas sur que php soit la meilleure techno pour ça, il me semble qu'un 'simple' script shell sur le serveur "pilote" doit pouvoir envoyer un autre shell sur chacun des serveurs cible, les faire s'exécuter en local et récupérer les résultats, en ssh ? mais je suis pas expert des scripts shell.

        • Partager sur Facebook
        • Partager sur Twitter
          19 octobre 2018 à 19:51:32

          RabbitMQ ou tout autre message broker.

          Ton panel envoie une tâche à effectuer dans une queue de messages, comprenant tous les params.

          Le serveur à qui est destiné ce message écoute cette queue, et va voir qu'une tâche est en attente, va récupérer cet event et effectuer la tâche, puis l'aquitter dans Rabbit, pour passer à la suivante s'il y en a une.

          Il y a des possibilités de multithreading pour traiter plusieurs tâches à la fois, de gérer différentes queues pour différents serveurs cibles, de dupliquer un messages dans plusieurs queues si besoin d'effectuer plusieurs actions sur plusieurs serveurs. Bref, c'est juste top :)

          • Partager sur Facebook
          • Partager sur Twitter

          https://scanmy.email/ testez votre configuration email.

            23 octobre 2018 à 11:49:30

            Merci pour toutes vos réponses.

            Je regarde actuellement du côté de RabbitMq et Mosquito pour gérer l'échange serveur et cela semble correspondre parfaitement à ce que je recherche. Un peu compliqué à prendre en main mais ça a l'air très puissant une fois maitrisé.

            Plus qu'à réecrire l'ancien système en utilisant ces technos.

            Merci du coup de main

            • Partager sur Facebook
            • Partager sur Twitter

            Architecture communication serveur

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown