Bonjour à tous,
j'aimerais mettre en place un nouveau site web qui aura une affluence d'environ 50.000 users. Pour ce faire j'aimerais savoir s'il existe des méthodes me permettant de faire le bon choix en ce qui concerne les caractéristiques matérielles nécessaires!
# Concurrence ?
Posté par Fabien . Évalué à 3.
Si je résume l'énoncé de ton problème j'ai seulement :
- serveur web
- 50000 users (visites ?)
Ca fait peu de paramètres et il manque une donnée importante en relation avec les 2 que tu nous donne :
- combien de visites simultanées ?
c'est 50000 visites simultanées, à la seconde ou sur une journée ?
[^] # Re: Concurrence ?
Posté par Krunch (site web personnel) . Évalué à 4.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Concurrence ?
Posté par serval21 . Évalué à 0.
[^] # Re: Concurrence ?
Posté par Mouns (site web personnel) . Évalué à 4.
code mal écrit ? bien écrit ?
complexité intrinsèque du code ? ( O(1) , O(n), O(n^2), O(n^n) )
tenu charge du code ? ( req/s pour une archi donnée )
dépendance absolue du code à des services ? ( SQL ? memcached ? MongoDB ? BDB ? FTP ? )
donc un programme bien ecrit ayant une complexite en O(1) tenant 5 000 req/s sans dépendance externe coutera moins cher en matériel qu'un programme mal écrit ayant une complexité en O(n^3), tenant 20 req/s ayant des dépendances fortes à MySQL.
donc si tu ne sais pas, tu as la solution du 'GNU-bee' ( prononcer noubie ) qui consiste à chercher à avoir la plus grosse machine sans trop reflechir sur comment s'en servir correctement pensant que cela ne se réduit qu'à cela.
[^] # Re: Concurrence ?
Posté par NeoX . Évalué à 1.
mais pour ca faut avoir du temps, et un peu d'argent.
mais deja fouiller un peu dans les stats de ton serveur actuel pour savoir ce qui est visité, sur quelle periode, la durée d'une visite...
[^] # Re: Concurrence ?
Posté par barmic . Évalué à 4.
code mal écrit ? bien écrit ?
Tu fais comment pour déterminer ça ? Un comité d'experts ? Tu les choisis comment ? En fonction de la réputation des développeurs ?
complexité intrinsèque du code ? ( O(1) , O(n), O(n^2), O(n^n) )
Complexité en quoi ? En mémoire ? Tu mesures quoi avec ta complexité ? Les accès mémoire ? L'allocation mémoire ? Le nombre de divisions sur des nombres en virgule flottante ? Toutes les instructions (serveur web et langage compris ?) ? Si c'est le cas tu es au courant que la complexité entre deux instructions peut être très différentes ?
Tu es au courant aussi que la simple complexité algorithmique est très loin d'être suffisante dans ce genre de cas ? En effet il faut prendre en compte le côté parallélisable ou non des calculs.
tenu charge du code ? ( req/s pour une archi donnée )
Déjà il doit manquer un mot, mais en plus c'est vide de sens. Si je prends l'architecture x86, avec un bon vieux celeron et 256Mio de RAM et que je dis qu'il est capable de faire du trois requêtes par seconde alors il me faudra un cluster pour arriver à mes 50 000 utilisateurs ?
L'architecture a une importance, mais elle n'est pas significative par rapport à la configuration testée. Les Atom et les Core i7 c'est la même architecture, à moins que tu ne parles des "sous-architectures" comme Nehalem, mais là ça commence à être vraiment très spécifique.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Concurrence ?
Posté par barmic . Évalué à 4.
Alors que je ne vois pas du tout comment :
- juger de la qualité d'écriture d'un code mis à part en se mouillant le doigt et en le levant bien haut.
- juger de la complexité algorithmique d'un site web (qu'est ce qu'on cherche à quantifié ?)
Si vous avez une ou des solutions pour le faire ça m'intéresserais de les connaître. Je serais même content si vous me balancé un RTFM ou un GIYF avec les mots clefs adéquate.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Concurrence ?
Posté par Julien Gilbert . Évalué à 4.
Vous voulez pas la jouer soft ? Je suis pas contraignant... vous voulez la jouer hard ? On va la jouer hard
[^] # Re: Concurrence ?
Posté par Mouns (site web personnel) . Évalué à 2.
- avec un MVC, coller du dans du V et du V dans du C,
- faire de la POO avec 1 seul objet qui fait tout n'importe comment,
- utiliser la suite 0,1,2,3 en tant que nombre, faire des opérations de comparaison mais ne pas respecter la loi d'ordre qui va avec ( comme dire 0:pas important, 1:important, 2: faiblement important, 3:moyennement en utilisant dans le code des > et des < ) ... c'est un usage contre-intuitif de nombre comparables puisque l'on s'attend à 0<1<2<3 et non 0<1>3<2 ( comprendre 1>3>2>0 )
et je parle d'exemples concrets écrit par des personnes diplômées et non stagiaires.
intrinsèque : http://fr.wiktionary.org/wiki/intrins%C3%A8que
extrinsèque : http://fr.wiktionary.org/wiki/extrins%C3%A8que
complexité extrinsèque du code : complexité qui n'est pas lié au code que tu écris, que tu maintiens, que tu patches. par exemple, quand tu modifies un fichier php, tu vas ni aller réécrire l'interpreteur php ni apache2 ni le noyau.
complexité intrinsèque du code :
complexite théorique du code sans considérer les contraintes inhérentes au matériel, à l'interpréteur.
cela concerne aussi bien la consommation mémoire que la vitesse d'execution.
par exemple :
quand tu fais un "select *" d'une table enorme sans aucun where, et que tu recopies tout en mémoire, "c'est très couteux", et le fait que php ou apache soit optimisé ou non n'a rien à y faire, qu'il y ait 4Mo ou 4Go ou 4To de RAM, cela ne change rien.
quand je parle de complexité intrinsèque du code, je parle bien de la complexité du code sur le quel tu travailles et non pas de la complexité que tu subis de l'extérieur.
tu noteras que je ne parlais pas de parallèlisation & co.
" tenu de charge du code " : exemple ultra basique (et peu significatif) pour la mesurer sur un site wev : /usr/bin/ab
le but est de savoir si ton code bien qu'il puisse être "théoriquement peu couteux en terme d'execution", est parallélisable ou non.
exemple pratique idiot :
tu accèdes en lecture seule à des fichiers sur le disque mais tu as mis un verrou d'accès exclusif à ces fichiers durant toute l'execution de ton programme.
si ton code est théoriquement rapide, il va faiblement tenir la charge puisqu'à chaque fois, il n'y aura qu'une seule requete qui y aura accès.
les seules choses pouvant améliorer les performances, sont la performance du hardware ou la réécriture du code.
exemple pratique tout aussi idiot :
tu fais à chaque requete un update sans aucun where sur une table ayant beaucoup d'entrées, dans une base MySQL.
MySQL utilise souvent des verrous exclusif lors d'un update ... donc faible tenue de charge quand tu fais des update couteux.
pour finir, c'est "perduE" <- tu noteras le e final :p
[^] # Re: Concurrence ?
Posté par Krunch (site web personnel) . Évalué à 2.
Enfin, l'idée c'est que c'est que tu ne vas pas avoir une réponse complète dans un journal DLFP parce que ça nécessite d'analyser en détails le site et de monter des tests de performance pertinents. Ce qui requiert un minimum d'expertise et de temps.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Concurrence ?
Posté par serval21 . Évalué à 0.
[^] # Re: Concurrence ?
Posté par olaf . Évalué à 10.
un sheevaplug suffira car tu n'auras que 50000 / 24 / 60 / 60 soit 0.58 visiteur par seconde... :-)
# Apache bench
Posté par yellowiscool . Évalué à 1.
Certains peuvent simuler des visites complètes, mais le plus simple est surement apache bench.
Tu lances apache bench sur une page typique, avec une machine dont tu connais la configuration. Ça va te donner un résultat en nombre de pages par seconde.
Je dirais qu'il faut que cela puisse desservir au moins 5 fois la quantité maximale de pages par seconde que tu penses devoir fournir. À toi de voir si tu veux plus ou moins de marge. Plus tu prends de la marge, plus c'est confortable.
Une fois que tu connais le nombre de pages par seconde qu'il faut, et le nombre de pages par seconde sur une configuration donnée, tu peux choisir une configuration plus ou moins puissante par rapport à la configuration testée.
Mais un bête core2duo sur un site bien codé suffirait à mon avis.
Envoyé depuis mon lapin.
[^] # Re: Apache bench
Posté par barmic . Évalué à 2.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Apache bench
Posté par yellowiscool . Évalué à 2.
L'automatisation est réalisée à partir de javascript exécuté par le navigateur :-)
Selenium, c'est bien pour faire des tests unitaires, pas pour faire des tests de montée en charge.
Envoyé depuis mon lapin.
[^] # Re: Apache bench
Posté par serval21 . Évalué à 1.
merci pour les retours, j'ai testés apache bench, httperf et autobench, je me suis quelque peu perdu dans la réalisation du graphe avec le résultat d'autobench et j'ai finalement retenu apache bench qui donne des résultats tres compréhensifs!!pour info j'ai trouvé que le Dell PowerEdge R510 était une machine assez intéressante!!
Merci à tous!!
[^] # Re: Apache bench
Posté par Nasga . Évalué à 2.
Peux tu nous en dire plus sur les technologies utilisées pour ton site ? (php/ruby/perl/python/java/mysql/postgres ?)
Personnellement je conseille nginx au dessus d'apache, qui permet de migrer de serveur très rapidement, mettre en cache les fichiers statiques (png/css/js/etc...), faire du load balancing etc...
Pour le serveur, je conseille du raid0 de base et d'avoir un second serveur en slave mysql/backup en cas de crash.
[^] # Re: Apache bench
Posté par serval21 . Évalué à 0.
Les technologies utilisées sont PHP+mysql et je jette un oeil à nginx!!
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.