Upload
olivier-mansour
View
4.939
Download
9
Embed Size (px)
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.
Citation preview
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_