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.

83 commentaires

bento —

Et ca te coute combien tous ces serveurs ?

DaPo

On entend partout « oui twitter il arrive pas à gérer MySQL donc il utilise une autre technologie » (dont j’ai oublié le nom, je crois que c’est Ruby On Rail, non ?)

Pourquoi ne pas passer directement à ça, en gros anticiper le fait que VDM & FML soient de plus en plus gros ?

C’est juste une idée, comme ça. Si tu me réponds « lol », je comprendrai.

Maxime

@bento : Les tarifs seront abordés dans la dernière partie, une fois que j’aurai expliqué tous les coûts que ça engendre en plus des serveurs eux-mêmes :)

@DaPo : RoR est un langage de programmation, pas de base de données. Ils utilisent un autre système mais je ne me rappelle plus lequel. En revanche Facebook utilise la réplication circulaire MySQL comme moi, donc ça donne une idée de la puissance :)

Christophe

@DaPo: MySQL et Ruby On Rail ça n’a aucun rapport. En fait, Twitter sont passés de Ruby à autre chose, je n’ai pas d’articles sous la main. Pour ce qui est MySQL, pas encore, mais ils y réfléchissent (voir des articles à ce sujet).

Loïc CHOLLIER

MISTAKE !!1 RoR est un framework, Ruby est un langage de programmation. :-)

Pym

Article super intéressant, sacrée infrastructure !

DaPo

Ah, d’accord. Alors, question : ça ne reviendrai pas moins cher et rapide d’utiliser le système de twitter, qui se rapproche + de VDM & FML, dans le sens où tu n’héberges principalement « que » du texte (comme twitter, quoi) plutôt que d’utiliser le délire de FaceBook qui lui héberge toute sorte de contenu ? J’sais pas si je suis bien clair dans la différence entre le contenu de Twitter et le tiens :3 (enfin, de mon point de vue, qui est celui d’un noob là dedans mais qu’essaye quand même de comprendre o/)

Donc, de par cette différence entre requêtes de textes / requêtes de toute sorte de médias, ça serai pas + avantageux d’adapter son infrastructure au contenu ?

Poarf, j’sais pas si j’suis clair.

FGRibreau

Très très intéressant merci pour ces informations, je bookmark.

Maxime

@DaPo : Le contenu des bases de données n’a aucun rapport avec le système à utiliser. Il faut surtout regarder comment on utilise les données pour savoir quoi choisir. Et puis les photos etc. ne sont pas stockées dans des bases de données :)

FGRibreau

Et twitter est passé à Cassandra pour info ;)

Xavier —

@Maxime Facebook n’utilise pas maintenant du nosql et Cassandra plus précisément ?

Sinon c’est assez impressionnant et très enrichissant, merci !

Martin

Tu as enfin balancé ton article ! Bravo. Pour ton prochain article tu vas forcément le lacher la semaine prochaine tellement je vais whine !

websilone

Hello,
sympa ce petit article…
Une question : toutes ces connaissances réseaux tu les as apprise sur le tas ou t’as une formation réseau à la base ? D’ailleurs t’as une formation tout court ?
Simple curiosité hein :-)
Autre question : je suppose que les anecdotes les plus vues sont les plus récentes ou celles des « Top », il n’y aurait pas un intérêt à « archiver » les plus anciennes ? histoire de gagner un peu de place sur tes serveurs justement…

Clément

Excellent !

Merci pour cet article !
Avec tout ça je me demande combien tu dois payer par mois :s (une approximation a nous donner ?)

Hâte de voir la suite sur Memcache et les serveurs Web :)

DaPo

Certes, ce que j’essayais de dire, c’est qu’en fait, VDM, c’est de la requête de textes (principalement) au même titre que Twitter. Alors que facebook, c’est de la requête de toute sortes de fichiers multimédias. Enfin, c’est la conclusion que j’en ai tiré.

De ce fait (voilà qui sera plus clair, j’espère), n’y-aurait-il pas 2 infrastructures (niveau requêtes) pour chacun des cas ? Ou alors ces 2 cas se gèrent exactement de la même façon ?

