Etes vous prêts pour le succes ?

1 425 vues

Publié le

Publié dans : Technologie
1 commentaire
2 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
1 425
Sur SlideShare
0
Issues des intégrations
0
Intégrations
71
Actions
Partages
0
Téléchargements
12
Commentaires
1
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • L'utilisateur clique 1 fois toutes les sec 1sec = 1000 msec 1 clic = 2 connexions (limitation navigateur) => 1sec * 1000msec * 9cnx/2 = 4500 utilisateurs connectés (optimiste)
  • * worker_connections : 2048 / 2 connexions par browser / 20 timeout = 68 utilisateurs * keepalive_timeout : 65 est trop long, Nginx gère bien les connexions inutilisées
  • * always_populate_raw_post_data = ? * real_path_cache_size : par défaut = 16Kb
  • 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>

    ×