Symfony à la télé

Post on 27-Jun-2015

4.939 views 9 download

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é

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_