Archives pour la catégorie ‘Ma vie’

Lily Poulp’ et le Friedrich Effect

Par Maxime, le 8 juillet 2010.

Mes petits pandas. Vous parlez tous depuis hier de Paul le Poulpe qui aurait deviné l’issue du match Espagne-Allemagne d’hier soir. Mais je vous le dis ici, il n’y a qu’un seul poulpe qui vaille la peine en ce monde, c’est Lily Poulp’.

Mobile Photo 7 juil. 2010 20 27 38.jpg
Dédipix de Friedrich en mode photo de fille surexposée.

Et si je dis ça c’est bien sûr uniquement parce que Friedrich, le plus beau chat de la Terre, a maintenant l’honneur d’être mentionné sur son blog. Avant d’être dessiné ? Si c’est le cas, Lily, fais gaffe, on l’a déjà dessiné gros une fois, il a eu du mal à s’en remettre.

cqen.png

Ces quelques dessins résument très bien ce qu’on appelle communément le « Friedrich effect », cet effet qui rend gaga n’importe quel être humain après avoir eu un contact visuel avec mon chat ! Admirez. Merci Lily.

Voir Friedrich part 1 sur Lily Poulp’

L’infrastructure VDM : Memcache

Par Maxime, le 17 mars 2010.

La semaine dernière, je vous annonçais la création d’une suite d’articles concernant l’infrastructure de VDM. J’ai commencé en présentant mes serveurs MySQL. Récapitulatif :

betacie_network.png
L’infrastructure que j’ai montée pour VDM/FML

Dans cette série de billets (normalement trois en comptant celui là), je vais vous raconter ce qui se passe derrière les URL viedemerde.fr et fmylife.com, qui représentent 98% du trafic de l’infrastructure d’hébergement de ma société, Beta&Cie. Ces articles n’ont pas pour vocation de me vanter ou de dire au monde entier que ma solution est la meilleure, c’est juste ma solution et elle marche bien jusqu’à maintenant.

Aujourd’hui, parlons de Memcache.

Présentation de memcached

Comme nous l’avons vu la semaine dernière, les serveurs de données sont bien remplis en données diverses et variées, que ce soit des votes, des anecdotes, les informations de connexion. Beaucoup de données, dont une partie est redondante. Mais pas la totalité de la page puisque chaque anecdote est votée, impossible donc de cacher toute la page.

Un serveur memcached (d pour daemon) est un serveur léger qui permet de stocker temporairement des données en RAM. Si léger qu’il ne dispose d’aucun système d’identification pour accéder ou modifier ces données, donc faites bien attention à ne faire écouter le serveur qu’en local si vous installez un jour une telle solution pour votre serveur.

Son utilisation sur VDM

La technologie memcached permet donc de stocker n’importe quel type de données. Il sert souvent par exemple sur des clusters de serveurs Web pour centraliser les sessions PHP. On peut donc facilement en tirer profit pour mettre en cache plusieurs informations du site, et ainsi soulager de manière significative les serveurs MySQL.

memcache.png
One server to rule them all.

La problématique est maintenant la mise en place de cette solution sur le code PHP existant de VDM. PHP possède une extension Memcache qui permet d’implémenter facilement une solution de cache.

La solution que j’ai retenue est résumée dans le code suivant. Les requêtes SQL sont transformées en hash MD5 pour le nom de la clé, et l’objet du résultat de la requête est stockée en cache, avec un cache par défaut d’une heure (3600 secondes). De cette manière, si la clé n’existe pas sur le serveur memcached, la requête est automatiquement exécutée et le résultat stocké.

<?php

$memcache = new Memcache();
$memcache->pconnect("127.0.0.1","9000");

function mcache($query,$timeout=3600,$force=false) {

	global $memcache;

	$hash = md5($query);

	if (!$force) {

		$value = $memcache->get($hash);

	}

	if ($force || $value === FALSE) {

		$result = mysql_query($query);
		$value = mysql_fetch_object($result);
		$memcache->set($hash,$value,NULL,$timeout);

	}

	return $value;

}

function mcache_set($query,$value,$timeout=3600) {

	global $memcache;

	$hash = md5($query);

	$value = $memcache->set($hash,$value,NULL,$timeout);

	return $value;

}

function mcache_delete($query) {

	global $memcache;

	$hash = md5($query);
	$value = $memcache->delete($hash);

	return $value;

}

?>