Voilà, c’était en fait ça, la vraie question.

Maxime

@Xavier : d’après l’activité du groupe Mysql@Facebook je ne crois pas, mais je peux me tromper. En tout cas ils l’utilisaient jusqu’à récemment, et vu leur esprit conservateur (coucou HipHop) ça m’étonnerait qu’ils aient changé…

Romain —

Très bon article !
Tu as testé/benchmarké MySQL Cluster ? Pourquoi tu n’as pas opté pour cette solution ?

Mugetsu

@DaPo Le petit nom de la techno sur laquelle twitter est en train de migrer c’est Cassandra.
Ça fait en effet une belle configuration tout ça et ça tourne aussi du feu de dieu o:
Au niveau de la configuration de tout ce petit monde ça a dû être génial !

Maxime

@websilone : Je suis un autodidacte complet, jamais fait d’études d’informatique. Et pour les anecdotes oui l’archivage est une possibilité mais pour l’instant on a encore de la place !

@Clément : Tu le sauras bientôt !

@Dapo : Là tu parles plutôt du service des autres types de média, donc il faudra patienter jusqu’au prochain épisode pour bien saisir l’ensemble ^^

DaPo

@Maxime ok, j’attends avec impatience. Btw, merci pour tes explications, c’est vraiment très intéressant toute cette affaire, même pour un noob comme moi :D

Marc LEBEL

Super cet article !! Merci .
@Maxime : tu penses à migrer à une solution NoSQL comme Cassandra ?

Martin

@Romain: MySQL Cluster qui suppose d’utiliser mdm t’offre des perfs très basses comparé à de la réplication multi-master si ton cluster manager plante tu te tues. Un load balancer type IPVS est plus facilement duplicable a grands coups de HB pour sync la conf etc :-)

Clément

@Maxime Okai :) Je te fais confiance !

Autre question qui pourrait être intéressante ; Tu as commencé à héberger VDM sur quel genre de plateforme ? un dédié ? un mutualisé ?

Merci :)

Christophe

Moi je sais comment paye @Maxime par mois de serveurs mais je ne peux pas le dire (vu qu’il ne veut pas trop apparemment), ah ah !

Darklg

Tu m’as vendu du rêve.
Merci pour l’article :)

Florent Clairambault

Merci de filer ta configuration, on a finalement peu de retour sur les « grosses » architectures MySQL.

Pour moi ça reste risqué et t’augmentes les risques à chaque ajout de serveur. On diminue déjà les risques en mettant des serveurs esclaves pour la lectures. Ça demande un peu de réécriture du code mais si ce n’est pas trop mal fait au départ c’est très gérable.

Tu ne parles pas vraiment des problématiques de synchro dues au retard de propagation (erreur 1062). Pour l’auto-increment, tu gères ça avec un increment à 7 et un offset décalé sur chaque serveur ou tu ne le gères pas ?

J’avais la même config sauf que c’était juste du master/slave master/slave. Ça marchait du tonnerre et c’était très fiable. La problématique n’était pas la performance mais la sécurité (les deux serveurs étaient sur deux réseaux différents).

Est-ce que tu utilises bien un système de mise en cache comme memcached et/ou apc ? Ca permet de réduire énormément le nombre de requêtes et gagner considérablement en performances.
Avec memcached tu peux mettre en cache des données partagées comme les votes et avec APC tu peux mettre en cache des données qui ne vont plus ou peu bouger.

Cactuz

Franchement intéressant comme architecture, j’ai presque tout saisi. C’est pas mal ce genre d’articles car les gros sites restent discret sur leur montage reseau.

Raphaël

Intéressant. Je rejoins les commentaires précédents, as tu envisagé des solutions de BDD « distribuées » (je pense à Cassandra) qui te faciliteraient à priori grandement la tâche pour garder des perfs convenables (lectures/écritures « scalent ») et une haute disponibilité (pas de single-point-of-failure et ajout facilité de machines). Un article très intéressant à ce sujet : http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king

