8199 sujets

Développement web côté serveur, CMS

Bonjour à cette excellente communauté.

Nouvel inscrit mais vieux de la vieille en informatique, mon projet est un projet de simulation urbaine. Pour illustrer, ce serait un Google Map vectoriel avec en plus toute l'activité simulée permettant de mesurer et anticiper les effets des décisions d'urbanisme. Je ne cache rien car ce genre de projet mérite d'être partagé, et je ne fais pas cela pour de l'argent, je suis très disponible sans besoin d'argent.

Donc, une assez grosse base de données à terme, un serveur qui sache bien sûr gérer des utilisateurs en toute sécurité (des administrations, bureaux d'étude etc.), et qui prennent en charge une partie importante des calculs. C'est côté serveur que j'aurais besoin de conseils (voir plus loin)

Côté client, je connais un peu mieux cet univers pour avoir pas mal joué avec javascript et autres CSS (d'où mon opinion excellente pour alsacréations !) en tant que webmaster/créateur d'un autre site avec un CMS de forums. Ce sera du HTML5, peut importe qu'il faille utiliser les derniers navigateurs, avec pour le rendu une bonne utilisation de Three.js pour la 3D et la 2D.

Côté serveur, je suis néophyte dans la mesure où je viens des années 80 et des écrans texte, et même si je comprends bien les SGBD, je ne sais pas trop quoi choisir dans les outils et langages à choisir dès le départ. Comme ce choix comprend des avantages et inconvénients critiques, je m'adresse à vous, et tous les avis seront appréciés, j'apprends très vite...

- Donc quel SGBD me permettra de modéliser une population importante (millions d'individus, d'objets, etc) ?
- Quel langage adopter pour faire des calculs batch sur ces données, avec gestion du temps indispensable (l'équivalent des timers Timeout de autres de javascript) , qui également réponde rapidement aux requêtes client (lequel fait tourner des batch et reçoit aussi des résultats qu'ils intègre au fur et à mesure) . Bref ça ressemble à un "jeu". D'après ce que je comprends PHP est un langage essentiellement dédié aux templates/pages web , est-ce que ce serait suffisant ? J'en doute... Bien sûr il faut un langage relativement connu, pour trouver de l'aide sur le web...
- Autres conseils ? Sur l'hébergement je trouve l'offre LWS assez scalable, adaptable au budget évolutif (phase de développement, phase de production, phase d'extension exponentielle...) . Des avis / contre-avis de ce côté ?
https://www.tophebergeursweb.com/hebergeur/lws/

Merci par avance de vos éclairages, et de votre indulgence pour cette question un peu longue.
Modifié par ExtraMuros (03 Aug 2020 - 10:35)
Salut,

Pour répondre rapidement, n'importe quel SGBD moderne est capable de gérer plusieurs millions d'enregistrements et n'importe quel langage moderne est capable de réaliser tous les calculs que tu veux avec des performances suffisantes. Cela signifie que tes contraintes ne sont pas suffisamment précises pour choisir les outils. Ci-dessous pour une réponse plus détaillée. Smiley cligne

Rien ne t'oblige à faire ce choix maintenant. Une grosse partie de l'application concerne l'affichage des données. Tu peux donc te concentrer là-dessus en utilisant des données statiques, sans avoir besoin de toute l'infrastructure serveur. En avançant dans le développement des fonctionnalités de l'interface, tu auras une vision plus détaillée des besoins réels de ton projet, des différents intervenants, des fonctionnalités nécessaires, etc. Il sera alors plus facile de choisir les outils en fonction de contraintes plus précises.

Pour un projet de cet ampleur, il faudra accorder une attention particulière sur l'organisation du code. Même s'il n'est pas obligatoire d'utiliser un framework tel qu'Angular, React ou Vue, cela simplifie grandement la gestion de l'application côté front-end. Cela simplifie aussi l'utilisation de composants de tests (mock) et permet donc de s'affranchir de la partie serveur. Il existe aussi des services de création d'api REST pour remplacer la partie back-end au début du projet.

Concernant la partie back-end, chaque outil répond à un besoin. Il est donc important de commencer par bien définir ces besoins. Rien que pour la persistance des données, il existe de nombreuses méthodes : base relationnelle, orientée document, clef/valeur, graphe, ou même la gestion en mémoire de l'application. Pour les langages, c'est pareil. Chaque technologie possède des avantages et inconvénients et il t'appartient de les lister en fonction de tes besoins.

Par ailleurs, fait bien attention à découper tes besoins. Mélanger les traitements batch et le fonctionnement de l'application web risque de générer des problèmes de performances entre les 2 traitements. Il serait préférable de séparer complètement ces 2 applications et même les mettre sur des serveurs différents, puisque les problématiques traitées et les besoins sont différents.

Par exemple, puisque tu parles de PHP, on peut citer les avantages et incovénients.
Avantages :
- C'est un langage très populaire donc tu trouveras beaucoup de monde sachant l'utiliser et une documentation abondante.
- Il est parfaitement adapté aux applications web
- Depuis la version 7, sa machine virtuelle est très performante
- Sa maintenance est aisée
Inconvénients :
- La communauté est principalement composée de débutants et la majorité des tutos enseignent des pratiques dangereuses.
- La qualité de conception du langage et des frameworks l'utilisant est de faible qualité et oblige à s'enfermer dans une certaine vision de développement. Bien que cela soit moins vrai dans les dernières versions, on subit l'héritage des versions précédentes.
- Le langage est un fourre-tout de différentes techniques ajoutées au fil des versions. Il est très permissif et demande une grande discipline pour ne pas faire n'importe quoi.

Ensuite il y a des caractéristiques qui vont pencher dans un sens en fonction de tes besoins. En l'occurence, PHP ne fonctionne pas comme un exécutable. Les scripts sont exécutés à chaque appel, en réinterprétant toute la stack technique. Par exemple, une application Java va s'exécuter en permanence et sera prête à exécuter toute requête. La différence est qu'une application PHP sera plus simple à déployer et maintenir qu'une application Java, au prix de performances inférieures.

Il est donc très important de lister les différentes problématiques que tu veux résoudre avant de choisir les technologies à utiliser.
Modifié par Ostara (03 Aug 2020 - 14:45)
Merci @Ostara d'avoir pris le temps d'exposer tes conseils et ton expérience. Ils me sont précieux et je les digère(rai) un par un.

>> ceci n'exclut pas que d'autres puissent apporter aussi leurs lumières, un tel projet ne peut qu'être meilleur s'il est "collaboratif" <<

Pour mieux te répondre, je commence par un petit historique.

Histoire
Ce projet a en réalité démarré il y a 10 ans, où j'avais réussi à "faire tourner" une petite ville (10 000 habitants environ, que l'on voyait se déplacer, consommer, etc. C'était tout en local, données, visu, dessin etc. Un cabinet d'urbanistes suivait la progression avec intérêt. C'était développé avec QT (framework C++), la base était un freeware SQL (je ne me rappelle plus son nom), sous Windows.
J'ai ensuite laissé tomber pour pb personnels, et devant la difficulté de certaines fonctions (comme le déploiement/vente, ou l'extension à des volumes plus importants avec une performance acceptable). J'ai réalisé qu'il fallait d'abord bien conceptualiser, j'ai étudié des cours d'urbanisme et de géo-informatique pour réaliser que ma conception initiale n'était pas assez solide / évolutive.

A l'époque je connaissais mal le WEB, et d'autre part ce dernier n'avait pas encore d'outil graphique performant type WebGL...

Rôle général du serveur
Le "cahier des charges serveur" comme tu le demandes fort justement, est nouveau et consistera essentiellement à
- faire ce que font tous les sites web : de la communication, des articles, et puis le fameux simulateur, avec bridage pour les non-inscrits.
- enregistrer les données saisies ou dessinées, les restituer en brut à la connexion ou à la demande
- obéir au "go" qui lance la simulation d'un périmètre géographique pour un client donné

- calculer tous les déplacements, et restituer au client les positions toutes les (secondes, 5 secondes, etc, fréquence à affiner) . Pause, stop, reprise bref comme un streaming (ça y ressemble...) .
A te lire, même si le serveur n'est, de ce fait, pas bombardé de requêtes comme le serait un serveur de jeu interactif, il faut qu'il soit très répondant (le client veut un refresh le plus rapidement possible, genre toutes les secondes) et surtout qu'il calcule très vite. A te lire l'application Java est plus "à l'écoute" des requêtes que le brave PHP. Je vais essayer d'utiliser les deux, le PHP pour la gestion courante du site et des abonnés, Java pour la simulation.

- restituer les résultats statistiques en fin de simulation.
- opérations batch diverses
Je pense que c'est assez précis pour calibrer un serveur...

Faire tout ceci sur un client Windows, même puissant, c'est impossible, sauf à simplifier à l'extrême et donc s'éloigner d'une vraie simulation et ouvrir la porte à la critique justifiée.

D'où l'idée d'un gros moteur sur serveur, et un client web qui se contente de la déco, et demande des news toutes les n secondes.

Sans parler, surtout, du fait que le projet se veut communautaire (communauté d'utilisateurs qui décident ou non de partager leurs travaux), or créer une communauté en partant d'un client lourd c'est assez contradictoire.

Les hébergeurs
Je suis prêt à commencer avec un petit budget 10€/ mois pour mettre au point les composants essentiels de la chaîne avec les vraies contraintes et les vrais problèmes d'archi, plutôt que de "bouchonner" comme tu le suggères car je n'aime pas bien le bouchonnage (même si j'ai souvent été obligé de le faire, car j'était tout le temps prêt avant mes partenaires)

J'ai une question très terre à terre :
Sur le catalogue de LWS, l'offre la plus chère de serveur dédié fournit 500Go seulement d'espace disque, pour 50€/ mois. Je n'arrive pas à croire qu'ils limitent autant le volume de stockage... Il faudra donc un jour faire comme google, avoir des serveurs répartis et des synchronisations entre serveurs... Des avis ? Existe t-il des hébergeurs plus généreux en espace disque et tout aussi fiables en terme de qualité de service ?
https://www.lws.fr/serveur-virtuel.php

Merci encore pour le travail d'Alsacréations.
Bonjour. Pour hébergement perso c'est O2Switch. Offre unique 72 euros TTC et espace disque illimité. Aucun problème depuis que je suis chez eux. Boîte française donc support en français et stockage des données ici. Ton projet semble très intéressant. Bon courage.
Meilleure solution
Bonjour,

o2switch correspond à de l'hébergement mutualisé je dirais donc que ce n'est pas comparable à l'offre VPS chez LWS.
Par contre, je ne connaissais pas leur prestation à O2Switch, ça paraît intéressant.

Pour ma part, je n'ai pas d'avis sur l'hébergeur LWS.
J'utilise l'offre Public Cloud d'OVH qui permet pas mal de flexibilité (en particulier l'offre Sandbox qui est pas mal pour débuter avec un budget restreint). Tu peux faire évoluer tes serveurs très facilement, et rattacher des disques dur (le coût est au Go donc c'est toi qui détermine l'espace que tu veux).
On va dire qu'en terme de flexibilité tu peux faire pas mal de choses.

En espérant que ces infos puissent t'aider, bon courage dans ton projet ! Smiley smile
Modifié par Raphi (04 Aug 2020 - 11:32)
Merci beaucoup sepecat et Raphi, et encore Ostara, pour vos infos très claires et pour vos encouragements.

J'ai maintenant une idée plus précise de l'offre d'hébergement, je pense donc acheter français avec une facture simple, et retourne aux autres aspects du design du projet. Il est probable que j'aurai encore par moments besoin de la communauté, ne serait-ce que pour y publier des offres d'emploi !

++
Modérateur
Bonjour,

sinon, je n'ai jamais utilisé, mais il existe pour Postgresql une extension nommée PostGis ( https://postgis.net ) qui permet de faire directement des requêtes spatiales en SQL. (genre tout les points dans un rayon de 20 km autour d'un point, ou dans une forme géométrique.