Se connecter

Informatique

Programmation

Sujet : Site web hybride PHP/C++
1
Pseudo supprimé
Niveau 10
18 mai 2019 à 08:34:20

Salut tout le monde. :hap:

Ça fait pas mal de temps que ça me trotte dans la tête au boulot (je suis dev web), et je me demandait si c'était possible (et stable SURTOUT, parce qu'en dev tout est possible si tu fait fi de la propreté :sarcastic: ) de mettre au point un environnement de développement comprenant une partie avec des executables compilé en C++ pour les tâches demandant pas mal de ressources (mise à jour, recherche, autres traitement récurrents) et en gardant une bonne partie du site en PHP (parce que devoir compiler à chaque fois que tu fais une petite modif c'est l'enfer :mort: )

Du coup je me demandait :
- niveau sécurité ça passe?
- y'a t-il vraiment une amélioration des performance ou le fait de faire le lien entre deux langages rend ce gain de temps négligeable?
- pour ce qui est de l'organisation du site, ça reste facile à modifier (partie PHP) ou ça crée vite des problèmes?
- Y'a t-il déjà des fous qui ont essayé ici? :fou:

Merci :ok:

blackapplex
Niveau 10
18 mai 2019 à 10:01:24

- niveau sécurité ça passe?

Il faut respecter les mêmes standards de sécurité préconisés pour le web que ça soit en C++ et en PHP, et ça devrait pas poser de problèmes (filtrage des user input etc.)

- y'a t-il vraiment une amélioration des performance ou le fait de faire le lien entre deux langages rend ce gain de temps négligeable?

Ca dépend essentiellement des tâches exécutées. Tu parles de MAJ, Recherche et traitements récurrents, je sais pas exactement ce que ça inclut précisément, mais PHP est un langage très efficace qui subit des optimisations fréquentes. Les problèmes de latence dans le web sont absolument pas dû au langage en backend dans la très large majeure partie des cas à mon avis. Mais si des actions sur ton site conduisent à faire des calculs mathématiques lourds, ça vaut le coup d'utiliser des backend efficaces dans ce domaine (numpy/c++).

- pour ce qui est de l'organisation du site, ça reste facile à modifier (partie PHP) ou ça crée vite des problèmes?

C'est le bordel, il te faut deux IDE, t'as une partie compilable et une non, faut être compatible partout, juste ça c'est à mon avis une raison de pas le faire

- Y'a t-il déjà des fous qui ont essayé ici?

pas moi

UndeadMarston6
Niveau 10
18 mai 2019 à 10:55:31

Sinon tu peux faire deux environnement différent qui communiquent entre eux à coup de json, non ?

godrik
Niveau 22
18 mai 2019 à 16:59:09

Ouais, j'ai un systeme qui est comme ca.
Basiquement, le serveur PHP sert a servir l'html et le CSS. Mais le serveur C++ est celui qui sert de base de donnee et de backend de calcul.

L'interface entre les deux se fait par un protocole de type http ou le serveur C++ prends une requete et renvoie du JSON au serveur PHP qui l'utilise pour faire la mise en page. En l'occurence le protocole de communication entre le serveur PHP et C++ n'est pas exactement de l'HTTP. Ca a ete ecrit il y a longtemps donc on a suivi un protocole maison. Mais si je le faisait aujourd'hui je ferais de l'HTTP avec une sourcouche a boost. Il y a de l'equilibrage de charge qui se fait, un serveur PHP mais potentiellement plusieurs serveur C++ en backend.

En terme de securite, le serveur C++ n'est pas expose sur le web. Et le parseur de requete est tres stricte. Les donnees sont publiques donc il n'y a pas de donnee confidentielle qui peuvent leake. Les questions de securite sont plus que je ne veux pas que quelqu'un obtienne un acces root aux machines qui font tourne le serveur C++ et s'en servent pour propager des attaques ailleurs.

En terme de performance, dans mon application, utilise C++ est quasiment obligatoire. le serveur C++ charge un graphe assez gros en memoire et chaque requete est essentiellement un algo qui va tourner sur le graphe. Je ne peux pas charger le graphe en memoire dans mon serveur PHP a chaque requete et meme si je pouvais faire de l'algo de graphe en PHP est probablement une mauvaise idee pour les performances.

Faire le calcul en C++ nous permet de faire du placement memoire intelligent, de paralleliser le code avec OpenMP, d'optimiser les access aux caches. Entre la version de base en C++ et la version optimise, on a gagner un facteur 2-3 de calcul (avant la parallelisation). Ce qui fait que maintenant l'algo principale qu'on fait tourner ne prends que 5 secondes (sequentiellement).

UndeadMarston6
Niveau 10
18 mai 2019 à 18:04:34

