êtes-vous prêts pour le succès ?
Huh !? Qui ça ?     Steven VAN POECK                                      stevenvanpoeckautodidacte, 12 ans de PHP, entre ...
should i stay or should i go* ?                                  * the clash, 1981
le début
quelques utilisateurs                     Apache                  2.2.16 + mod                   PHP 5.3.3 +              ...
# requests                                    Resp time  250                                                 10  200      ...
un peu plus dutilisateurs                     Apache                  2.2.16 + mod                   PHP 5.3.3 +          ...
un peu plus dutilisateurs                     Apache                  2.2.16 + mod                   PHP 5.3.3 +          ...
●   solutions    ●   utilisez les dernières versions stables des briques logicielles    ●   distribution de charges : sépa...
●    solutions (suite)    ●   tuning PHP        –   cache op-code PHP (APC, eAccelerator, Zend Server)        –   utilisez...
un peu plus dutilisateurs         MySQL             Nginx 1.0.8 +         5.5.16            FastCGI PHP                   ...
# requests                                                   Resp time  1200                                              ...
encore plus dutilisateurs         MySQL             Nginx 1.0.8 +         5.5.16            FastCGI PHP                   ...
encore plus dutilisateursPerformance :Disponibilité :Coût :
●   solutions    ●   ajout de RAM sur le serveur MySQL    ●   tuning MySQL         –   utilisez InnoDB (rowlock)         –...
exemple solution ad-hoc dans le code :public function query($sql) {    static $qCache = array(); // Stockage    $qSig = md...
encore plus dutilisateurs                   memcachePerformance :Disponibilité :Coût :
# requests                                                   Resp time  1200                                              ...
toujours plus dutilisateursPerformance :Disponibilité :Coût :
toujours plus dutilisateursPerformance :Disponibilité :Coût :
●    solutions    ●        ajout de serveurs frontaux    ●        load balancer    ●        sharding pour la base de donné...
toujours plus dutilisateurs                  sharding                                       Load1             1           ...
# requests                                                         Resp time  3000                                        ...
le succès est au rendez-vous !1             12             23             3Performance :Disponibilité :Coût :
le succès est au rendez-vous !1             12             23             3Performance :Disponibilité :Coût :
●    solutions    ●        perfomances & disponibilité        –   HTTP caching (Varnish, Squid, Nginx…)        –   content...
le succès est au rendez-vous !                                       HTTP cache1              12              23          ...
# requests                                                                                    Resp time  6000             ...
mais encore ?
●    noSQL    ●        MongoDb : http://www.mongodb.org/    ●        CouchDb : http://couchdb.apache.org/    ●        Couc...
questions ?
●   Références:    ●   Dernières versions briques logicielles         –   Debian : http://dotdeb.org         –   PHP : htt...
Prochain SlideShare
Chargement dans…5
×

Etes vous-prets-pour-le-succes-2011

813 vues

Publié le

Comment prévoir et supporter la montée en charge des applications web PHP ? Par la mise en place d'un environnement haute disponibilité performant, tolérant à la panne ! Dans le cadre de la performance, nous parlerons des différents niveaux de cache, des stratégies de distribution de charge, des extensions PHP. Côté haute disponibilité et tolérance de panne, nous aborderons les stratégies de failover, le load balancing, le sharding. Le tout basé sur le stack LAMP.

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
813
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
10
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Etes vous-prets-pour-le-succes-2011

  1. 1. êtes-vous prêts pour le succès ?
  2. 2. Huh !? Qui ça ? Steven VAN POECK stevenvanpoeckautodidacte, 12 ans de PHP, entre http://joind.in/4352 autres
  3. 3. should i stay or should i go* ? * the clash, 1981
  4. 4. le début
  5. 5. quelques utilisateurs Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49Performance :Disponibilité :Coût :
  6. 6. # requests Resp time 250 10 200 8 150 6 Resp Time (secs) OKAY Failed 100 4 50 2 0 0 5 10 25 # Concurrent requests Max connexions simultanées : 9 ~4 500 utilisateurs
  7. 7. un peu plus dutilisateurs Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49Performance :Disponibilité :Coût :
  8. 8. un peu plus dutilisateurs Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49Performance :Disponibilité :Coût :
  9. 9. ● solutions ● utilisez les dernières versions stables des briques logicielles ● distribution de charges : séparation serveur web / db ● côté disponibilité : FastCGI pour PHP ● côté ressources : nginx ● tuning serveur Web (Nginx) – worker_processes → 1 par CPU mais plus de 4 est inutile – worker_connections → 2048 – keepalive_timeout → entre 10 et 20 – access_logs off → réduction I/O (utilisez Google Analytics pour stats) – error_log <LOGFILE> error|crit → réduction I/O (désactivez avec error_log /dev/null crit)
  10. 10. ● solutions (suite) ● tuning PHP – cache op-code PHP (APC, eAccelerator, Zend Server) – utilisez la dernière version majeure stable ! – template caching (ex : Smarty) – compilation « maison » sans extensions inutilisées – always_populate_raw_post_data = Off (utilisez php://input) – max_execution_time → le plus petit possible – memory_limit → adapté à vos scripts – realpath_cache_size → plus si beaucoup de fichiers – realpath_cache_ttl → le plus élevé possible – enlever Suhosin patch
  11. 11. un peu plus dutilisateurs MySQL Nginx 1.0.8 + 5.5.16 FastCGI PHP 5.3.8Performance :Disponibilité :Coût :
  12. 12. # requests Resp time 1200 12 1000 10 800 8 Resp Time (secs) 600 6 OKAY Failed 400 4 200 2 0 0 5 10 25 50 75 100 125 150 175 200 # Concurrent requests Max connexions simultanées : 27 ~13 000 utilisateurs
  13. 13. encore plus dutilisateurs MySQL Nginx 1.0.8 + 5.5.16 FastCGI PHP 5.3.8Performance :Disponibilité :Coût :
  14. 14. encore plus dutilisateursPerformance :Disponibilité :Coût :
  15. 15. ● solutions ● ajout de RAM sur le serveur MySQL ● tuning MySQL – utilisez InnoDB (rowlock) – connection_timeout → le plus bas possible – skip_name_resolve = 1 → réduction appels réseau – log = /dev/null → réduction I/O – slow_query_log = 1 → surveillance ● cache résultats brutes des requêtes – solution ad-hoc dans le code – extension AdoDb + memcache ● optimisation du code – exit(ORM); – traque et élimination des requêtes dans des boucles
  16. 16. exemple solution ad-hoc dans le code :public function query($sql) { static $qCache = array(); // Stockage $qSig = md5($sql); // Cle unique pour la requete // On retourne le resultat directement if (array_key_exists($qSig, $qCache)) { return $qCache[$qSig]; } $rs = $this->db->query($sql); // Requete en base $qCache[$qSig] = $rs; // Mise en cache return $rs; // On retourne le resultat}
  17. 17. encore plus dutilisateurs memcachePerformance :Disponibilité :Coût :
  18. 18. # requests Resp time 1200 12 1000 10 800 8 Resp Time (secs) 600 6 OKAY Failed 400 4 200 2 0 0 5 10 25 50 75 100 125 150 175 200 # Concurrent requests Max connexions simultanées : 45 ~22 000 utilisateurs
  19. 19. toujours plus dutilisateursPerformance :Disponibilité :Coût :
  20. 20. toujours plus dutilisateursPerformance :Disponibilité :Coût :
  21. 21. ● solutions ● ajout de serveurs frontaux ● load balancer ● sharding pour la base de données ● failover pour les MySQL
  22. 22. toujours plus dutilisateurs sharding Load1 1 Balancer2 23 3 failoverPerformance :Disponibilité :Coût :
  23. 23. # requests Resp time 3000 12 2500 10 2000 8 Resp Time 1500 6 OKAY Failed 1000 4 500 2 0 0 5 10 25 50 75 100 125 150 175 200 225 # Concurrent requests Max connexions simultanées : 110 ~50 000 utilisateurs
  24. 24. le succès est au rendez-vous !1 12 23 3Performance :Disponibilité :Coût :
  25. 25. le succès est au rendez-vous !1 12 23 3Performance :Disponibilité :Coût :
  26. 26. ● solutions ● perfomances & disponibilité – HTTP caching (Varnish, Squid, Nginx…) – content distribution network (CDN)
  27. 27. le succès est au rendez-vous ! HTTP cache1 12 23 3 CDN Performance : Disponibilité : Coût :
  28. 28. # requests Resp time 6000 24 5000 20 4000 16 Resp Time 3000 12 OKAY Failed 2000 8 1000 4 0 0 5 10 25 50 75 100 125 150 175 200 225 250 275 300 325 350 375 # Concurrent requests Max connexions simultanées : 175 ~85 000 utilisateurs
  29. 29. mais encore ?
  30. 30. ● noSQL ● MongoDb : http://www.mongodb.org/ ● CouchDb : http://couchdb.apache.org/ ● CouchBase : http://www.couchbase.org/ ● ...● ze nuage (Amazon, Azure, Eucalyptus, Google apps...)
  31. 31. questions ?
  32. 32. ● Références: ● Dernières versions briques logicielles – Debian : http://dotdeb.org – PHP : http://www.php.net ● Tuning PHP / Nginx : – http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/ – http://php.net/manual/en/ini.core.php – http://talks.php.net/show/perf_tunning – http://phplens.com/lens/adodb/docs-adodb.htm#memcache ● Load balancing : http://en.wikipedia.org/wiki/Load_balancing_(computing) ● Optimisation MySQL : http://www.slideshare.net/ligaya/dpc-tutorial ● Sharding : http://en.wikipedia.org/wiki/Shard_(database_architecture) ● Failover : http://en.wikipedia.org/wiki/Failover ● Memcached : http://memcached.org/ ● CDN : http://en.wikipedia.org/wiki/Content_delivery_network ● HTTP cache : – http://en.wikipedia.org/wiki/HTTP_accelerator – https://www.varnish-cache.org/ – http://nginx.net/ – http://www.squid-cache.org/

×