symfony à la télé @omansour http://tech.m6web.fr
Oracle 7 PHP 3
symfony 0.6.3 wolfenstein 3D
Responsive Design offres digitales et interactives du Groupe M6
~20 sites : Clubic – JeuxVideo.fr – AchetezFacile
6play - 60M Vidéos Vues / mois
Catchup + Live + socialTV
« moins de 200 rps t’es pas sérieux »
« on est pas un centre de R&D »
http://tech.m6web.fr/monitoring-applicatif-pourquoi-et-comment/
http://tech.m6web.fr/vis-ma-vie-sysadmin-forumphp.html
Responsive Design $nbDevs < $nbProjects $nbDevs < $nbTechnos
306 repo GIT
150 domaines actifs
PHP 5.2 - 5.3 – 5.4 – 5.5
MySQL 5.1 – 5.5 / innodb - myIsam
Redis – Memcached - Varnish
RabbitMQ – ZeroMQ
NodeJS – Perl - shell
we all write bad code
http://tech.m6web.fr/la-poo-canada-dry/
Responsive Design symfony-m6-editionpour en finir avec pomme c / pomme v
Faciliter la création des projets
Diminuer Supprimer « le coût » de la qualité
composer create-project m6/symfony-m6-edition .
--repository-url=http://satis/ -s dev
« Qui veut faire quelque chose trouve un moyen.
Qui ne veut rien faire trouve une excuse. »
Responsive Design transitionsf2 first !
Pas de régressions
Chaque projets est indépendant
Séparer le legacy via du SOA
Intégrer les contrôleurs sf2 en 1er dans la stack
Responsive Design + = (depuis 18 mois)
• HTTP 1.1 / config des contrôleurs
• $> php app/console router:debug • Service Container
• Bundles
• Plein de gens géniaux autour
Responsive Design OSS spirit 117 bundles et composants
http://tech.m6web.fr/composer-installation-without-github.html
Responsive Design Bundleshttps://github.com/M6Web/
• Redis + RedisBundle + RedisMock + cache-extra
• Statsd + StatsdBundle
• DomainUserBundle
• FirewallBundle (ip filtering)
• LogBridgeBundle …
Responsive Design Statsdhttp://tech.m6web.fr/how-we-use-statsd/
• « Gardez les yeux ouverts sur la prod »
• Consistent hashing
• Bind sur des évènements
• Config basique dans chaque projet
« fait le job »
Responsive Design config_prod.yml
Responsive Design LogBridgeBundlehttps://github.com/M6Web/LogBridgeBundle
• Log les requests / responses
• compatible monolog
Responsive Design DomainUserBundlehttp://tech.m6web.fr/api-a-consommer-avec-moderation/
• Customise ton API par sous domaine
• routing
• cache
• parameters
app/config/users/raoul.yml
http://raoul.monapi.fr
Responsive Design Testingcomme tout le monde
• Tests Atoum => OK – ~20K assertions par projet • Unitaire
• Fonctionnel => toutes les routes testées • Behat => trop lent ?
Responsive Design “Et c’est quoi l’IP de la base de données ?”
• config_prod.yml:
imports:
- { resource: /srv/resource/db/doctrine/
image.yml }
« PHP est fait pour tout et pour tous »
Rasmus Lerdorf (Forum PHP 2012)
« bof » Olivier Mansour (Symfony Live 2014)
varnish nginx nginx + lua nodejs symfony2
Perf (rps/server)
Responsive Design perfs != speed“en gros”
Mais en gros : • varnish : 1ms • ngnix : 4ms • nodejs : 10ms • Sf2 : qq centaines de ms?!
http://tech.m6web.fr/refonte-de-notre-systeme-de-vote/
varnish nginx nginx + lua nodejs symfony2
nb lignes de code (sans péter un câble)
300
30 000
30
https://github.com/newsapps/beeswithmachineguns
$> siege --concurrent=100 -b --time=30S -q <URL>
http://tech.m6web.fr/benchmarking-websockets-avec-nodejs/
https://github.com/newsapps/beeswithmachineguns
$> siege --concurrent=100 -b --time=30S -q <URL>
http://tech.m6web.fr/benchmarking-websockets-avec-nodejs/
Responsive Design Architecture for noob
• Amortissez tout sur un cache / sf2 au bon endroit
• Ne vous couplez pas à une archi non scalable
• 1 gros appel pas performant versus n … et la
webperf ? • « Mieux vaut être prudent que désolé »
Responsive Design RESTin peace
• « c’est pas REST » => OSEF
• Doit intégrer vos contraintes de charges
/v1/contents/12?revision=3
Learn the rules like a pro so you can break them like an artist. — Pablo Picasso
BEFORE Mobile devices
Live broadcast events
contents
Bmeline calculaBon
Synchronised events
AFTER Mobile devices
Live broadcast events
contents
Bmeline calculaBon
Synchronised
events
Timeline(s)
contents
PHP 5.4 + SF2 + MySQL
« Difficile à voir. Toujours en mouvement est
l'avenir. »
Maître Yoda
hOp://ask.fm/omansour_