ALexandre "bragon" Legrix

@Maxime : Heureux de t’avoir fait plaisir :)
MySQL Multi Master/Slave ça rox.

Sinon juste pour rire hein :))) OVH vient de DÉCOUVRIR qu’il était POSSIBLE de mettre un SSD et un HDD dans une même machine :))) (C’est assez drôle).
Sachant que SD le propose depuis … fiou … longtemps….

Siko —

Pareil que au dessus, c’est toujours intéressant de voir comment fonctionne un gros site, auparavant je n’avais vu que skyrock qui malgré le contenu pitoyable qu’il heberge, a une technique assez pointu et intéressante a observer.

Sinon pour cassandra, ca change quand même pas mal de chose et je pense pas que vdm soit encore assez gros pour en voir un quelquonque intéret. D’ailleurs je ne vois d’ailleurs pas l’intéret pour twitter aussi d’ailleur j’ai due pas tout comprendre dans cassandra. mais pour moi l’intéret c’est la gestion complétement différente des relations entre table que ca apporte. (Je sais même pas si on peut parler de relation d’ailleurs) et je vois pas trop a quoi cela pourrait servir a vdm. Avant cassandra il y a déjà posgresql qui est un peu plus optimiser pour certaine tache..

Anne-Claire

Question (très) con: Pourquoi avoir besoin d’un hébergeur? Les serveurs ne suffisent pas? Je ne m’y connais absolument pas, j’ai un vieux serveur qui ne supporte que le mySQL et le php4 mais à priori c’est mon seul hébergeur.

Anne-Claire

Je voulais dire qui ne supporte que le SQLite (il faudrait une fonction Edit sur les commentaires)

Maxime —

@Florent : Il y a beaucoup d’écriture avec les votes, et peu de lectures avec le cache. En vrai le site fonctionne en grande partie grâce à memcache mais ça sera l’objet du prochain article :)

Sinon pour l’incrémentation oui l’offset est à 7 et c’est décalé sur chaque id, comme toute bonne réplication circulaire.

@Raphaël : Je ne l’ai pas encore envisagé pour l’instant car les performances ne sont pas un problème pour l’instant, la réécriture de tout le code est un point trop bloquant.

@bragon : Ahah :)

@Anne-Claire : Comme son nom l’indique, l’hébergeur héberge mes serveurs dans le datacenter et s’occupe de les gérer au niveau du réseau notamment, c’est donc un élément indispensable.

Florianl

Et sinon tu utilises quoi comme logiciel pour faire tes jolis schémas ? (c’est mon voisin de bureau qui demande).

koskoz

Article très intéressant en effet.
Merci.

vicnent

Maxime : ton métier, c’est chef d’entreprise dont stratégie etc. Le métier de Béta et Cie, c’est de gérer des anecdotes (au sens large) : pourquoi ne soutraites tu pas tout cela ? Pourquoi une ferme et pas un cloud amazon par exemple ?

Maxime —

@vicnent : Je ne suis pas gérant de Beta&Cie :) Et le but de Beta&Cie est d’éditer des sites Internet, ça comprend la conception (code, déploiement), et maintenance au quotidien. De plus un cloud Amazon ne se dispense pas de maintenance et revient beaucoup plus cher que ma solution. Sans compter le fait que si quelque chose ne marche pas sur ton Amazon t’auras bien du mal à trouver l’origine de la panne, voire du support.

Hwd

Très intéressant ! Sympa d’avoir des retours sur une infra à fort trafic.

J’ai pas mal de questions :
1- Pourrais-tu légender ton schéma ? f1/f2 = ? mgt = management/backoffice ?
2- Combien as-tu de connexions SQL simultanées/serveur MySQL en moyenne ?
3- As-tu déja benché ton infra, connais-tu ton % restant de visiteurs que tu peux accueillir ?
4- Comme Florent Clairambault te l’a déjà demandé, tu utilises APC ? Si oui, as-tu remarqué une nette amélioration des perfs ?
5- As-tu déja songé à migrer vers du cloud type Amazon WS ?