Grâce à ces fonctions nous avons conservé toutes nos requêtes, et pouvons utiliser de manière transparente soit Memcache soit MySQL. Plus pratique pour pouvoir synchroniser rapidement les données entre les deux serveurs, en plus d’avoir facilité la migration vers Memcache.

Exemple d’utilisation :

<?php

/* Je suis un nul alors je mets pas de mot de passe en root */
mysql_connect("localhost","root","");
mysql_select_db("base");

/* La requête MySQL normale sans cache */
$result = mysql_query("SELECT texte FROM articles WHERE id = '1337' LIMIT 1");
$row = mysql_fetch_object($result);

/* La requête avec le cache Memcache */
$row = mcache("SELECT texte FROM articles WHERE id = '1337' LIMIT 1");

?>

Grâce aux fonctions mcache() et consorts, on peut donc sans trop de difficultés alléger le travail des serveurs de bases de données. Si vous avez besoin de mettre en cache un tableau de résultats, vous pouvez utiliser la fonction suivante :

<?php

function mcache_array($query,$timeout=3600,$force=false) {

	global $memcache;

	$hash = md5($query);

	if (!$force) {

		$value = $memcache->get($hash);

	}

	if ($force || $value === FALSE) {

		$memcache->delete($hash);

		$result = mysql_query($query);
		while ($row = mysql_fetch_object($result)) {
			$value[] = $row;
		}

		$memcache->set($hash,$value,NULL,$timeout);

	}

	if (!is_array($value)) $value = array();
	return $value;

}

?>

Ainsi, sur VDM et FML, nous mettons en cache principalement les données suivantes :

  • Les données « statiques » des anecdotes (texte, auteur, etc.)
  • Les totaux des votes sur les anecdotes (mis à jour à chaque vote sans appel à MySQL)
  • Les ID des dernières anecdotes lues par les utilisateurs, pour afficher les « NEW »
  • Certains rendus XML de l’API pour les applications mobiles

Au niveau des chiffres, voici des statistiques sur les 3 dernières semaines d’utilisation du serveur memcached :

  • 900 connexions simultanées en permanence
  • 90 000 connexions par jour
  • 14,4 Mo écrits par seconde (via 622 requêtes en moyenne)
  • 1,8 Go de données stockées en ce moment
  • 6,9 millions de données stockées en ce moment
  • 1,3 milliard de données stockées en tout

Comme d’habitude, n’hésitez pas à commenter pour plus d’informations, j’ai sûrement oublié beaucoup de choses. La semaine prochaine nous parlerons de serveurs Web.

L’infrastructure VDM : MySQL

Par Maxime, le 10 mars 2010.

Depuis des mois je promets une série d’articles qui ne va peut-être pas intéresser grand monde, mais qui aura le mérite d’exister et de soulager ma conscience (ma mère m’a dit que ce n’était pas joli de ne pas tenir ses promesses).

Contrairement à ce que certains laissent penser, je fais quelque chose de mes journées. Je suis développeur Web, mais aussi administrateur système. Créer puis s’occuper de l’hébergement de sites comme VDM et FML n’arrive pas tous les jours, et j’ai gagné beaucoup d’expérience ces 12 derniers mois en montant une infrastructure qui accueille chaque jour plus de 3 millions de visiteurs.

betacie_network.png
L’infrastructure que j’ai montée pour VDM/FML

Dans cette série de billets (normalement trois en comptant celui là), je vais vous raconter ce qui se passe derrière les URL viedemerde.fr et fmylife.com, qui représentent 98% du trafic de l’infrastructure d’hébergement de ma société, Beta&Cie. Ces articles n’ont pas pour vocation de me vanter ou de dire au monde entier que ma solution est la meilleure, c’est juste ma solution et elle marche bien jusqu’à maintenant.

Passons au premier sujet : Les serveurs MySQL.

Réplication circulaire

tv8n.png
Mes sept petits bouts de chou.

Comme le montre le schéma, mes sept serveurs sont configurés en réplication circulaire. C’est à dire que chacun est maître et esclave à la fois (pas de connotations sexuelles ici, merci !). s1 est donc maître sur s2, mais il est esclave de s7.

Cette configuration a l’avantage de bien fonctionner derrière un load balancer puisque chaque serveur a le droit d’écriture. C’est donc transparent pour le développeur qui n’a qu’à renseigner l’IP du load balancer dans sa connexion à MySQL et travailler comme s’il n’avait qu’un seul serveur.

