MHA : MySQL haute dispo, chez Viadeo par Olivier Dasini
Is Cool Story - Symfony live 2011
1. Is Cool Story
« 1 jeu, 1 framework, 3 mois, 4
devs, 8 millions de joueurs. »
Alexandre Rodière Bertrand Tornil
2. Weka Entertainment
● Jeux dans Facebook
● LAMP
● Forte charge
● Rythme fonctionnel élevé
=> Symfony 1 + Framework Weka
3. Is Cool
● 2 ans de développement incrémental
● Pas de framework, pas de MVC
4. 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
5. 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
6. 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
8. 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
9. 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...)
10. 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
11. 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
12. On s'arrange avec l'autoloader
● Création d'un ensemble cohérent de classes
pour l'autoloader
13. La chasse aux statiques
Sachant que le code
doit pouvoir continuer
de fonctionner dans
les 2 contextes
15. 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é
16. Des chiffres !
● Le 22 décembre 2010
● Passage de la page « invit »
17. 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
18. Ensuite ?
● Le 24 janvier 2011
● Passage des webservices partenaires
– 30000-40000 hits/jours
– Nouvelles couches métiers
19. Un peu de charge...
● Le 10 février 2011
● Passage de myKiwi sur la home
20. 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
● ?
21. Certes...
● Le 24 février
● Passage de la page «Ma collection»
● 57 familles de 7 élements
22. 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
23. Ok, and now ??
● Le 2 mars 2011
● Passage de la dernière feature
● Développement entièrement sous sf2
● Front HTML5
● La vache Kiwi...
24. Ok, and now ??
● Le 2 mars 2011 : la vache Kiwi...
● ...et ca tient :)
25. 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