Pour ceux qui s’intéresse à l’optimisation MySQL, il y a le bouquin d’Olivier Dasini, qui avait fait une conf sur MySQL au Forum PHP cette année, qui vient de sortir aujourd’hui :
http://dasini.net/blog/2010/03/09/audit-et-optimisation-mysql-5-2/

Maxime —

@Hwd : 1. Je le légende la semaine prochaine ! Pour mgt oui, f1/f2 = filers.
2. C’est écrit, 15k par seconde, donc divisé par 7 :)
3. Non je n’ai pas benché mais d’expérience ce n’est pas mysql qui flancherait.
4. Pour APC, PATIENCE !!! Je ne parle pas d’apache tout de suite :)
5. Répondu plus haut :)

michel v

Très intéressant, je suis un peu perplexe quant à la répli circulaire …et beaucoup quant à l’utilisation d’un unique memcache : si ton memcache plante, ton load balancer suivra-t-il la charge ?

Maxime —

@michel v: On le saura dans le prochain épisode :)

marc —

Salut.Merci pour ton article, c’est rare que les gens balancent leurs infrastructures comme ca.Je voulais savoir: on parle souvent de problèmes au niveau de la durée de vie des ssd ainsi que leurs performances en fonction du temps.A tu contesté ca surtout sur tes ssd qui sont en plus sollicités en permanence?Merci.

michel v

Répli à 7 et auto-increment : pourquoi ne pas simplement utiliser un serveur d’id qui te filerait des id au fur et à mesure, vu que ton code se fout pertinemment du serveur qui est appelé ?
Ou alors ton load balancer est plus intelligent qu’il devrait l’être ?

J’ai aussi du mal à voir comment avec des types de données aussi bêtes qu’anecdote, commentaire et vote, tu te retrouves à devoir avoir des histoires de tables temporaires. Index mal foutus ? Ou le site fait des trucs vraiment compliqués qui m’échappent ?
Pour ce problème de tables temporaires, l’utilisation d’un NoSQL en tant que « cache intelligent » peut peut être arranger les choses.

xiu

Très intéressant comme article, merci :D

Florianl

@Maxime Merci pour mon voisin :)

Christophe

« une série d’articles qui ne va peut-être pas intéresser grand monde »
Grosse erreur (volontaire?) :)

C’est un article très intéressant, simple et bien écrit, comme en témoignent les 47 commentaires déjà présents.
En un mot, MOAR.

spud —

le nombre de bases me laisse sans voix … c’est quoi la justification d’un nombre aussi important, sachant que tu dis que c’est du bon matos ?

banu —

@michel_v: ce qui commence a ce faire beaucoup en se moment c’est l’utilisation de redis comme remplacant de memcache, qui a l’avantage de faire du K/V comme memcache en memoire mais qui flush sur le disque dur tout les X secondes.

Sinon je pense que VDM n’a pas besoin de techno comme cassandra ou hadoop l’archi ne le justifiant pas.
Par contre passé sur du nosql avec du couchdb ou mongodb pourrait etre judicieux, la structure des tables du site me semblant relativement peu complexe.

my 2cents

Maxime

@michel v: « Simplement » est un mot en trop non ? Puisqu’on n’a pas besoin que les ID se suivent obligatoirement, utiliser un serveur d’id compliquerait le process pour rien.

Et je ne vois pas le rapport entre la « bêtise » des données et le fait que les tables temporaires existent. Quand tu fais un SELECT sur une table de 1 million d’enregistrements, il est préférable que la table temporaire se crée le plus rapidement possible, non ? Peu importe si je SELECT des données de la NASA ou des VDM :)

@spud : Tu confonds le nombre de bases et le nombre d’entrées dans les tables.

michel v

Justement, c’est devoir faire un SELECT sur 1 million d’enregistrements qui est le problème. :)
Il y a sûrement moyen d’analyser la visite type du site, et d’optimiser dans ce sens (en dénormalisant à foison, et en générant tout de manière asynchrone).

@banu : Tu parles à un convaincu, je suis utilisateur de Redis depuis plusieurs mois. :)

