Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Etes vous prêts pour le succes ?

1 497 vues

Publié le

Publié dans : Technologie

Etes vous prêts pour le succes ?

  1. 1. êtes-vous prêts pour le succès ?
  2. 2. Huh !? Qui ça ? Steven VAN POECK autodidacte, 12 ans de PHP, entre autres stevenvanpoeck http://joind.in/4352
  3. 3. should i stay or should i go* ? * the clash, 1981
  4. 4. le début
  5. 5. quelques utilisateurs Coût : Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49 Performance : Disponibilité :
  6. 6. Resp time # requests # Concurrent requests Max connexions simultanées : 9 ~4 500 utilisateurs
  7. 7. un peu plus d'utilisateurs Coût : Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49 Performance : Disponibilité :
  8. 8. un peu plus d'utilisateurs Apache 2.2.16 + mod PHP 5.3.3 + MySQL 5.1.49 Coût : Performance : Disponibilité :
  9. 9. <ul><li>solutions </li><ul><li>utilisez les dernières versions stables des briques logicielles
  10. 10. distribution de charges : séparation serveur web / db
  11. 11. côté disponibilité : FastCGI pour PHP
  12. 12. côté ressources : nginx
  13. 13. tuning serveur Web (Nginx) </li><ul><li>worker_processes -> 1 par CPU mais plus de 4 est inutile
  14. 14. worker_connections -> 2048
  15. 15. keepalive_timeout -> entre 10 et 20
  16. 16. access_logs off -> réduction I/O (utilisez Google Analytics pour stats)
  17. 17. error_log <LOGFILE> error|crit -> réduction I/O (désactivez avec error_log /dev/null crit) </li></ul></ul></ul>
  18. 18. <ul><li>solutions (suite) </li><ul><li>tuning PHP </li><ul><li>cache op-code PHP (APC, eAccelerator, Zend Server)
  19. 19. utilisez la dernière version majeure stable !
  20. 20. template caching (ex : Smarty)
  21. 21. compilation « maison » sans extensions inutilisées
  22. 22. always_populate_raw_post_data = Off (utilisez php://input)
  23. 23. max_execution_time -> le plus petit possible
  24. 24. memory_limit -> adapté à vos scripts
  25. 25. realpath_cache_size -> plus si beaucoup de fichiers
  26. 26. realpath_cache_ttl -> le plus élevé possible
  27. 27. enlever Suhosin patch </li></ul></ul></ul>
  28. 28. un peu plus d'utilisateurs MySQL 5.5.16 Nginx 1.0.8 + FastCGI PHP 5.3.8 Coût : Performance : Disponibilité :
  29. 29. # requests Resp time # Concurrent requests Max connexions simultanées : 27 ~13 000 utilisateurs
  30. 30. encore plus d'utilisateurs MySQL 5.5.16 Nginx 1.0.8 + FastCGI PHP 5.3.8 Coût : Performance : Disponibilité :
  31. 31. encore plus d'utilisateurs Coût : Performance : Disponibilité :
  32. 32. <ul><li>solutions </li><ul><li>ajout de RAM sur le serveur MySQL
  33. 33. tuning MySQL </li><ul><li>utilisez InnoDB (rowlock)
  34. 34. connection_timeout -> le plus bas possible
  35. 35. skip_name_resolve = 1 -> réduction appels réseau
  36. 36. log = /dev/null -> réduction I/O
  37. 37. slow_query_log = 1 -> surveillance </li></ul><li>cache résultats brutes des requêtes </li><ul><li>solution ad-hoc dans le code
  38. 38. extension AdoDb + memcache </li></ul><li>optimisation du code </li><ul><li>exit(ORM);
  39. 39. traque et élimination des requêtes dans des boucles </li></ul></ul></ul>
  40. 40. 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 }
  41. 41. encore plus d'utilisateurs memcache Coût : Performance : Disponibilité :
  42. 42. # requests Resp time # Concurrent requests Max connexions simultanées : 45 ~22 000 utilisateurs
  43. 43. toujours plus d'utilisateurs Coût : Performance : Disponibilité :
  44. 44. toujours plus d'utilisateurs Coût : Performance : Disponibilité :
  45. 45. <ul><li>solutions </li><ul><li>ajout de serveurs frontaux
  46. 46. load balancer
  47. 47. sharding pour la base de données
  48. 48. failover pour les MySQL </li></ul></ul>
  49. 49. toujours plus d'utilisateurs sharding Load Balancer Coût : Performance : Disponibilité : failover 1 3 2 1 3 2
  50. 50. # requests Resp time # Concurrent requests Max connexions simultanées : 110 ~50 000 utilisateurs
  51. 51. le succès est au rendez-vous ! Coût : Performance : Disponibilité : 1 3 2 1 3 2
  52. 52. le succès est au rendez-vous ! Coût : Performance : Disponibilité : 1 3 2 1 3 2
  53. 53. <ul><li>solutions </li><ul><li>perfomances & disponibilité </li><ul><li>HTTP caching (Varnish, Squid, Nginx…)
  54. 54. content distribution network (CDN) </li></ul></ul></ul>
  55. 55. le succès est au rendez-vous ! CDN HTTP cache Coût : Performance : Disponibilité : 1 3 2 1 3 2
  56. 56. # requests Resp time # Concurrent requests Max connexions simultanées : 175 ~85 000 utilisateurs
  57. 57. mais encore ?
  58. 58. <ul><li>noSQL </li><ul><li>MongoDb : http://www.mongodb.org/
  59. 59. CouchDb : http://couchdb.apache.org/
  60. 60. CouchBase : http://www.couchbase.org/
  61. 61. ... </li></ul><li>ze nuage (Amazon, Azure, Eucalyptus, Google apps...) </li></ul>
  62. 62. questions ?
  63. 63. <ul><li>Références: </li><ul><li>Dernières versions briques logicielles </li><ul><li>Debian : http://dotdeb.org
  64. 64. PHP : http://www.php.net </li></ul><li>Tuning PHP / Nginx : </li><ul><li>http://blog.martinfjordvald.com/2011/04/optimizing-nginx-for-high-traffic-loads/
  65. 65. http://php.net/manual/en/ini.core.php
  66. 66. http://talks.php.net/show/perf_tunning
  67. 67. http://phplens.com/lens/adodb/docs-adodb.htm#memcache </li></ul><li>Load balancing : http://en.wikipedia.org/wiki/Load_balancing_(computing)
  68. 68. Optimisation MySQL : http://www.slideshare.net/ligaya/dpc-tutorial
  69. 69. Sharding : http://en.wikipedia.org/wiki/Shard_(database_architecture)
  70. 70. Failover : http://en.wikipedia.org/wiki/Failover
  71. 71. Memcached : http://memcached.org/
  72. 72. CDN : http://en.wikipedia.org/wiki/Content_delivery_network
  73. 73. HTTP cache : </li><ul><li>http://en.wikipedia.org/wiki/HTTP_accelerator
  74. 74. https://www.varnish-cache.org/
  75. 75. http://nginx.net/
  76. 76. http://www.squid-cache.org/ </li></ul></ul></ul>

×