Vis ma vie de SysAdmin Forum PHP 2013

Post on 28-Nov-2014

4.534 views 4 download

description

Vis ma vie de SysAdmin Forum PHP 2013

Transcript of Vis ma vie de SysAdmin Forum PHP 2013

…de SysAdmin

Who am I

• 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

Fort trafic ?

La forte charge• Saisonnalité

• Emissions (Capital, UDPP)

• Mercredi Matin, dimanche pluvieux

• Reports d’audiences

• Evénement de la chaine (Taig Khris)

• Actualité

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

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

Notre Stack

Gérer un site à forte charge

• Automatiser

• Mesurer

• Tester

• Vérifier

• Tuner

Le sysadmin impose les contraintes qui vous permettront de tenir cette charge !

Automatiser

• Lancement de VMs

• La configuration

• Déploiement du code

• … et le rollback !

• Puppet / Chef / MCollective

• Capistrano / Capify

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

Exemple de graphite avec drawLineAsInfiniteExemple 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 ?

• Graphite ?

• Tests de charge ?

• Rollback ?

• Café ?

• + 8000 compteurs sur l’infrastructure

• Header HTTPs

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

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

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 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

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

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 #tristesse

tech.m6web.fr

github.com/m6web/

@techM6web

baptiste.dupain@m6.fr

Questions