Choix techniques liés à la création d'un site

Fermé
christophe78 Messages postés 3 Date d'inscription jeudi 21 septembre 2006 Statut Membre Dernière intervention 26 septembre 2006 - 21 sept. 2006 à 14:42
phunk Messages postés 497 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 30 novembre 2006 - 26 sept. 2006 à 15:33
Bonjour,
Voila j'ai 2 ou 3 problèmes liés à des choix techniques que je ne connais pas forcément.
Je suis en charge de la création d’un site Internet avec beaucoup d'utilisateurs connectés simultanément (environ 10000 en période normale et jusqu'à 20000 en périodes de pointe), sur des sessions d’une durée moyenne de 20 minutes. Ces utilisateurs se connecteront à une base de données ce qui impliquera un fort taux de transferts.
Les activités des utilisateurs sur le site feront qu’il y aura énormément de requêtes SQL basées en premier lien sur les "select" ainsi que les "insert" et dans une moindre mesure sur les "update" et "delete".

De plus on devrait avoir plusieurs serveurs web sous Linux (Debian) avec la techno Apache / PHP, ainsi qu’un frontal pour faire du Load Balancing sur ces serveurs web. Le ou les serveurs SQL seront sur des machines dédiées.

Viennent ensuite les interrogations:

On parle du triplet Apache/php/mysql, mais dans mon cas est ce que MySQL peut tenir le coût niveau performance et rapidité, cela j’en doute vu mes premiers tests ? Ou alors voir du coté de PostgresQL ou y a t il d'autres SGBD intéressant par rapport aux critères cités ci-dessus? (plutôt OpenSource ou pas trop cher, en évitant Oracle à 12000€)
Est-ce que MySQL ou POstgresQL peuvent gérer des tables de plusieurs millions voire centaines de millions de lignes ?
Y a-t-il des options dans MySQL, PostgresQL ou une meilleure base de données, qui permettraient un meilleur temps dans le traitement des Query ?

On pense utiliser une seule base de données, va-t-il y avoir un problème de surcharge et donc obliger d’avoir plusieurs serveurs SQL? en sachant qu’on va purger la base de données au minimum une fois par jour.
Si il y a plusieurs serveurs SQL, la solution du Clustering est elle viable ?
Est-ce performant ? Ou bien ralentit elle le temps de réponses des serveurs de base de données ? Y a-t-il des solutions de « clustering » performantes à faible coût à votre connaissance ?
Et par rapport au choix de la base de données, celle-ci tient elle bien le clustering ?

Quel pourraient être les optimisations possibles pour accélérer les performances au niveau temps de réponses entre les serveurs BD et le client ? J'ai pensé au RAID 5 ou RAID 1+0 comme solution technique pour les disques durs contenant les bases de données, est ce un bon choix de RAID par rapport à votre expérience? Mais y a t il d'autres points que je n'est pas vu ?

Merci de vos réponses et désolé si il y a des infos que j'ai pas vu sur le forum.
A voir également:

3 réponses

phunk Messages postés 497 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 30 novembre 2006 193
21 sept. 2006 à 16:36
Salut totophe,
Dans un premier temps avant le choix d'une solution technique il est important de bien concevoir la base : jointures "intelligentes" et stratégie d'indexation. Je dis ça mais je pense que ça fait partie de ton métier :)

1) De façon générale, il faut faire un examen des tables/filtres/index et procéder à une estimation des coûts par paire jointe. Cela permet de trouver le meilleur moyen d'exécuter une requête donnée (chemin optimal = chemin le moins couteux). Il faut commencer par là pour accélérer les temps de réponses.

2) Pour le choix MySQL, je suis assez dubitatif; il faudrait tester la charge en dev avec un émulateur. Pour Postgres je ne pourrai pas te renseigner, je ne connais pas beaucoup.
Certes Oracle est très cher (12000 euros ? plus que ça si plusieurs serveurs :)), mais il n'existe pas mieux pour la tenue de charge. Informix bien aussi, mais cher aussi ^^

3) Si plusieurs serveurs BD, la solution du clustering est excellente. Après ça dépend de la structure même de ta base et des requetes que les users seront amenés à faire sur les tables. C'est une balance de charge pour les données, au même titre que le frontal pour le web. Donc il faut y réfléchir. Je n'ai pas de solution de clustering en tête, avec Oracle la question ne se pose pas. Google t'apportera surement des pistes.

