IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation site fort trafic


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut Optimisation site fort trafic
    Bonjour,

    Dans le cadre de développement d'un site à fort trafic et beaucoup de connexions simultanées, j'aimerais être sûr de ce que je fais.
    Actuellement, j'intègre quelques principes. J'aimerais vos conseils ainsi que vos remarques sur ces points et des conseils idées à apporter en plus.

    Premièrement,
    Je vire Apache et j'utilise Nginx (qui fera office de serveur web) couplé à php-fpm (et peut-être HipHop for PHP qui compile le code. Développé par FaceBook).

    Deuxièmement,
    Optimisation de la base de données et utilisation de posgreSQL (MySql étant d'après un ami administrateur bdd chez ubuntu-fr, assez "bridé").

    Troisièmement,
    Application du modèle MVC pour l'architecture du site.

    Quatrièmement,
    Stockage des données sur le ftp par ordre alphabétique. (d'après OVH.net)
    J'explique: privilegier ./images/a/i/airGuillaume pour le stockage de ses images (tels que avatar etc...) plutot que ./images/idUser_nomFichier.jpg

    Voilà, j'aimerais vos avis. Cordialement, airGuillaume.
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 225
    Points
    20 225
    Par défaut
    Tout d'abord qu'appel tu un site à fort traffic ?

    1- Si Nginx est effectivement plus rapide que Apache en http pure dès que php rentre en jeu c'est nettement moins vrai. Il faudra donc faire des tests avec ton code final pour être sur. Se baser sur les dire d'un mec sur internet qui connais le cousin de ma tante , ne remplacera jamais un test de montée en charge fait sur tes serveurs de prod.

    2- Que veux dire bridé ? La guerre du je vais le plus vite entre sqlite,mysql et postgres est généralement du même accabit que Windows c'est mieux que MacOs.
    Une bdd mysql bien conçue est tout à fait en mesure de gérer plusieurs millions d'enregistrements sans broncher. Mais effectivement si c'est concu n'importe comment ca va ramer , tout comme va ramer postgres.
    Encore une fois des tests devrais aider à choisir.

    3- Le modèle MVC apporte un plus niveau confort de programmation et maintenance par contre pour les performance c'est complètement l'inverse. C'est en général innenvisageable d'utiliser un framework MVC sans tous les caches qui vont bien derrière.

    4- La facon dont tu stock les données ne vas pas agir directement sur les performance (ou alors de manière infime) c'est surtout histoire d'organiser les fichier afin d'être en mesure de les retrouver facilement.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    tout d'abord, merci d'avoir pris le temps de répondre.

    1- Je me suis basé sur plusieurs benchmark notamment celui ci:
    http://blog.a2o.si/2009/06/24/apache...nginx-php-fpm/
    On peut clairement voir que nginx à un plus grand nombre de requetes/secondes.

    2- Certes une bdd bien conçue sous mysql conviendrait parfaitement, mais ne rivaliserait pas avec une bdd bien conçue sous postgre. Je m'appuie sur ce que mon ami dit. Il apporte un précision surtout sur le point des logs etc, pour y voir plus simplement. (qui n'est pas l'ami d'un ami d'une tante qui est la cousine à mon oncle)

    3- Niveaux MVC, merci pour les précisions. Je savais que ça améliorait l'architecture pour que tout le monde puisse bosser dessus de son coté etc, mais je ne savais pas que ça "alourdissait". Je suis en train de regarder pour une solution d'opcode. Peut-être pourrais-tu me conseillers? APC de php fait parfaitement l'affaire ou il en existe de plus "poussée"?

    4- Pour finir, je m'appuie sur la bases de ce qu'un technicien d'OVH m'a dit (compétent ou pas, je ne sais pas) mais son exemple me parraissait viable:

    Lorsqu'on ouvre un dossier windows avec 500'000 photos, forcément ça rame plus que si on ouvre 4 dossiers pour y arriver puis que dans le dernier on en retrouve que 10'000.
    Après, des tests sont à faire, c'est clair. Je vérifierai les dires.

    Donc le gros point: l'opcode. A ton sens, lequel est le plus "performant"? Déjà, il y en existe plusieurs?
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  4. #4
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut,

    Alors pour reprendre la question de grunk, qu'appelles-tu un site à fort traffic ? 10 000 ou 1 million de visites par jour ? S'agira t'il de simples pages textes ou bien il y aura un stockage de photos ou vidéos ?

    Perso je conseillerais :
    - Un serveur dédié avec Apache ou Nginx (je ne connais pas assez ce dernier)
    - MySQL ou Postgre, peu importe tant que ton MDC et que tes requêtes sont optimisées
    - Un système de cache+++ pour limiter les requêtes et les accès au serveur
    - Si tu as beaucoup de fichiers (photos), n'en mettre pas plus de 1000 par dossier :tu peux facilement créer de nombreux sous-dossiers. Tu peux éventuellement les stocker sur différents serveurs ou sous-domaines : les images pourront ainsi se charger en parallèle et la page s'affichera d'autant plus vite.

    A+++

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 225
    Points
    20 225
    Par défaut
    1- Je me suis basé sur plusieurs benchmark notamment celui ci:
    http://blog.a2o.si/2009/06/24/apache...nginx-php-fpm/
    On peut clairement voir que nginx à un plus grand nombre de requetes/secondes.
    Si tu regarde bien , c'est ce que j'avais dis juste avant. Apache est au dessus (et de loin) en php , s'écroule plus tard sur les connection concurrente mais en revanche s'écroule plus fortement que nginx. Par contre pour servir un simple txt (donc du http pur) nginx est plus performant.
    L'article date de plus d'un an , à prendre avec des pincette donc

    Pour les caches d'opcode il en existe en effet plusieurs :
    - APC
    - ion cube
    - Zend accelerator
    - MemCache

    Après de là à te dire le quel choisir , j'ai envie de dire joker

    Tu peux également regarder du coté des cache de script (genre cache_lite , zend_cache ...) si jamais l'opcode n'était pas suffisant.

    Lorsqu'on ouvre un dossier windows avec 500'000 photos, forcément ça rame plus que si on ouvre 4 dossiers pour y arriver puis que dans le dernier on en retrouve que 10'000.
    Après, des tests sont à faire, c'est clair. Je vérifierai les dires.
    Sauf que dans le cas de ton site quand tu vas chercher un avatar pour l'afficher , tu ne liste pas le contenu du dossier. Tu vas juste chercher une image via son url.
    Mais ca reste je pense plus une histoire d'organisation que de performance
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    J'appelle site à fort trafic plusieurs milliers de visites /jours. Du genre 20-25000 avec environs 1000connexions simultanées (et bien-sur photos etc)

    - Si tu as beaucoup de fichiers (photos), n'en mettre pas plus de 1000 par dossier :tu peux facilement créer de nombreux sous-dossiers. Tu peux éventuellement les stocker sur différents serveurs ou sous-domaines : les images pourront ainsi se charger en parallèle et la page s'affichera d'autant plus vite.
    Voilà, ça appuie ce que je pensais. J'ai déjà mes fonctions qui créent les différents dossiers et placent les images des utilisateurs.

    Il n'y a pas stockage de vidéos mais il y a un "gros" stockage de photos.

    Tu peux éventuellement les stocker sur différents serveurs ou sous-domaines
    Peux tu m'aiguiller, me donner un lien car je ne vois absolument pas comment faire :/

    Un système de cache+++ pour limiter les requêtes et les accès au serveur
    Ca confirme ce que dit grunk, je vais regarder pour une solution de cache opcode.

    Merci à toi aussi d'avoir pris le temps de répondre.
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  7. #7
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Tu peux également regarder du coté des cache de script (genre cache_lite , zend_cache ...) si jamais l'opcode n'était pas suffisant.
    Smarty? A bannir? Je l'utilise actuellement pour le système de template... Autant l'utiliser pour cache script?

    Une alternative à smarty? "plus légère"?
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 225
    Points
    20 225
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Peux tu m'aiguiller, me donner un lien car je ne vois absolument pas comment faire :/
    Il suffit simplement d'avoir simplement plusieurs sous domaine pour charger tes ressources (pas forcément plusieurs serveurs).

    Par exemple :
    Adresse classique : tonsite.com
    ssdomaine : static.tonsite.com, static2.tonsite.com, static3.tonsite.com

    Avec static tu charge les css , avec static2 les images et avec static 3 les js et tu pourras ainsi charger 3 ressources en même temps (3 requetes dns différente). Plutôt que d'attendre que la ressource 1 soit finie de charger avant d'attaque la seconde.

    Pour te donner une idée , le site dans ma signature fait ~ 10K visiteur unique et 50K pv jours sur un dédié de millieu de gamme avec 2 autres sites faisant le même volume. Sous apache/php/mysql sans optimisation particulière si ce n'est un cache de script.

    Citation Envoyé par radicaldreamer Voir le message
    Smarty? A bannir? Je l'utilise actuellement pour le système de template... Autant l'utiliser pour cache script?

    Une alternative à smarty? "plus légère"?
    Smarty n'est à ma connaissance (j'utilise twig plus smarty) pas un cache de script. Il cache la compilation des template mais c'est tout. Avec un cache de script tu peux décider de cacher le résutlat d'une requete sql ou d'un calcul complexe pour une durée particulière.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Du genre 20-25000 avec environs 1000connexions simultanées.
    Effectivement, ce sont surtout les connexions simultanées qu'il faudra gérer : donc cache+++.

    Citation Envoyé par radicaldreamer Voir le message
    Peux tu m'aiguiller, me donner un lien car je ne vois absolument pas comment faire :/
    C'est assez simple en fait. Généralement un site a seul un nom de domaine : www.monsite.com. S'il y a 3 images à charger, alors cela fait trois requetes http :
    www.monsite.com/image1.jpg
    www.monsite.com/image2.jpg
    www.monsite.com/image3.jpg

    Les trois requêtes se font successivement : si le chargement de chaque images prend 2 secondes, les 3 images seront totalement chargées au bout de 2+2+2 = 6 secondes.

    Maintenant, si les 3 images sont sur des serveurs / sous-domaines différents :
    img1.monsite.com/image1.jpg
    img2.monsite.com/image2.jpg
    img3.monsite.com/image3.jpg
    Alors les trois requetes seront traitées en parallèle et les 3 images seront totalement chargées au bout de 2 secondes.

    A noter que cela est également valable pour les fichiers css et javascript.

    J'ai trouvé ce site qui en parle, mais il y a surement d'autres articles ailleurs.

    A++

  10. #10
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Ah effectivement, j'ai confondu le cache template concernant smarty.

    Pour ce qui est des sous domaines, génial! Ça a l'air simple a mettre en œuvre et je ne connaissais pas.
    Cependant, j'ai une question. La partie de chaque user se fera par sous domaine virtuel, ça ne posera pas de problème temps que je réserve certain sous domaines? Ou doivent-ils être créer réellement sans passer par le mode rewrite?
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  11. #11
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Pour être sûr de ne pas me planter, tu appelles cache de script la création de fichier cache et de vérification avec "filemtime"?

    (http://www.takeitweb.fr/blog/script-cache-php.html <= ok, ça date un peu, c'est juste pour voir le principe)
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Cas des petites mises à jour sur site à fort trafic
    Par Spoutch dans le forum Performance Web
    Réponses: 5
    Dernier message: 18/03/2013, 14h53
  2. Architecture J2EE pour un site à fort trafic
    Par you98 dans le forum Java EE
    Réponses: 1
    Dernier message: 06/10/2011, 22h21
  3. Réponses: 0
    Dernier message: 12/01/2009, 17h25
  4. [Professionnel] Hébergement site à fort trafic
    Par bat11 dans le forum Hébergement
    Réponses: 1
    Dernier message: 03/01/2007, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo