is cool story - symfony live 2011
DESCRIPTION
Is Cool Story « 1 jeu, 1 framework, 3 mois, 4 devs, 8 millions de joueurs. »TRANSCRIPT
Is Cool Story
« 1 jeu, 1 framework, 3 mois, 4 devs, 8 millions de joueurs. »
Alexandre Rodière Bertrand Tornil
Weka Entertainment
● Jeux dans Facebook● LAMP● Forte charge● Rythme fonctionnel élevé
=> Symfony 1 + Framework Weka
Is Cool
● 2 ans de développement incrémental● Pas de framework, pas de MVC
Le Défi
● 1 jeu facebook en PHP « old school »● Entre 500.000 et 1.000.000 de VU/j● Entre 50 et 100 millions de PV/j● 1 milliard de points cool
=> La même chose sous symfony2
Les contraintes
● Debut le 15 novembre 2010
● Fin pour le sfLive2011
● Pas de coupure de l'application
● Maintien du rythme de sortie des fonctionnalités
Les atouts
● Habitudes de développement très agile
– 122 RC déployées– 87 Releases déployées
● Arrêt des applications FBML par Facebook
● Enthousiasme
● Deadline sfLive
Les atouts (bis)
– Weka IsCoolers● Rémi Janot, Pierre Tisserant, Antoine Bernier
– Sensio Sensei● Noël Guilbert
– Cloud SysAdmins● Vermeer Grange, Charles-Christian Croix, Fabien
Vaneenoo
– Leads Bienveillants● Alexandre Rodière, Bertrand Tornil
La stratégie
● Migration FBML → Iframe
– Effet tache d'huile– Double vhost
● Mise en oeuvre sur la plus petite page
● Greffe sur les demandes fonctionnelles
Les préparatifs
● Avant de pouvoir boostraper en sf2● La mise en place de l'infra (un double-vhost)
– réalisée le 30 novembre 2010● Architecture du code
– Bundles IsCool– Bundles plus génériques (SNS)– Bundles Externes (DBAL, partenaires...)
Les préparatifs (hatifs ?)
● L'authentification● Gros morceau, en fait... Oauth... (aura
nécéssité d'ajuster l'extensibilité du bundle d'authentification de sf2)
● Les premiers bundles maisons● Memcache● nosql● pinba
Dans les faits
● La schizophrénie du code (les 2 vhosts)● Toutes les classes cores, puis métiers doivent passer
au fur-et-à-mesure à la moulinette :
– Autoloader– Injectabilité
● Chasse aux statiques– Création des Bundles
● Configuration du DIC
On s'arrange avec l'autoloader
● Création d'un ensemble cohérent de classes pour l'autoloader
La chasse aux statiques
Sachant que le code doit pouvoir continuer de fonctionner dans les 2 contextes
La chasse (d'eau ?)
Au final... c'est bon, mangez-en
● Accepter d'adopter une nouvelle philosophie● Avant, par exemple :
● On implémentait une classe itérateur. point.
● En sf2 :● On cherche la généricité pour rendre injectable● induit de bonnes pratiques, à savoir viser la
généricité (on écrit l'itérateur générique), puis on injecte la spécificité
Des chiffres !
● Le 22 décembre 2010● Passage de la page « invit »
Des chiffres !
● Le 22 décembre 2010● Passage de la page invit
– ~500 hit/jours– Mais les couches basses sont là
● Authentification● Localisation● Pinba● Mysql via dbal● Redis● memcache
Ensuite ?
● Le 24 janvier 2011● Passage des webservices partenaires
– 30000-40000 hits/jours– Nouvelles couches métiers
Un peu de charge...
● Le 10 février 2011● Passage de myKiwi sur la home
Un peu de charge...
● Le 10 février 2011● Passage de myKiwi sur la home
– 250 à 1500 hits / sec– L'objet player est chargé + les grades– Le bootstrap sf2 tient la charge. Les
chiffres nous ont même surpris :● Ancien vhost : 600ms / req● Nouveau vhost en sf2 : 80ms / req● ?
Certes...
● Le 24 février● Passage de la page «Ma collection»● 57 familles de 7 élements
Certes... (itudes ?)
● Le 24 février● Passage de la page «Ma collection»
– ~10 hits/sec– Classes métiers les plus complexes,
itérateurs et caches d'itérateurs objets composés de différents storages
– Avant : 792ms– Après : 468ms … 40% de mieux
Ok, and now ??
● Le 2 mars 2011● Passage de la dernière feature● Développement entièrement sous sf2● Front HTML5● La vache Kiwi...
● Le 2 mars 2011 : la vache Kiwi...
● ...et ca tient :)
Ok, and now ??
L'heure du bilan
● Le cycle fonctionnel est lancé.● Les performances suivent (- 40%)● Nous pouvons nous préoccuper de notre métier
● Le jeu● Nous pouvons maintenant nous attaquer aux
migrations sf1 → sf2 des autres jeux
Questions
?Bertrand Tornil
Twitter : @bobuss
Alexandre Rodière
Twitter : @alx_rodiere