4) Eventuellement mettre en place une fragmentation. C'est une bonne optimisation, mais qui est couteuse (comme le clustering). Pour une même table, les données sont réparties dans plusieurs dbspaces, à chacun est attribué un disque (tête de lecture). Je te raconte pas les perfs :)

Pour le RAID, ça dépend de la stratégie de sécurité/redondance des données..

Mais en principe toutes ces questions sont analysées et traitées par le chef de projet avec l'architecte syst/réseau et l'admin base de données, ton projet à l'air d'envergure en plus !
0
christophe78 Messages postés 3 Date d'inscription jeudi 21 septembre 2006 Statut Membre Dernière intervention 26 septembre 2006
25 sept. 2006 à 14:27
Salut,
D’abord merci de ta réponse, ensuite je vais peut être préciser 2 ou 3 points. D’abord, nous sommes une petite équipe et je suis en même temps administrateur base de données et architecte système/réseau, c’est pour cela que, entrant dans le monde du web, je pose quelques questions.
Pour la base de données, on essaie déjà d’optimiser celle-ci.
Après quelques tests entre MySQL et PostgresQL sur une base de 100000 lignes, on a pu constater que PostgresQL était plus performant au niveau temps d’exécution. Pour les SGBD coûteux comme Oracle ou Informix, les critères de coût sont toujours valables, c'est-à-dire de préférence peu coûteux ou OpenSource.

A propos du clustering, que veux tu dire par « ca dépend de la structure … » le clustering est il plus performant par rapport a un certain type de BD ?

Au niveau du RAID, mon chef serait plus tenté par rapport au coût des disques durs à chosir plus la sécurité des données plus que la performance, donc plus un RAID 1 ou ce qui se peut s’approcher le plus.
0
phunk Messages postés 497 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 30 novembre 2006 193
25 sept. 2006 à 16:11
Ok, donc effectivement le RAID 1 (mirroring) est adapté. Si tu as constaté de meilleurs perfs avec PostgresQL par rapport à tes besoins, je penses qu'il ne faut pas hésiter.

En fait pour le clustering ça ne dépend pas de la structure (pourquoi j'ai écrit ça ?), c'est vraiment la balance de charge. En fait il est plus efficace notamment s'il y a beaucoup de sous-requetes / union / conditions complexes : le frontal dispatche les différentes parties de la requete sur différents serveurs, récupère le résultat et le renvoie. Après faut voir sur quels tables vont taper principalement les utilisateurs, et quelles seront les requêtes qui seront faites.
De toutes façons dans tous les cas c'est une bonne optimisation, mais couteuse donc à analyser.

Bon courage :)
0
christophe78 Messages postés 3 Date d'inscription jeudi 21 septembre 2006 Statut Membre Dernière intervention 26 septembre 2006
26 sept. 2006 à 12:42
Disons que je ne m’arrête pas a PostgresQL. En cherchant un SGBD sous linux à un coût moindre, je suis arrivé sur les OpenSOurce, j’ai testé. Maintenant il en existe bien d’autres connus ou moins connus que je testerai aussi. Et si vous en connaissez je suis preneur.

Au niveau du clustering, au niveau de la base, elle sera orientée fonctionnelle. Il y aura donc 2 ou 3 redondances entre tables, mais cela permet de diminuer la complexité des requêtes, donc peu ou pas de sous requêtes, jointure ou autres.
De plus, les utilisateurs se connecteront plus sur 3 ou 4 tables qui seront très grosses (dans les 10 millions de lignes) et le type de requête sera alors plus des « insert,update, select ».
Donc le clustering pour dispatcher les parties de requêtes n’est pas intéressant dans mon cas, mais est il performant pour les requêtes simples ?
Le clustering peut il diminuer la file d’attente des requêtes utilisateurs en les dispatchant sur les différents serveurs de base de données ?
0
phunk Messages postés 497 Date d'inscription lundi 31 juillet 2006 Statut Membre Dernière intervention 30 novembre 2006 193
26 sept. 2006 à 15:33
Pour le clustering il faudrait vérifier mais il me semble que oui.
0