L’inconvénient est un inconvénient de taille. Comme les requêtes s’exécutent comme dans une ronde, si un serveur plante, toute la ronde est cassée et plus rien ne se réplique. Il faut donc avoir du bon matériel, et au cas où ça arrive quand même, agir très vite pour éviter que les utilisateurs ne râlent :)

Une petite astuce pour éviter que votre réplication ne s’arrête pour des raisons connes : Je fais ignorer par mes serveurs systématiquement les erreurs 1062 (nouvelle entrée avec le même ID) et 1053 (déclenchée quand le serveur maître s’éteint ou redémarre) :

slave-skip-errors=1062,1053

Pour diminuer les latences de réplication il est aussi important d’avoir un bon réseau…

Réseau VLAN

Au delà de l’onomatopée, un VLAN est l’abréviation de Réseau Local Virtuel (RLV ça le faisait pas, hein ?). Il permet de créer un réseau indépendant du reste des machines du réseau où est hébergée l’infrastructure. Concrètement chaque serveur possède deux interfaces physiques :

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:30:48:b9:42:e2
          inet addr:91.191.146.199  Bcast:91.191.146.255  Mask:255.255.255.192

eth1      Link encap:Ethernet  HWaddr 00:30:48:b9:42:e3
          inet addr:10.191.146.199  Bcast:10.191.146.255  Mask:255.255.255.0

eth0 a l’adresse IP 91.191.146.199 qui est atteignable de l’extérieur du réseau, alors que eth1 a l’adresse IP 10.191.146.199 qui est interne au VLAN et qui par conséquent ne peut communiquer qu’avec ses copines du même VLAN qu’elle.

Avoir ses serveurs en VLAN diminue donc la latence entre les serveurs, la réplication se fait plus rapidement et avec plus de sécurité puisqu’aucun paquet ne sort de votre réseau local. Deux avantages indéniables qui devraient vous faire quitter OVH choisir un hébergeur qui fait du VLAN ! En effet les réseaux virtuels se configurent au niveau des routeurs/switches, il faut donc choisir un hébergeur qui puisse le prendre en charge.

Disques SSD

Pour économiser un certain nombre de machines dans ma réplication circulaire et ainsi réduire le nombre de défaillances matérielles, j’ai très vite décidé d’utiliser du SSD pour héberger les données de mes bases. Au début j’ai eu des X25-M chez OVH (mon ancien hébergeur), qui est le moyen de gamme du SSD, puis je suis passé récemment au X25-E, la version haut de gamme, comme le montre ce benchmark par SD-France, mon gentil hébergeur :

20090824-test-ssd-graph-ecriture.gif

Le X25-E dépasse largement tous ses concurrents en terme d’écriture et de lecture de disque. Cela assure évidemment un meilleur temps de réponse sur les requêtes, différence qui se ressent lorsque l’on traite 15 000 requêtes par seconde

Les deux inconvénients de cette méthode :

  • La capacité. La plus grande taille disponible est 64 Go, ce qui peut paraître beaucoup pour de simples bases de données, mais qui se remplit vite quand le site repose sur beaucoup d’anecdotes / commentaires et surtout votes.
  • Le prix. Les disques SSD X25-E sont encore très chers, même s’ils économisent parfois de nouvelles machines, je me fais taper quand j’en demande des nouveaux :D

Optimisations

Comme le disque SSD est déjà pas mal occupé à traiter les requêtes SQL, la copie des résultats de SELECT sur les bases temporaires dans /tmp (configuration par défaut) est fortement ralentie. En parallèle la RAM n’est en général pas utilisée à fond. Il est donc judicieux d’utiliser la RAM restante comme espace pour les fichiers temporaires, grâce au système de fichier tmpfs :

mkdir /tmpfs
mount tmpfs /tmpfs -t tmpfs

Vérifiez que votre nouveau répertoire fonctionne correctement, puis modifiez la configuration de votre my.cnf pour la valeur suivante :

tmpdir = /tmpfs

Ne pas oublier de rajouter le montage du tmpfs dans votre /etc/fstab, pour éviter les problèmes au reboot :)

Avec tout ceci, nous arrivons à traiter vaguement ces quelques données :

  • 2 millions d’anecdotes, 8000 nouvelles par jour
  • 1,7 million de commentaires, 5000 nouveaux par jour
  • 630 millions de votes, 850 000 nouveaux par jour

Voilà mes petits pandas, je pense avoir couvert pas mal des aspects principaux « caractéristiques » de l’infrastructure au niveau de MySQL. Mais j’ai sûrement oublié beaucoup de choses, alors n’hésitez pas si vous avez des questions.