Le 18 mai 2019 à 16:59:09 godrik a écrit :
Ouais, j'ai un systeme qui est comme ca.
Basiquement, le serveur PHP sert a servir l'html et le CSS. Mais le serveur C++ est celui qui sert de base de donnee et de backend de calcul.

L'interface entre les deux se fait par un protocole de type http ou le serveur C++ prends une requete et renvoie du JSON au serveur PHP qui l'utilise pour faire la mise en page. En l'occurence le protocole de communication entre le serveur PHP et C++ n'est pas exactement de l'HTTP. Ca a ete ecrit il y a longtemps donc on a suivi un protocole maison. Mais si je le faisait aujourd'hui je ferais de l'HTTP avec une sourcouche a boost. Il y a de l'equilibrage de charge qui se fait, un serveur PHP mais potentiellement plusieurs serveur C++ en backend.

En terme de securite, le serveur C++ n'est pas expose sur le web. Et le parseur de requete est tres stricte. Les donnees sont publiques donc il n'y a pas de donnee confidentielle qui peuvent leake. Les questions de securite sont plus que je ne veux pas que quelqu'un obtienne un acces root aux machines qui font tourne le serveur C++ et s'en servent pour propager des attaques ailleurs.

En terme de performance, dans mon application, utilise C++ est quasiment obligatoire. le serveur C++ charge un graphe assez gros en memoire et chaque requete est essentiellement un algo qui va tourner sur le graphe. Je ne peux pas charger le graphe en memoire dans mon serveur PHP a chaque requete et meme si je pouvais faire de l'algo de graphe en PHP est probablement une mauvaise idee pour les performances.

Faire le calcul en C++ nous permet de faire du placement memoire intelligent, de paralleliser le code avec OpenMP, d'optimiser les access aux caches. Entre la version de base en C++ et la version optimise, on a gagner un facteur 2-3 de calcul (avant la parallelisation). Ce qui fait que maintenant l'algo principale qu'on fait tourner ne prends que 5 secondes (sequentiellement).

Au final tu peux faire ton backend en C++ et un projet en Vue ou en React avec du SSR, même plus besoin de PHP, non ? :noel:

godrik
Niveau 22
18 mai 2019 à 19:24:22

probablement. On a fait ca il y a 10 ans en gros. Les techno web n'etait pas si clairement defini a l'epoque. Au momemt de faire l'appli, php nous a sble etre la solution la plus simple.
Isoler le serveur C++ de l'exterieur est probablement aussi une bonne idee.

Aujourd'hui je ferais probablement un truc comme ca en effet. Avec un serveur public leger juste pour faire le load balancing et servir l'html et le js.

UndeadMarston6
Niveau 10
18 mai 2019 à 20:35:17

Oui je vois ... En tout cas c'est intéressant à lire tout ça, ça fait bien réfléchir a quoi choisir techno en fonction des situations. :cool:

Grand__Smurf
Niveau 45
18 mai 2019 à 21:00:19

En fait c'est très facile à faire une fois que t'as compris le concept :

T'as pas UN serveur en PHP et C++, tu as un serveur en PHP et (séparément) un serveur en C++, et quand l'utilisateur fais une requête, ça va toujours vers ton serveur PHP.

Ensuite, si besoin, ton serveur PHP va faire une requête (tu choisis la façon, ça peut être un call HTTP, un message envoyé à un listener, etc.) vers ton serveur C++, qui va ensuite renvoyer la réponse à ton serveur PHP, qui lui va la renvoyer au client.

C'est un système de microservices en fait, et ton serveur PHP sera (quand nécessaire) un "proxy" vers ton serveur C++ en fait.

Pseudo supprimé
Niveau 10
19 mai 2019 à 09:02:43

Le 18 mai 2019 à 21:00:19 Grand__Smurf a écrit :
En fait c'est très facile à faire une fois que t'as compris le concept :

T'as pas UN serveur en PHP et C++, tu as un serveur en PHP et (séparément) un serveur en C++, et quand l'utilisateur fais une requête, ça va toujours vers ton serveur PHP.

Ensuite, si besoin, ton serveur PHP va faire une requête (tu choisis la façon, ça peut être un call HTTP, un message envoyé à un listener, etc.) vers ton serveur C++, qui va ensuite renvoyer la réponse à ton serveur PHP, qui lui va la renvoyer au client.

C'est un système de microservices en fait, et ton serveur PHP sera (quand nécessaire) un "proxy" vers ton serveur C++ en fait.

Okay je vois le genre. :oui:

Je vais tenter ça dès que j'ai un peu de temps (et de volonté :sarcastic: ) devant moi.

Merci à tous pour vos réponses :ok:

1
Sujet : Site web hybride PHP/C++
   Retour haut de page
Consulter la version web de cette page