Twitter passe de MySQL à Cassandra

[ 3 ] Commentaires
Share

Je me demandais depuis pas mal de temps comment fonctionnait Twitter en terme de BDD, en me disant que vu l’énorme volume de données, il serait extrêmement compliqué pour eux d’être sur MySQL (dont j’ai lu un peu partout qu’au delà de 1 Go de données, il valait mieux passer sur des SGBD plus adaptés, tels PostGreSQL ou autres), notamment car tous les utilisateurs ne viennent pas souvent sur Twitter, et donc qu’il faut pour certains aller chercher très très loin dans les twitts (et donc dans la BDD). Je me disais donc que pour gérer ce volume de données, ils devaient être sur un SGBD type BigTable, qui me semblait plus adapté en terme de volumes à traiter (mais je le rappelle, je n’y connais pas grand chose, ou en tout cas pas plus que ce que j’ai appris à l’école).

Bref. Ce matin, je vois passer un article du SiteDuZéro expliquant que Twitter était sous MySQL, et qu’ils vont passer sur Cassandra, article très intéressant ce sur ce qu’il explique de l’infrastructure de Twitter, et des changements impliqués par ce passage sur un nouveau SQBD. J’ai donc voulu le reprendre ici, et j’ai vu avec plaisir que c’était possible, vu qu’il est sous licence CC BY-SA.

Twitter adopte la base de données Cassandra

Le réseau de micro-blogging Twitter, qui a annoncé récemment avoir atteint les 50 millions de « tweets » (les messages du réseau) par jour, cherche à modifier son infrastructure, en changeant de base de données. La célèbre MySQL, utilisée depuis les premiers jours, cède donc sa place à la base de données non-SQL Cassandra.

Une croissance toujours problématique

Lancé dans le courant de l’année 2006, Twitter a connu une croissance de plus en plus forte, tant en nombre d’utilisateurs qu’en activité. Une récente étude du cabinet RJMetrics parle ainsi de 75 millions d’utilisateurs fin 2009, qui, même s’ils ne sont pas tous actifs, constituent une charge de plus en plus difficile à supporter. Les administrateurs du site sont donc amenés à chercher de nouvelles solutions pour supporter cette charge.

De même que de très gros sites comme Facebook, Google ou Yahoo, les ingénieurs de Twitter doivent donc réfléchir à la façon dont le site est conçu, et éventuellement remettre en question leurs choix initiaux. Ainsi, si le site était initialement développé avec la technologie Ruby on Rails, le site a petit à petit migré vers une technologie jugée plus fiable, à savoir le langage Scala, développé au sein de l’EPFL. Celui-ci est utilisé conjointement avec la technologie Java, et assure selon Twitter de meilleurs performances.

Mais l’adoption de Scala ne fait pas tout : les performances d’un site tel que Twitter sont intimement liées à celles de sa base de données. Jusqu’à présent, MySQL était utilisée, conjointement au système de cache memcached. Le rôle d’un tel système est de soutenir la base de données en gardant en mémoire vive un maximum de données, que l’on peut de plus distribuer sur plusieurs serveurs. Les performances sont ainsi accrues, car la base de données est sollicitée moins souvent qu’auparavant.

De MySQL à Cassandra

Économiser les serveurs
Cette approche a fait ses preuves : memcached est utilisé par des sites aussi divers que Facebook, Youtube ou Wikipedia, conjointement avec MySQL. Mais pour Twitter, elle équivaut à déployer de plus en plus de serveurs. Selon Ryan King, un des ingénieurs responsables de la migration, un tel choix coûte de plus en plus cher en termes de main d’œuvre. Pour l’équipe, la solution était de changer de base de données, c’est à dire d’abandonner MySQL.

Plusieurs solutions ont été comparées, selon une liste de critères précis : serait-il nécessaire, et, si oui, suffisamment facile d’ajouter de nouvelles machines ? Est-ce que le système risquait de dépendre de composants dont les pannes seraient fatales à tout le site ? Est-ce que le nouveau système supporterait correctement une importante charge en écriture (par exemple liée à la réception de beaucoup de tweets en même temps) ? MySQL ne correspondait plus à ces critères, mais un certain nombre de bases de données d’un genre encore peu connu ont en revanche été consciencieusement examinées : les bases de données dites non-SQL.
Cassandra, une base de données non-SQL
Les bases de données non-SQL sont assez récentes, le mouvement NoSQL ayant à peine un an. Cette appellation regroupe en fait un ensemble de bases de données plus ou moins similaires, qui visent à rompre avec les caractéristiques habituelles des bases de données relationnelles (dont les bases de données SQL font partie), dans le but d’assurer de meilleures performances ou une meilleure capacité de déploiement. Si ces bases de données sont encore jeunes, elles sont pourtant soutenues (voire développées) et utilisées par de gros acteurs du web tels Google, Facebook ou Amazon.

Cassandra, la base de données ayant été retenue, a ainsi été initialement développée par Facebook dans le langage Java, puis publiée sous licence libre en juillet 2008. Elle est aujourd’hui maintenue par la Fondation Apache, par laquelle elle est d’ailleurs considérée depuis le 17 février 2010 comme étant un projet prioritaire. Son but est d’être décentralisée, de supporter facilement la montée en charge en écriture ainsi que l’addition de nouveaux serveurs sans interruption de service.

Une migration déjà effective

C’est donc exactement ce que recherchait l’équipe de Twitter, ainsi que le confirme Ryan King. Pour l’instant cependant, la migration de MySQL vers Cassandra n’est pas achevée : l’équipe expérimente la mise en production de la nouvelle base de données, en testant cette dernière en parallèle de MySQL. La première table bénéficiant de la migration, la plus importante, est la table des statuts, c’est à dire celle des tweets. Mais les ingénieurs semblent déjà enthousiasmés par les premiers résultats, puis qu’ils parlent déjà de faire migrer les autres tables vers cette base de données, ce qui les conduirait ainsi à ne plus utiliser MySQL.

Twitter n’est pas le premier site à faire un tel choix. En effet, le site Digg.com avait déjà choisi de passer de MySQL à Cassandra, et avait publié un avis plutôt positif sur cette migration. Avec Facebook, cela représente donc une sérieuse base d’utilisateurs pour Cassandra, qui se voit ainsi promettre un bel avenir.

Liens complémentaires

Vous serez peut-être intéressé :

3 commentaires sur ce billet

  1. Intéressant car je pensais également que mysql même avec memcached était plus limité que ça. Mais visiblement ça tenait bien la route, car twitter c’est quand même beaucoup de requêtes à la seconde je pense…

    RépondreRépondre
  2. Louis dit :

    @depannage informatique: C’est ce que je pensais aussi. Avec le trafic de Twitter, ça me semblait pas assez puissant (mais je n’y connais pas grand chose en memcache)…

    RépondreRépondre
  3. Chloef dit :

    Retour d’expériences : le Nosql serait déjà en perte de vitesse. Twitter a depuis renoncé à utiliser Cassandra pour ses tweets. Twitter utilise Cassandra uniquement pour les statistiques, les tweets sont gérés par Mysql. Idem pour Digg qui a connu beaucoup de soucis après son passage sous Cassandra. Quant à Facebook (créateur de Cassandra), il utilise Mysql pour 99% de ses bases de données. Abricocotier devrait faire un article sur les dernières évolutions de ces grosses plateformes.

    RépondreRépondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


cinq − = 3

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>