…de SysAdmin
Who am I
•

Clubic, Jeuxvideo.fr, Achetezfacile, Turbo, Deco,

•

Catchup TV (6Play.fr, IpTV)

•

M6Mobile By Orange

•

~ 20 sites...
Fort trafic ?
La forte charge
•

Saisonnalité
•
•

•

Emissions (Capital, UDPP)
Mercredi Matin, dimanche pluvieux

Reports d’audiences
•...
PHP Pour un SysAdmin
•

Single Threaded

•

php.ini

•

Né pour mourir

•

max memory size,
max_execution_time

•

Patch S...
Les Frameworks pour un SysAdmin
•

Adieu les perfs ? (versus du Plain)

•

Performances plus prévisibles

•

Accélère le d...
Notre Stack
Gérer un site à forte charge

• Automatiser
• Mesurer
• Tester
• Vérifier
• Tuner

Le sysadmin impose les contraintes qui v...
Automatiser
•

Lancement de VMs

•

La configuration

•

Déploiement du code

•

… et le rollback !

•

Puppet / Chef / MCo...
Mesurer et Alerter
•

~ 120K métriques @ M6Web

•

Statsd / Graphite / Cacti

•

Chefs de projets créent leur
dashboards (...
Exemple de graphite avec drawLineAsInfinite
Exemple de temps de génération des pages
Tester
•

Jenkins

•

VigoJS

•

WebPageTest privé

•

Jmeter / BlazeMeter

•

Siege / AB / Tsung

•

Replicate Proxy
Vérifier
•

Coke (le soft hein)

•

Logs (Systèmes, applicatifs)

•

Checklist avant mise en prod
•

Monitoring ?

•

Graph...
curl -I http://www.6play.fr/ -s |sort
!

Age: 141
Connection: keep-alive
Content-Length: 16397
Content-Type: text/html
Dat...
Tuner
•

Le mieux est l’ennemi du bien

•

Attention à l’optimisation prématurée !

•

Rigueur scientifique !

•

Hardware ...
Do’s and don’ts
Do’s
•

Prévoir le pire

•

K.I.S.S

•

Respecter les standards HTTP

•

Design REST de nos APIs

•

Utiliser les nombreux...
Don’ts
•

Soyons cool avec PHP
•

pas d’exec, system, mail, eval

•

pas de chemins en dur

•

Empêcher la mise en cache (...
if $request > 3ms { send_mail(); }
Threads Status

Max Connections 

(MySQL)

#lol
Redis Memory

Unsaved 

Changes

Pas de gestion des erreurs
Pas de monitoring applicatif
Pas de monitoring Redis
#wat #tri...
Questions
tech.m6web.fr
github.com/m6web/
@techM6web
baptiste.dupain@m6.fr
Vis ma vie de SysAdmin Forum PHP 2013
Vis ma vie de SysAdmin Forum PHP 2013
Vis ma vie de SysAdmin Forum PHP 2013
Vis ma vie de SysAdmin Forum PHP 2013
Vis ma vie de SysAdmin Forum PHP 2013
Prochain SlideShare
Chargement dans…5
×

Vis ma vie de SysAdmin Forum PHP 2013

6 628 vues

Publié le

Vis ma vie de SysAdmin Forum PHP 2013

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

Aucun téléchargement
Vues
Nombre de vues
6 628
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 759
Actions
Partages
0
Téléchargements
28
Commentaires
0
J’aime
6
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Vis ma vie de SysAdmin Forum PHP 2013

  1. 1. …de SysAdmin
  2. 2. Who am I
  3. 3. • Clubic, Jeuxvideo.fr, Achetezfacile, Turbo, Deco, • Catchup TV (6Play.fr, IpTV) • M6Mobile By Orange • ~ 20 sites, 14.7M VU, 50M Vidéos vues par mois • 40 Devs, 3 Root
  4. 4. Fort trafic ?
  5. 5. La forte charge • Saisonnalité • • • Emissions (Capital, UDPP) Mercredi Matin, dimanche pluvieux Reports d’audiences • Evénement de la chaine (Taig Khris) • Actualité
  6. 6. PHP Pour un SysAdmin • Single Threaded • php.ini • Né pour mourir • max memory size, max_execution_time • Patch Suhosin (< 5.4) • Gestion de la mémoire et garbage collector
  7. 7. Les Frameworks pour un SysAdmin • Adieu les perfs ? (versus du Plain) • Performances plus prévisibles • Accélère le développement • Favorise les bonnes pratiques et la sécurité • Une communauté, des librairies, de la doc • Plus complexe à déployer • Une recette versus un rsync
  8. 8. Notre Stack
  9. 9. Gérer un site à forte charge • Automatiser • Mesurer • Tester • Vérifier • Tuner Le sysadmin impose les contraintes qui vous permettront de tenir cette charge !
  10. 10. Automatiser • Lancement de VMs • La configuration • Déploiement du code • … et le rollback ! • Puppet / Chef / MCollective • Capistrano / Capify
  11. 11. Mesurer et Alerter • ~ 120K métriques @ M6Web • Statsd / Graphite / Cacti • Chefs de projets créent leur dashboards (!) • Codes HTTP, Temps SQL, Temps PHP, Conso CPU, Select, Trafic… • Temps de génération de pages • MAYDAY ! • Slow Logs, Ngrep
  12. 12. Exemple de graphite avec drawLineAsInfinite Exemple de temps de génération des pages
  13. 13. Tester • Jenkins • VigoJS • WebPageTest privé • Jmeter / BlazeMeter • Siege / AB / Tsung • Replicate Proxy
  14. 14. Vérifier • Coke (le soft hein) • Logs (Systèmes, applicatifs) • Checklist avant mise en prod • Monitoring ? • Graphite ? • Tests de charge ? • Rollback ? • Café ? • + 8000 compteurs sur l’infrastructure • Header HTTPs
  15. 15. curl -I http://www.6play.fr/ -s |sort ! Age: 141 Connection: keep-alive Content-Length: 16397 Content-Type: text/html Date: Mon, 18 Nov 2013 07:32:16 GMT HTTP/1.1 200 OK Server: Cobol Server 2.0 Vary: Accept-Encoding Via: 1.1 varnish X-Backend-Ip: 141.138.90.240 X-Backend-status: 200 X-Cache-Hits: 11 X-Cache-Host: m6w-cache2 X-Cache-IP: 2a01:a580:6:1972::59 X-Cache-Status: HIT X-Cache-ttl: 300.000 X-Origin: code X-Varnish: 3297899555 3297796790
  16. 16. Tuner • Le mieux est l’ennemi du bien • Attention à l’optimisation prématurée ! • Rigueur scientifique ! • Hardware (contrôleurs, CPU, réseau…) • Software (Kernel, SlowStart, I/O Scheduler, FileSystem etc…) • Software serveur • PHP (Mémoire, Pools FPM, MySQLnd) • Nginx / Apache / Varnish • MySQL sur FusionIO et SSD
  17. 17. Do’s and don’ts
  18. 18. Do’s • Prévoir le pire • K.I.S.S • Respecter les standards HTTP • Design REST de nos APIs • Utiliser les nombreux caches à notre disposition • Monitorer les crawls et l’usage des webservices • Soulager au maximum la BDD (Memcached, Redis, Sphinx) • Indexer (mais pas trop) • Grapher *tout* • Yellow CODE • Last Friday Talks
  19. 19. Don’ts • Soyons cool avec PHP • pas d’exec, system, mail, eval • pas de chemins en dur • Empêcher la mise en cache (Attention aux POST et now() ) • Eviter le cross-base et les fonctions dangereuses pour la réplication MySQL • Ne faire confiance à personne: • • • encapsuler avec des timeouts les inputs utilisateurs Les stats et les logs en bases
  20. 20. if $request > 3ms { send_mail(); }
  21. 21. Threads Status Max Connections 
 (MySQL) #lol
  22. 22. Redis Memory Unsaved 
 Changes Pas de gestion des erreurs Pas de monitoring applicatif Pas de monitoring Redis #wat #tristesse
  23. 23. Questions tech.m6web.fr github.com/m6web/ @techM6web baptiste.dupain@m6.fr

×