Symfony à la télé

44
symfony à la télé @omansour http://tech.m6web.fr

description

Retour d’expérience sur l’intégration de symfony2 chez M6Web M6Web a opéré une transition de Java vers PHP il y a de nombreuses années mais a commencé a réaliser des applications Symfony2 depuis 18 mois. Nous verrons ensemble les différentes étapes qui ont été franchies et quelles stratégies ont été adoptées pour opérer cette transition. Comment M6Web intègre le code legacy à Symfony2 ? Les bundles et librairies que nous avons développés pour adapter le socle SF2 à nos besoins et à nos contraintes d’exploitation. Comment le code est déployé dans notre data-center ou sur AWS. Ce que le framework a changé dans l’organisation des équipes. Et enfin, sur quels critères nous choisissons de construire une application avec Symfony2 ou une autre technologie. M6Web est une filiale à 100% de M6, en charge des offres digitales et interactives du groupe.

Transcript of Symfony à la télé

Page 1: Symfony à la télé

symfony à la télé @omansour http://tech.m6web.fr

Page 2: Symfony à la télé

Oracle 7 PHP 3

symfony 0.6.3 wolfenstein 3D

Page 3: Symfony à la télé

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 »

Page 4: Symfony à la télé

http://tech.m6web.fr/monitoring-applicatif-pourquoi-et-comment/

Page 5: Symfony à la télé
Page 6: Symfony à la télé

http://tech.m6web.fr/vis-ma-vie-sysadmin-forumphp.html

Page 7: Symfony à la télé

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

Page 8: Symfony à la télé
Page 9: Symfony à la télé

we all write bad code

Page 10: Symfony à la télé
Page 11: Symfony à la télé
Page 12: Symfony à la télé

http://tech.m6web.fr/la-poo-canada-dry/

Page 13: Symfony à la télé

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

Page 14: Symfony à la télé

«  Qui veut faire quelque chose trouve un moyen.

Qui ne veut rien faire trouve une excuse. »

Page 15: Symfony à la télé

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

Page 16: Symfony à la télé

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

Page 17: Symfony à la télé
Page 18: Symfony à la télé
Page 19: Symfony à la télé

Responsive Design OSS spirit 117 bundles et composants

Page 20: Symfony à la télé

http://tech.m6web.fr/composer-installation-without-github.html

Page 21: Symfony à la télé

Responsive Design Bundleshttps://github.com/M6Web/

•  Redis + RedisBundle + RedisMock + cache-extra

•  Statsd + StatsdBundle

•  DomainUserBundle

•  FirewallBundle (ip filtering)

•  LogBridgeBundle …

Page 22: Symfony à la télé

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 »

Page 23: Symfony à la télé

Responsive Design config_prod.yml

Page 24: Symfony à la télé

Responsive Design LogBridgeBundlehttps://github.com/M6Web/LogBridgeBundle

•  Log les requests / responses

•  compatible monolog

Page 25: Symfony à la télé
Page 26: Symfony à la télé

Responsive Design DomainUserBundlehttp://tech.m6web.fr/api-a-consommer-avec-moderation/

•  Customise ton API par sous domaine

•  routing

•  cache

•  parameters

Page 27: Symfony à la télé

app/config/users/raoul.yml

http://raoul.monapi.fr

Page 28: Symfony à la télé

Responsive Design Testingcomme tout le monde

•  Tests Atoum => OK – ~20K assertions par projet •  Unitaire

•  Fonctionnel => toutes les routes testées •  Behat => trop lent ?

Page 29: Symfony à la télé

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 }

Page 30: Symfony à la télé

« PHP est fait pour tout et pour tous »

Rasmus Lerdorf (Forum PHP 2012)

Page 31: Symfony à la télé

« bof » Olivier Mansour (Symfony Live 2014)

Page 32: Symfony à la télé

varnish nginx nginx + lua nodejs symfony2

Perf  (rps/server)  

Page 33: Symfony à la télé

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/

Page 34: Symfony à la télé

varnish nginx nginx + lua nodejs symfony2

nb lignes de code (sans péter un câble)

300  

30  000  

30  

Page 35: Symfony à la télé

https://github.com/newsapps/beeswithmachineguns

$> siege --concurrent=100 -b --time=30S -q <URL>

http://tech.m6web.fr/benchmarking-websockets-avec-nodejs/

Page 36: Symfony à la télé

https://github.com/newsapps/beeswithmachineguns

$> siege --concurrent=100 -b --time=30S -q <URL>

http://tech.m6web.fr/benchmarking-websockets-avec-nodejs/

Page 37: Symfony à la télé

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

Page 38: Symfony à la télé

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

Page 39: Symfony à la télé

BEFORE Mobile  devices  

Live  broadcast  events  

contents  

Bmeline  calculaBon  

Synchronised  events  

Page 40: Symfony à la télé

AFTER Mobile  devices  

Live  broadcast  events  

contents  

Bmeline  calculaBon  

Synchronised  

events  

Timeline(s)    

contents  

PHP  5.4  +  SF2  +  MySQL  

Page 41: Symfony à la télé
Page 42: Symfony à la télé
Page 43: Symfony à la télé

« Difficile à voir. Toujours en mouvement est

l'avenir. »

Maître Yoda

Page 44: Symfony à la télé

hOp://ask.fm/omansour_