<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Decrypt &#187; Munin</title>
	<atom:link href="http://decrypt.ysance.com/tag/munin/feed/" rel="self" type="application/rss+xml" />
	<link>http://decrypt.ysance.com</link>
	<description>Le site de decryptage des technologies de l&#039;informatique</description>
	<lastBuildDate>Thu, 12 Aug 2010 20:40:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Comment FarmVille scale pour récolter 75 millions de joueurs par mois</title>
		<link>http://decrypt.ysance.com/2010/03/comment-farmville-scale-pour-recolter-75-millions-de-joueurs-par-mois/</link>
		<comments>http://decrypt.ysance.com/2010/03/comment-farmville-scale-pour-recolter-75-millions-de-joueurs-par-mois/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 16:29:57 +0000</pubDate>
		<dc:creator>Todd Hoff</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Casual Gaming]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Puppet]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=1024</guid>
		<description><![CDATA[<img class="size-full wp-image-870 alignright" title="Farm Ville" src="http://decrypt.ysance.com/wp-content/uploads/2010/02/farmville.jpg" alt="Farm Ville" width="183" height="139" />

Si la vie des vrais agriculteurs était aussi douillette que dans <a title="FarmVille" href="http://www.farmville.com/">FarmVille</a>, le jeu phare de chez Zynga, alors ma famille n’aurait probablement jamais quitté les hivers rudes du North Dakota. A FarmVille, aucun des contes atroces que me racontait ma grand-mère n’est véridique. Les agriculteurs y prospèrent, les cultures fleurissent, et les animaux ne partent jamais au «  <a title="Murder In The Red Barn By Tom Waits" href="http://www.youtube.com/watch?v=eUJz3137EQ8">red barn</a> » (abattoir). A mon avis, c’est justement ce charme rustique d’un univers où l’on ne salit même pas ses souliers, qui a contribué à rendre FarmVille « le jeu le plus important au monde » dans un délai étonnamment court.

Comment FarmVille a-t-il réussi le scaling d’une application web pour accueillir 75 millions de joueurs par mois ? Luke Rajlich de FarmVille nous a gracieusement révélé quelques uns de leurs défis et de leurs secrets. Je passe la parole à Luke. [...]
]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-870 alignright" title="Farm Ville" src="http://decrypt.ysance.com/wp-content/uploads/2010/02/farmville.jpg" alt="Farm Ville" width="240" height="182" /></p>
<p>Si la vie des vrais agriculteurs était aussi douillette que dans <a title="FarmVille" href="http://www.farmville.com/">FarmVille</a>, le jeu phare de chez Zynga, alors ma famille n’aurait probablement jamais quitté les hivers rudes du North Dakota. A FarmVille, aucun des contes atroces que me racontait ma grand-mère n’est véridique. Les agriculteurs y prospèrent, les cultures fleurissent, et les animaux ne partent jamais au «  <a title="Murder In The Red Barn By Tom Waits" href="http://www.youtube.com/watch?v=eUJz3137EQ8">red barn</a> » (abattoir). A mon avis, c’est justement ce charme rustique d’un univers où l’on ne salit même pas ses souliers, qui a contribué à rendre FarmVille « le jeu le plus important au monde » dans un délai étonnamment court.</p>
<p>Comment FarmVille a-t-il réussi le scaling d’une application web pour accueillir 75 millions de joueurs par mois ? Luke Rajlich de FarmVille nous a gracieusement révélé quelques uns de leurs défis et de leurs secrets. Je passe la parole à Luke.</p>
<p>L’entretien comprenait quelques questions que je lui ai adressées, auxquelles il a répondu ainsi :</p>
<p style="padding-left: 30px;"><em>FarmVille a rencontré des défis de scaling rares, qui sont uniques à cette application. Le jeu a dû scaler très rapidement et très loin. Après seulement 4 jours, le jeu avait attiré un million de joueurs quotidiens, et 10 millions après 60 jours. Lors du lancement, le jeu social le plus important du web avait 5 millions de joueurs quotidiens. Actuellement FarmVille détient 28 millions de joueurs quotidiens, et 75 millions de joueurs mensuels, neuf mois après le lancement. Cela veut dire que le fond de joueurs mensuels FarmVille est plus important que la population totale de la France. Il y a deux éléments fondamentaux qui rendent FarmVille unique au niveau du défi évolutif : premièrement, c’est le jeu le plus répandu au monde, et deuxièmement, c’est l’application la plus importante sur une plate-forme web. Ces deux facteurs représentent un ensemble unique de défis évolutifs que FarmVille a dû surmonter. En termes d’investissement de technologie, FarmVille utilise principalement des composants Open Source, et ses fondements reposent sur la pile LAMP.</em></p>
<p style="padding-left: 30px;"><em>Afin de faire prospérer FarmVille en tant que jeu, nous devons nous accommoder des besoins en charge de traitement d’un jeu. L’état de chaque joueur contient une grosse quantité de données, qui sont liées entre elles de façon subtile et complexe. Par exemple, les objets à la ferme ne doivent pas se percuter, donc si un utilisateur installe une maison sur sa ferme, le Backend doit vérifier qu’il n’y aucun autre objet déjà installé qui risque de chevaucher sur l’espace prévu. La plupart des sites web connus, comme Google ou Facebook, servent surtout à être lus, mais FarmVille a une charge de travail en écriture extrêmement lourde. Le ratio de données en lecture par rapport aux données en écriture est de 3:1 (3 pour 1), ce qui implique un taux d’écriture très élevé. La majorité des demandes pour FarmVille adressées au Backend modifient en quelque sorte l’état de l’utilisateur qui joue. Pour que ce soit scalable, nous faisons dialoguer notre application principalement avec des composants de type cache. En plus, le lancement d&#8217;un nouveau contenu ou de nouvelles fonctions a tendance à provoquer des pics d’utilisation, car cela revient à une extension du jeu. Les pics de téléchargement peuvent atteindre les 50% le jour du lancement d’une nouvelle fonction. Il nous faut pouvoir accueillir ces pics de trafic.</em></p>
<p style="padding-left: 30px;"><em>Le deuxième point est de faire scaler FarmVille comme l’application la plus importante sur une plate-forme web, et elle a autant d’envergure que certains des sites web les plus gros du monde. Du fait que le jeu est exécuté au sein de la plate-forme Facebook, nous sommes très sensibles aux écarts de latence (temps d’attente) et de performance de la plate-forme. En conséquence, nous avons fait des efforts pour mitiger cette variance de la latence : nous entreposons en cache beaucoup de données Facebook, et nous limitons gentiment l’utilisation de la plate-forme quand nous nous apercevons d’une dégradation de la performance. FarmVille a déployé tout un cluster (une grappe) de serveurs cache pour la plate-forme Facebook. Le volume de trafic entre FarmVille et la plate-forme Facebook est vaste : aux heures de pointe environ 3 Gigabits/sec passent entre FarmVille et Facebook, et en même temps notre cluster de caching fournit 1.5 Gigabits/sec de plus à l’application. En plus, étant donné que la performance est variable, l’application est capable de stopper dynamiquement les appels en retour vers la plate-forme. Nous avons un &laquo;&nbsp;bouton de réglage&nbsp;&raquo; qui nous permet de réduire de manière incrémentale de plus en plus d&#8217;appels en retour. Nous faisons en sorte que tous les appels qui reviennent à la plate-forme n’empêchent pas le chargement de l’application même. L’intérêt de cette manipulation est que, quoiqu’il advienne, les joueurs peuvent au moins continuer leur partie.</em></p>
<p style="padding-left: 30px;"><em>Pour toute application web, un temps d’attente élevé est fatal, et une latence hautement variable lui sera fatale tôt ou tard. Afin de résoudre la latence élevée, FarmVille a installé beaucoup de caches devant les composants à latence élevée. La latence hautement variable représente une épreuve de plus, car elle nous oblige à trouver une approche différente : l’application dépend des éléments de son architecture qui ont habituellement une latence correcte. Pratiquement tous les composants sont susceptibles de latence variable, certains plus que d&#8217;autres. Vu la nature de FarmVille, qui a une charge de travail très importante en termes d&#8217;écritures et de transactions, la variabilité de latence affecte l&#8217;expérience de jeu des utilisateurs de façon exacerbée, par rapport à une application web traditionnelle. La solution, chez nous à FarmVille, pour gérer ces scénarii est de considérer chaque composant comme un service dégradable. Memcache, base de données, APIs REST, etc. sont maniés comme des services dégradables. Afin de gérer la dégradation des services, nous attribuons des seuils en termes de nombre d&#8217;erreurs et utilisons des régulateurs d’usage desdits services. Les principes clés sont d&#8217;isoler les services problématiques et hautement latents et de les empêcher, par le biais de régulateurs d’erreurs et de timeout, d’entraîner des problèmes similaires ailleurs et, si besoin, désactiver la fonctionnalité de l’application avec des interrupteurs On/Off et des régulateurs de fonctionnalité.</em></p>
<p style="padding-left: 30px;"><em>En ce qui concerne la gestion et le suivi de la ferme web de FarmVille, nous exploitons quelques outils de gestion et de monitoring Open Source. Nous utilisons Nagios pour les alertes (supervision), Munin pour le monitoring et Puppet pour la configuration. Nous nous appuyons fortement sur des systèmes de statistiques internes afin de surveiller la performance des services utilisés par l’application, tels Facebook, DB et Memcache. En outre, dès que nous constatons une dégradation de performance, nous profilons les événements I/O d’une demande, sur une base échantillonnée.</em></p>
<h2>Leçons retenues</h2>
<p>Il manque un peu de détails à mon goût, mais il y a quand même beaucoup de points intéressants qui pourront servir :</p>
<ol>
<li><strong>Les jeux interactifs sont lourds en écriture</strong>. Les applications web typiques lisent plus qu’elles n’écrivent, donc il se peut que plusieurs architectures courantes ne suffisent pas. Des applications lourdes en lecture peuvent souvent s’en sortir à l’aide d’une couche de cache devant une seule base de données. Les applications lourdes en écriture auront besoin de partitionner, les écritures sont donc réparties et/ou utilisent une architecture en mémoire.</li>
<li><strong>Chaque composant      doit être conçu comme un service dégradable</strong>. Isolez les      composants de manière que les latences élevées dans une zone particulière ne      puissent pas impacter une autre. Régulez l’usage afin de réduire les      problèmes. Désactivez les fonctions quand c’est nécessaire.</li>
<li><strong>Mettez les données      Facebook en cache</strong>. Quand vous dépendez fortement d’un composant      externe, pensez à mettre en cache les données du composant afin      d’améliorer les temps de latence.</li>
<li><strong>Prévoyez à l’avance      des pics de trafic liés aux nouveaux lancements</strong>.</li>
<li><strong>Echantillonnez</strong>. En analysant des flux      abondants de données, à la recherche de problèmes par exemple, il n’est pas      nécessaire de traiter chaque donnée. Echantillonner rendra les mêmes      résultats pour beaucoup moins d’effort.</li>
</ol>
<p>J’aimerais remercier Zynga et Luke Rajlich de nous avoir accordé cette interview. Si des lecteurs ont une architecture qu’ils voudraient présenter ici, n’hésitez pas à me contacter.</p>
<p><em><strong>Todd HOFF <a href="http://highscalability.com/">@highscalability.com</a></strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2010/03/comment-farmville-scale-pour-recolter-75-millions-de-joueurs-par-mois/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
