Download - Symfony à la télé

Transcript
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_