Maxime

@michel v: Ces SELECT là sont rares mais ils existent puisqu’on permet aux utilisateurs de faire des recherches et qu’il y a des commentaires. Ils sont rares car largement supportés par un serveur de cache mais j’aborde le sujet la semaine prochaine, MySQL est loin d’être la première source pour afficher les données, mais quand tu fais 8 millions de pages vues par jour il est quand même un petit peu sollicité quoiqu’il arrive :)

Ricola —

C’est hébergé sur Reims dans le datacenter Ikoula ?

vicnent

question tout bête : 8.10^6 pages vues par jour, sur 12h cumulées (mais 24 ne changent pas grand chose), ça fait du ~ 160 pages / sec. Or tu parles de 15 000 requetes sql / sec. Je ne comprends pas bien : comment tu passes de quelques centaines de pages vues par secondes à 15 000 requetes sql par seconde, sans compter la partie cache ?

Maxime

@vicnent : Ahah, je savais que quelqu’un ferait un calcul comme ça. Même s’il est complètement faux (pourquoi tu prends 12 heures ? Ça change pas grand chose non ça change tout, genre le double), il n’y a pas que les pages, il y a toute l’API, et des calculs comme la modération etc.

vicnent

@maxime : je te posais une question à propos d’un ordre de grandeur. Tu as d’un coté de l’ordre de 180 (12 heures) ou 90 pages (24h) vues par secondes, de l’autre 15 000 requetes sql par seconde. l’ordre de grandeur reste le même : ~100 d’un coté, 15x plus de l’ordre.

je ne connais pas le ratio des pages chargées depuis un cache (par exemple, moi, je lis toutes les VDM fr, mais depuis google reader, tout le reste, niet, j’avoue que je ne sais même pas quel tête à le site :-)) mais comment expliques tu que sur _une_ page chargée, on a ~185 requêtes sql générées, pages en cache compris. C’est juste que le rapport m’apparait dément (15000 * 86400 / 8.10^6)

Maxime

@vicnent: il n’y a pas autant de requêtes sur VDM/FML, et je n’ai vraiment pas le temps d’expliquer toutes les requêtes de toutes les pages de tous mes sites par contre, désolé :)

Yannick —

Trente-quatre laitues multipliées par cinq bananes font trente diplodocus.

spud —

Non je ne confond pas le nombre de bases et le nombre d’entrées dans les tables, c’est quoi cette réponse :)
Ca me parait overkill d’avoir autant de bases, j’attends une justification genre, ca tenait pas la charge avec moins, ce qui me parait toujours étrange sachant que tu caches devant, où alors t’as vraiment du matos léger et / ou du code qui devrait etre gravement optimisé. Ca m’intrigue, c’est tout :)

Maxime

@spud: Ok, désolé, alors je ne vois pas où j’ai mentionné un nombre de bases dans mon article… :x

spud —

Oh pardon. J’ai tendance à appeler un serveur qui tient un MySQL une base, desolée, abus de langage :/ .

Maxime

@spud: Partant de ce constat tu imagines bien que j’avais du mal à comprendre ce que tu disais dans ton premier message, pas besoin de me prendre de haut :)

Je suis conscient qu’il y a plus de serveurs qu’il n’en faudrait, mais en même temps il vaut mieux ça que pas assez. Un serveur est là pour les calculs uniquement, pour être sûr que les tables sont toujours libres quand les calculs doivent être faits. Et puis la charge n’est malheureusement pas uniforme, à 6h du matin un seul serveur suffirait mais à 23h (heure française), quand les gens arrivent sur FML, les 6/7 serveurs sont bien utilisés et permettent d’avoir un trafic fluide.

spud —

Okay :) Et je ne voulais pas transmettre l’idée que je te prenais de haut, navrée.

David —

Une question un peu hors sujet, tu héberges BetaSeries sur la même archi ou c’est complètement différencié ? Ou même ton blog ? Parce que le cdn a l’air d’être au nom de betaetcie non ?

Maxime

@spud: Pas de soucis :)