Pas de date pour le prochain article mais j’espère la semaine prochaine.

BetaSeries : Diverses mises à jour

Par Maxime, le 1 mars 2010.

Je n’en ai jamais parlé ici et pourtant, il s’agit d’une de mes occupations principales dans ma journée type de développeur Web. BetaSeries est un site qui vous permet de vous organiser dans vos séries et vous permet d’être prévenu quand de nouveaux épisodes sortent, ainsi que de nouveaux sous-titres. Un exemple avec mon profil BetaSeries.

p6hh.png

Ce billet est en forme d’une note de service, j’ai fait quelques améliorations hier, listées ci-dessous :

  • Amélioration de la rapidité lors du marquage d’un épisode.
  • Amélioration de la notation (même s’il y a toujours des bugs d’affichage à résoudre).
  • Alertes par mail lorsqu’une nouvelle saison d’une série suivie démarre.
  • Les icônes des sous-titres varient en fonction des sources (vert = Seriessub, bleu = Sous-titres.eu, marron = TVSubtitles ;)).
  • Ajout des dernières séries mises à jour sur la page d’accueil.

J’aimerais aussi revoir un peu l’ergonomie générale du site, même si c’est une chose difficile, considérant tout le JavaScript qui s’y promène. Si vous êtes un utilisateur de BetaSeries et que vous lisez ceci, faites-moi part de vos suggestions en commentaires, je verrai si je peux y faire quelque chose :)

PS : Pour ceux qui attendaient un cinquième volet du pot très pourri, je suis désolé, la série s’arrêtera sur l’Epic Win de la semaine dernière. Je ne pourrai jamais reproduire un tel phénomène, il faut savoir s’arrêter en pleine gloire.

Eric Dupin, l’homme de l’ombre

Par Maxime, le 26 janvier 2010.

Beaucoup d’entre vous connaissent mon ami et collègue Eric Dupin, blogueur à succès. Blogueur ? Pas seulement ! Détrompe-toi petit panda. Car Eric Dupin à ses heures perdues est aussi autobiographe. Oui, non, pas biographe, autobiographe. Je ne voulais pas le révéler mais il a publié mon autobiographie sur son blog dernièrement, en modifiant un article du 1er avril 2008. Bon, d’accord, dit comme ça ça fait un peu vicieux.

20100126_pressecitron.jpg
J’ai fait une capture d’écran pour pouvoir travailler
plus facilement dessus, au cas où il soit supprimé Internet soit coupé

Les liens qui vont bien :

Le seul problème réside dans le fait que je n’ai pas eu le temps de relire son oeuvre avant la parution, et celle-ci comporte plusieurs inexactitudes. Je me permets donc de recopier une version corrigée par mes soins de mon autobiographie ci-dessous.

Mise à jour : Réponses audio d’Eric à mes commentaires ! Merci l’ami !

Bonjour,

Je m’appelle Maxime Valette et je suis une star du web.

Jusque là, ça va, c’est à peu près correct, même si j’aime bien mettre mon nom de famille en majuscules comme les titres de blogs geek et high tech.

Réponse d’Eric

Avant, je n’avais pas une vie très passionnante, et comme je m’ennuyais j’ai eu une idée : faire un site autobiographique. J’ai donc créé « VDM » (Vie De Merde), qui est un peu l’histoire de ma vie.

Bon pour ce côté-là, je t’avais demandé de t’inspirer de la FAQ du site car tout le truc « comment ça vous est venu » on me le demande souvent. Cependant le site était autobiographique au début, maintenant tout le monde tente de copier mon style et ma vie pour pouvoir être publié !

Réponse d’Eric

Ce site a rencontré tout de suite un grand succès. Le vécu y a que ça de vrai. Certaines mauvaises langues disent que je n’ai que « vaguement participé » à VDM et ça me met dans une colère noire car c’est rien que des mensonges.

Eric, roh, t’es un sacré déconneur ! Se traiter soi-même de mauvaise langue c’est mignon, j’aurais plutôt écrit « stars des blogs » pour remettre dans le contexte. Cependant faire une négation pour en oublier une autre, t’as abusé sur la syntaxe.

Réponse d’Eric

Cela dit, depuis ma vie n’a pas beaucoup changé. Je m’ennuie autant qu’avant, mais maintenant je suis payé pour le faire (par Vie De Merde, qui est fortement sponsorisé par la publicité). C’est génial car ça me permet de m’acheter plein de Biactol.

