Hébergement et scalabilité des applications PHP, par Olivier Duquesne et Christian Lefebvre

Embed Size (px)

DESCRIPTION

Présentation d'Olivier Duquesne et Christian Lefebvre pour le RDV AFUP Lille du 31 mai 2011 sur la montée en charge avec PHP

Citation preview

  • 1. Hbergement et scalabilit des applications PHP Olivier Duquesne & Christian Lefebvre (CLX / L'Autre Net / Atos Worldline) [email_address]

2. Introduction

  • Une vision pluridisciplinaire
  • La thorie avec le Club Linux Nord-Pas de Calais

3. La pratique avec L'Autre Net 4. L'expertise avec Atos Worldline 5. Club Linux Nord-Pas de Calais

  • Association loi 1901 cre en 1999

6. 30 bnvoles et prs de 300 sympathisants 7. La premire de la rgion 8. Un GULL 9. Animation de rseau

  • Les GULLs amis ou partenaires

10. Le relais AFUL 11. La convention avec l'UFJ Les projets de l'association 12. Logiciel Libre

  • Libert d'excuter

13. Libert d'tudier 14. Libert de copier et redistribuer 15. Libert de modifier 16. Plusieurs licences possibles

  • GPL, BSD, LGPL, Cecill, Apache,PHP

17. Pourquoi PHP ?

  • Logiciel Libre

18. Gratuit 19. Forte communaut d'utilisateurs et dveloppeurs : stabilit et scurit 20. Facile comprendre et utiliser 21. Portable : Apache / ligthttpd / IIs / iPlanet / ... / Linux / Windows / HP-UX / BSD / ... 22. Mode web ou CGI 23. Un standard du web ? 24. Comment ?

  • Chez soit : LAMP, EasyPHP

25. Chez un hbergeur "gratuit" : Free.fr , PagesPerso, ... 26. Chez un hbergeur "associatif" : L'Autre Net, TuxFamily, APINC, Marsnet, ... 27. Chez un hbergeur "commercial" : OVH, Nexen, Atos Worldline, AlterWay, ... 28. L'Autre Net

  • Association loi 1901 cre en 2001

29. Suite la fermeture d'Altern 30. Hbergeur Associatif Autogr Non-Marchand 31. Bnvoles (root et collge solidaire) 32. Espace de libert 33. Mutualisation de plateforme 34. AlternB

  • En 2001 : un serveur 1U/PIII/500M : une centaine de comptes

35. 100 Mo (web + mail + listes + bdd) 36. RedHat bricole / Apache / PHP2 / Qmail / ... 37. Usine gaz !! Temps de rponse dplorables, une affaire de geek 38. Un public novice et militant (associations en tous genres, pages perso) 39. AlternC (1)

  • En 2011, L'Autre Net c'est 10 serveurs (biXeon ou v210) , 2 serveurs de fichiers, 1 Lan-to-Lan vers Gitoyen Fibre 1Gb, monitoring externe, accs distant ....

40. 1200 comptes, 2500 noms de domaines, des listes de diffusions, statistiques, mail, webmail, machines la demande ... 41. Un transit de 5Mbs 42. Debian, Apache, PHP5, Mailman, Awstats, Postfix, Courier-*, vServer, OSPF, IPVS, .... 43. AlternC (2)

  • Un outil simple pour
  • les administrateurs (root)

44. les utilisateurs (bnvoles) 45. les usagers (membres, toujours aussi novices) Pour tout faire : DNS, BDD, dition, Web, ... 46. Logiciel Libre maintenu par L'Autre Net, Globenet, Octopuce, Koumbit 47. Packag (Debian), mais peu scalable .... 48. AlternC (3) 49. Scuriser les donnes (1)

  • Depuis PHP3, le cloisonnement des donnes est permis grce au safe_mode
  • contrainte pour l'utilisateur (de la ncessit de bien crire)

50. contrainte pour l'administrateur (bien actualiser les rpertoires autoriss lors de la cration de comptes) 51. safe_mode_gid : chaque utilisateur AlternC a un GID unix pour cloisonner l'accs aux donnes et positionner des quotas disques 52. Scuriser les donnes (2)

  • Plusieurs machines frontales (loadbalancing)

53. Un stockage unique (NFSv3) en RAID5 54. Sauvegardes incrmentales et compltes

  • des donnes

55. des bases de donnes Protections des machines

  • iptables, rootkit hunter, fail2ban, logwatch, ...

56. memory_limit & co 57. Les difficults

  • Une instance apache : des milliers de vhosts

58. Un process PHP peut ralentir l'ensemble de la plateforme. 59. Les utilisateurs codent ce qu'ils veulent 60. La plupart du temps, ils n'y connaissent rien et rcuprent des applications toutes faites

  • SPIP, Joomla, phpBB,Wordpress, ...

61. Problmes courants

  • "Oups, j'ai tout perdu" => restauration

62. "Je ne peux plus crire" => full / quota 63. "a marche plus" => cache, DNS, restaure 64. "a rame" => chez moi a marche (tm)

  • CPU ? RAM ? I/Owait ? In/OutRx ?

65. MaxServer Apache 66. Max Established Sockets 67. Slow Query 68. Tuning Systme (1)

  • Tuning Apache
  • Augmenter le nombre de threads apache : mode prefok : 1 thread par connexion

69. Attention, un thread apache+PHP arrive facilement 50 Mo en RSS 70. Diminuer le keepalive et timeout (bonne ide si beaucoup de RAM) 71. Utilisation de mod_bandwith : quota BP Tuning PHP lger finalement ... 72. Tuning Systme (2)

  • Tuning OS
  • Utilisation de eAccelerator abandonn (dgradation sur de nombreux SPIP)

73. Utilisation de memcached : problmes de session (Joomla, Moodle) 74. Russites

  • Aide de la communaut SPIP
  • 700 SPIP dploys, debug sur des pconnect() en 2006

75. hbergement de spip-contrib.net (et son dpart transparent en 2009 ...) 76. contributions plugins SPIP-Mutu, SPIPTeX, SPIPOrtho Utilisation de memcached 77. Aides diverses : patch Drupal, Dokuwiki, Moodle 78. 79. Atos Worldline

  • Leader dans les transactions lectroniques

80. Spcialis dans les paiements lectroniques, les eCS et les marchs financiers. 81. Un chiffre daffaires de 867 millions deuros, emploie plus de 5 400 personnes en Europe et en Inde et ralise plus de 15 Milliards de transactions par an. 82. Les chiffres en 2008

  • 250 millions de SMS

83. 45 Mds demails changs par 23 M bl 84. 2 milliards de transactions dacquisition 85. 21 millions doprations de carte de crdit 86. 100 millions de paiements internet 87. 36 millions de cartes de fidlit 88. 50 milliards de pages vues 89. Offres commerciales

  • Offre d'hbergement web mutualis
  • en silo Front/Middle/Back

90. autour des technologies J2EE 91. framework issus des labos R&D Offre d'hbergement ddi

  • la demande : J2EE, PHP, Ruby, ...

92. en silo Front/Middle/Back (ou pas) 93. flexibilit Business Unit par mtier 94. Scalabilit

  • Un matriel homogne

95. Un OS homogne (Atos LFS)

  • flexibilit - packag

96. scurit - expertise Des outils d'administration

  • livtools - servicetools - referencetools

Rpartition de charge

  • applicative, matrielle, silos clnables

97. Cas concret : e-Commerce

  • Une plateforme Magento

98. Serveur Web matris

  • Apache 2.2.23 : le moins de modules possibles, mode prefork

99. PHP 5.2.5 : les options minimales, modules externaliss, sans debug Cluster BDD :

  • MySQL : Heartbeat en mode failover

tat : 10 minutes de disponibilit en benchmark 100. Optimisations Systme (Web)

  • Pile TCP:tcp_keepalive_time ettcp_syncookie

101. Changement ioscheduler: [deadline] cfq 102. Dploiement de machines supplmentaires

  • OpenQRM : clnage de machines Xen

103. Templates de configurations Mise en cache PHP : Alternative PHP Cache (APC) :cache opcode 104. Mise en cache SQL : memcached : 5 10% des hits encache 105. Optimisations Systme (HTTP)

  • Worldline Booster : mise en cache HTTP
  • datacenter forte connectivit : latence surveiller

106. Technologie propritaire + xcache 107. Administration via un Web ddi (Tomcat) Varnish : mise en cache HTTP

  • Macros en ESI

108. Administration via un Web ddi (Erlang) 109. Temps de rponse divis par 3 ! 110. Optimisations Systme (NFS)

  • Jumbo Frame(MTU=9000) sur client, serveur, switch

111. TCP, bg, hard, timeo=300: garder la ligne 112. noatime: force la dsactivation de l'accounting 113. sunrpc.tcp_slot_table_entries=128: table demontage 114. rsize=32768, wsize=32768: bits en read et write 115. actimeo=0: dsactivation du cache NFS 116. CONFIG_NFS_DIRECTIO=y(kernel)

  • innodb_flush_logsat_trx_commit=1 (MySQL)

117. innodb_flush_methods = O_DIRECT(MySQL) minra = off(Data OnTapp) 118. Optimisations Base de Donnes

  • Changement de version de MySQL
  • 5.0.46 au profit de 5.1.46 Enterprise

119. Atos est Gold Partner MySQL Rpartition via Heartbeat2

  • Outil de livraison de configuration

120. Industrialisation, homognisation 121. Sparation critures / lectures via Rplication Tuning MySQL

  • Optimisations requtes Magento

122. Optimisations query_cache_size 123. Compression: slave_compressed_protocol=1 124. Autre cas concret: Portail sportif

  • But: refonte intgrale d'un site li au sport

125. Refonte graphique + multilingue

  • Revue de l'ergonomie du site d'admin

126. Dialogue avec le nouveau SI du client 127. Module de statistiques sportives Contrainte: tenir les pics de charge pendant les vnements sportifs 128. Solution retenue

  • Architecture LAMP

129. Framework Symfony 1.4 130. ORM Doctrine 131. Plusieurs plugins:

  • Standards: Gestion des droits, I18N

132. Maison: Surcharge des donnes, traabilit Pas mal de batchs (imports, prtraitements) 133. Cache applicatif (memcached) 134. Droulement des dveloppements

  • Plusieurs centaines d'HJ

135. Pas mal de mouvements dans les specs 136. Quelques drapages qui empchent de bencher suffisamment tt 137. L'idal pour avoir de mauvaises surprises en fin de projet ... 138. Les ORM c'est cool

  • On dcrit ses donnes (via DBDesigner, en YML, directement en SQL ...)

139. Doctrine gnre les classes de mapping et les tables SQL 140. Symfony gnre les classes de CRUD et d'admin En thorie, y'a plus qu' affiner les dtails 141. Mais c'est gourmand

  • 84 tables et 91 sous tables(gnres par lesplugins)

142. 568 classes auto gnres et 337 surcharges 143. 2Mo de code rien que pour le 'M' de MVC ... 144. Les ORM c'est cool(suite) Les classes gnres emballent les accs aux donnes Doctrine::getTable('Bidule')->findOneByMachin($machin)- >getMaColonne() Mais a masque toute la complexit: La 1re version de la homepage gnrait plus de 1000requtes BDD! Et de belles horreurs bien caches: Doctrine::getTable('Bidule')->findByXyz()->getFirst() Le select retourne ventuellement des centaines de lignes,que doctrine parse pour instancier autant d'objets qu'ilpeuple un par un pour finalement attraper le premier et jetertout le reste 145. Le CRUD gnr c'est cool

  • Pour chaque table, Symfony gnre des classes de CRUD

146. Ce code contient des templates tiroir, en quantit 147. Un sous-sous-template peut accder un champ induit qui entrane une requte BDD 148. Mais a fait des trucs louches

  • L'I18N par exemple provoque une requte sur une sous table, pour chaque itration

149. On se retrouve avec 1+N requtes au lieu d'une seule 150. Il faut donc adapter la config des admin generators pour forcer des join 151. PHP, a rame

  • Ds qu'il y a des algo un peu tordus, on explose les temps d'excution

152. Le calcul des statistiques ncessite des calculs assez lourds, dans les postSave Solution en 2 tapes:

  • Systme producteur/consommateur pour sortir les calculs de l'admin

153. Recodage des algos en procdures stockes (sauvage, mais efficace) 154. Le cache c'est cool

  • Le cache de template permet d'allger normment la charge

155. Les TTL permettent de grer facilement le renouvellement des donnes caches Mais pendant un live, il faut que les infos arrivent sur le site ds rception Donc dcache explicite, mais le plus fin possible(si on dcache trop large en pleine charge, on explosetout) a implique des rgles trs complexes 156. Memcached c'est cool

  • Permet de stocker des lments en cache

157. Tous les fronts peuvent accder au mme cache et le dcache peut tre dclench de partout 158. On peut stocker des milliers d'lments sans pertes de perfs 159. Mais le protocole ne permet pas de delete par pattern 160. Mais symfony rserve des surprises Alors comment symfony implmente la mthoderemovePattern() ? Une entre meta stocke la liste des cls de toutes les entres(donc potentiellement des milliers) foreach( $this ->getCacheInfo()as$key ){ if(preg_match( $regexp ,$key )) { $this ->remove(substr( $key , strlen( $this ->getOption( 'prefix' )))); } } Et paf le php ... 161. Et maintenant, qu'est-ce qu'on fait?

  • Sparez en plugins qu'on active seulement dans lesapplis ncessaires (pour viter de charger du codeinutile)

162. vitez de gnrer du code inutile (dansschema.yml )symfony: { form: false, filter:false } 163. Testez et benchez ds le dbut, comptez les requtes etanalysez les pour dtecter les appels cachs avantqu'ils se fondent dans la masse 164. Prenez en compte le cache ds le dbut 165. N'ayez confiance en personne, mme pas dans lesproduits les plus rputs :-) 166. Quelques outils utiles

  • MemCached, CouchDB et autres NoSql

167. Varnish (ESI notamment) 168. APC (pour l'opcode, mais aussi le cache local) 169. Procdures stockes (un curseur va plus vitequ'une boucle PHP) 170. Symfony Web Debug Toolbar (logs et dtails sur lesrequtes SQL) 171. netstat, ps, gdb et autres outils de diagnostic carles soucis n'apparaissent souvent qu'en vraiecharge 172. Jmeter et autres outils de bench 173. Xdebug (profiling) 174. Ressources

  • Qui sommes nous?
  • Club Linux Nord-Pas de Calais:http://clx.asso.fr

175. L'Autre Net:http://lautre.net 176. Atos Worldline:http://www.atosworldline.fr Les outils

  • Varnish:http://www.varnish-cache.org

177. Symfony:http://www.symfony-project.org 178. Doctrine:http://www.doctrine-project.org 179. Heartbeat:http://www.linux-ha.org 180. Questions?

  • Olivier Duquesne:[email_address]

181. Christian Lefebvre:[email_address] 182. CLX:[email_address] 183. L'Autre Net:[email_address]