@David: Oui, comme dit au début, tous les sites sont hébergés sur l’infrastructure. Je ne vois pas ce que le nom de domaine du CDN a à voir là dedans (et c’est le thème d’un des futurs articles) ^^

David —

Non, le nom de domaine du CDN n’a pas grand chose à voir, c’est vrai, ca me laissait juste penser que ca pouvait être mutualisé, ce que je n’avais pas lu, vu que j’avais loupé un paragraphe dans ma lecture ;)

Kévin Descoubes

2 petites questions :
1. Plusieurs personnes ont déjà demandé, mais tu n’as pas eu le temps de répondre encore : quel est l’intérêt d’une réplication circulaire plutôt qu’un cluster mysql (avec un moteur NDB) ?
2. Que se passe-t-il si un serveur mysql tombe ? La chaine est cassée, certes, mais la suite, que dois-tu faire, qu’est ce que cela implique ? La répartition se fait via du DNS Round Robin ?

(ok, ca fait un peu plus que 2 questions en fait …).
En tout cas, vraiment un très bon article, merci beaucoup !

Maxime

@Kévin: 1. D’autres ont bien répondu à ma place, et je rajouterais que le moteur NDB met toutes les données des tables en RAM…
2. La répartition se fait par un load balancer, j’en parlerai plus tard. Si un serveur tombe et qu’il n’est pas réparable il faut refaire la réplication avec ceux qui restent, après je ne rentre pas dans les détails car ce serait vraiment trop long.

Sebastien —

Super intéressant, merci pour le fait de partager tout ça, vivement la semaine prochaine. ;)

Makash —

Bravo pour l’article. En tout cas, il faut être sacrément sûr de la qualité de son taf pour l’afficher de cette façon. C’est quand même s’exposer à des attaques, motivées ou non, visant à discréditer tes compétences.
Good job

Lexel —

Merci de partager, c’est pas tout les jours qu’un gros site comme VDM livre ses petits secrets.

John —

Bonne initiative ces articles, la suite est attendue.

Maxence

Impressionnant, vivement la suite :D

Pour info twitter utilise un serveur NoSQL (Not Only SQL) depuis peu.
http://incubator.apache.org/cassandra/

Romain

Merci Maxime d’avoir partagé ça, c’est très intéressant ! Vivement la suite =)

devilox —

Merci pour ce doc Maxime, très utile !
J’aurais une question sur ton modèle de données…
Tu parles de 630M de votes… même si tu as 2 sites, un modèle « normal » serait d’avoir une seule table « VOTES »… mais une table à plus de 300M d’entrées, comment gères-tu ça ?

Maxime

@devilox : Avec des index. Et du cache.

Fanning

Par hasard tu n’aurais pas un tuto pour la gestion multimaitres car c’est pauvre de ce coté là ?
Merci d’avance

Fanning

Merci pour ce tutoriel, il est extras car il y a un coté pratique. Vraiment merci.

Mathieu Laurent —

@nosqlfans : pour le moment, la recherche « mysql » sur http://www.fmylife.com ne renvoie aucun résultat. Ca prouve que mysql a encore de beaux jours ;-)

@maxime : Voici une présentation de développeurs de facebook au fosdem, ça devrait t’intéresser.

« Scaling Facebook with OpenSource tools » –> http://www.youtube.com/watch?v=HAzeJTgFwDc

Jérôme M.

Quel est ton ratio d’écritures/lectures en base de données ?
Parce que je me dis, qu’en ajoutant un serveur tu rajoutes une écriture en plus.
À priori la lecture peut se faire sur un seul serveur de base de données.
Donc est-ce vraiment scalable ?

Et je comprend qu’un service comme twitter (qui fait en majorité de l’écriture de données) soit passé sur un NoSQL.

Fin je sais pas si tu vois où je veux en venir :)

Laisser un commentaire

Note : Pour qu'un commentaire soit affiché, votre e-mail doit être valide, et votre texte ne doit pas comporter d'insultes. Si vous ne respectez pas ça, n'essayez même pas de commenter.