J’étais déjà payé pour m’ennuyer avant en fait, ça s’appelle le travail efficace, et l’ennui c’est ma passion. Pour le Biactol, je t’avais dit, j’ai changé depuis qu’ils ont augmenté le prix, je suis passé à Eau Précieuse.

Réponse d’Eric

Je suis même passé à la télévision, et les plus grands blogs m’ont fait l’honneur de publier plusieurs articles où ils disent plein de choses gentilles sur VDM. Je leur dois une bonne partie du succès du site, mais comme je déteste les blogueurs (enfin surtout ceux qui sont plus connus que moi) j’évite de le dire trop fort. D’ailleurs cracher dans la soupe est un de mes passe-temps favoris, ça me donne l’impression d’exister.

Tu peux laisser le « mauvaise langue » finalement, car tu t’es bien rattrapé sur le « fait l’honneur », au temps pour moi, j’aurais dû tout lire avant. C’est vrai que d’avoir écrit « le meilleur concept depuis Digg », tu le regrettes maintenant, non ? Le blog c’est comme Twitter, rien ne se perd !

20080401_pressecitron.jpg
L’article original

Et puis je ne suis pas blogueur, et si je pouvais disparaître ça serait pas mal, je ne vis pas de mes followers ou de mon nombre de tweets, t’as dû déconner en reprenant un bout de ta propre autobiographie.

Réponse d’Eric

On me dit que j’ai un pris la grosse tête et que le succès interplanétaire de Vie De Merde est juste un coup de chance. Les gens qui disent ça sont des méchants (ou des adultes, ou les deux parce-que ça va souvent ensemble), et j’ai décidé de m’auto-investir d’une mission : purifier le web de tous les mécréants. Chez moi à Reims on m’appelle le Milosevic de la Marne.

T’en as trop dit là, je t’avais précisé de ne pas l’écrire quand on s’est parlé… Le problème c’est que moi aussi je suis un adulte, bon je n’ai pas 44 ans mais on n’accélère pas le temps, donc je travaille / m’ennuie jusqu’à ce jour où j’aurai enfin de la crédibilité grâce à ma date de naissance. Ce jour là j’aurai ma photo en favicon de mon blog, et je pourrai mettre des pubs pour des sites pornos à droite.

Pour mon surnom à Reims c’est plutôt Richard Cœur de Lion, en raison de ma grande bravoure sur un ordinateur.

Réponse d’Eric

Pour cela, comme j’ai beaucoup de temps, je le passe à visiter les sites des autres, à scruter leur code-source, puis à en dire du mal. J’ai même créé un site exprès rien que pour ça, et j’espère bien figurer rapidement en tête du classement Wikio des hate-blogs.

Hmm t’as pas bien compris non plus ! Je visite tous les sites en code source, les réinterpréter dans ma tête ça me fait passer le temps entre deux clashes Twitter. Et puis je n’ai jamais trop aimé Wikio, mais être dans le top 10 me permettrait de me faire payer un avocat si j’ai des soucis, j’avoue.

Réponse d’Eric

C’est vous dire comment mes journées sont longues. Bien sûr je ne fais cela que derrière mon écran car dans la vraie vie j’ai un peu du mal à assumer, mais ça plait beaucoup à mes fans, comme mon ami Gonzague ou mon idôle Soymalau qui me font plein de RT sur Twitter.

Gonzague et Soymalau sont mes amis, et je suis leur idole (pas de circonflexe, Ricky !), c’est important de préciser. Et je n’assume pas que derrière mon écran, j’assume derrière mes 5 écrans, voire l’écran de mon iPhone aussi, et celui de mon Macbook Pro. C’est dire si j’assume à mort.

Réponse d’Eric

Sinon, de temps en temps je pratique la délation, je tiens aussi des propos racistes sur les réseaux sociaux, et je monte des vidéos super marrantes avec Hitler dans le rôle principal, un autre grand Purificateur.

Au moins je n’ai rien à redire sur l’introduction et la conclusion, elles sont parfaites. Ça fait un peu Godwin quand même par moments, faudrait revoir le vocabulaire. Voir de la propagande Nazi dans la reprise d’un mème Internet qui a fait le tour du monde, à part se sentir concerné par les sous-titres je ne comprends pas bien !

Pour ceux qui ne connaissent pas bien mon collègue Eric Dupin, vous pourrez retrouver son autobiographie complète et exacte chez Gonzague.