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

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

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

https://github.com/M6Web/ 
•  Redis + RedisBundle + RedisMock + cache-extra
•  Statsd + StatsdBundle
•  DomainUserBundle
•  FirewallBundle (ip filtering)
•  LogBridgeBundle …
Responsive Design
Statsd

http://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
LogBridgeBundle

https://github.com/M6Web/LogBridgeBundle
•  Log les requests / responses
•  compatible monolog
Responsive Design
DomainUserBundle

http://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
Testing

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

in 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	
  
Synchronis
ed	
  events	
  
AFTER
Mobile	
  
devices	
  
Live	
  
broadcast	
  
events	
  
contents	
  
Bmeline	
  calculaBon	
  
Synchroni
sed	
  
events	
  
Timeline(s)	
  	
  
contents	
  
PHP	
  5.4	
  +	
  SF2	
  +	
  MySQL	
  
« Difficile à voir. Toujours
en mouvement est
l'avenir. »




Maître Yoda
hOp://ask.fm/omansour_	
  	
  

Symfony à la télé