vis ma vie de sysadmin forum php 2013
Post on 28-Nov-2014
4.535 Views
Preview:
DESCRIPTION
TRANSCRIPT
…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
top related