YouTube, racheté par Google en 2006, utilise un composant Vitess, appelé Vtocc, pour son service de diffusion de vidéos qui est consulté par 800 millions d'utilisateurs chaque mois. Vtocc « s'est montré très fiable, et il offre tous les outils nécessaires pour permettre de l'utiliser dans un environnement de production », a déclaré l'architecte de YouTube », Sugu Sougoumarane lors d'une intervention à la conférence LISA Usenix (Large Installation System Administration) qui s'est tenue à San Diego la semaine dernière. Celui-ci a longuement parlé de Vitess en même temps qu'un autre ingénieur de YouTube, Mike Solomon. Cette version de Vitess écrite en langage Go pourrait contribuer à faire reconnaître que ce langage de programmation relativement nouveau -  Google a présenté la première version de Go en mars dernier - pourrait être utilisé dans des environnements de production à grande échelle.

YouTube sert plus de 4 milliards d'heures de vidéo chaque mois. Chaque minute, le service reçoit environ 72 heures de vidéo. Bien que YouTube stocke toutes ses vidéos directement dans un système de fichiers, il utilise MySQL pour stocker les métadonnées nécessaires pour la diffusion de chaque vidéo, comme les préférences utilisateurs, l'information publicitaire, les particularités liées à la localisation et d'autres bits d'information. « YouTube aime MySQL pour sa fiabilité », a déclaré Mike Solomon, l'un des ingénieurs à l'origine du développement du service. « La base de données Open Source présente quelques bizarreries, mais elles sont bien connues et peuvent être atténuées assez facilement », a-t-il ajouté. Mais, MySQL a aussi des problèmes avec la mise à l'échelle - en tout cas pour le genre de mise à l'échelle d'un service aussi important que YouTube. « Le problème majeur de MySQL, c'est que, une fois que l'on a atteint un certain niveau d'utilisation, on doit passer beaucoup de temps à gérer le matériel et le nombre d'instances disponibles », a expliqué l'ingénieur. « Nous voulons automatiser cette partie-là et faire en sorte que toute action compliquée, et potentiellement source d'erreurs, puisse trouver ses propres solutions».

Des capacités de gestion supplémentaires avec Vitess

MySQL n'est pas très efficace lorsqu'elle est utilisée dans des déploiements de grande envergure. En règle générale, chaque connexion à MySQL nécessite son propre thread sur le serveur. Cependant, cette approche n'est pas réalisable à l'échelle de YouTube, « Effectuer des dizaines de milliers de connexions n'est pas vraiment viable », a ajouté Mike Salomon. Par ailleurs, les ingénieurs étaient plutôt réticents à l'idée de modifier le code de la base de données elle-même, faisant valoir que changer ce code complexe et quelque peu difficile à comprendre pouvait avoir des répercussions imprévisibles. « MySQL est compliquée. C'est au moment où l'on croit avoir compris ce que l'on fait que l'on commence à avoir des ennuis », a encore expliqué Mike Solomon.

Vitess a été créé pour fonctionner en conjonction avec MySQL pour offrir des capacités de gestion supplémentaires. Le composant Vtocc, par exemple, regroupe des milliers de requêtes SQL entrantes dans un plus petit nombre de lots, ce qui permet à MySQL de mobiliser moins de ressources pour accomplir ces requêtes. Vtocc analyse également les requêtes de façon à ce qu'elles soient exécutées plus efficacement, et réduit le travail généré par les doubles requêtes en réutilisant les résultats d'une requête pour en satisfaire d'autres identiques.

Un code rapide à compiler

« Go a permis aux développeurs de YouTube d'être plus productifs qu'ils ne l'auraient été s'ils avaient utilisé un langage plus traditionnel », a déclaré Sugu Sougoumarane. « Le code de Go est également rapide à compiler », a- t-il ajouté. Ainsi, Vitess peut compiler en binaires 30 000 lignes de code en 30 secondes environ. Et grâce à ses riches bibliothèques, de nombreuses tâches n'ont pas besoin de grosse programmation. Par exemple, l'ingénieur de YouTube a écrit une routine de 105 lignes qui nettoie périodiquement les logs. Cette fonctionnalité n'aurait pas pu être écrite en quelques lignes en langage C ou C++. « Ce n'est qu'un exemple de la manière dont Go travaille », a encore déclaré Sugu Sougoumarane. « Les fonctionnalités du langage sont bien pensées. Go permet de s'exprimer d'une manière beaucoup plus élégante que les langages traditionnels ». L'architecte de YouTube a également salué la congruence de Go, indispensable pour une utilisation avec des processeurs multicoeurs. « Vous n'avez pas à vous soucier de la gestion des threads. Go les gère pour vous », a-t-il expliqué.

L'architecte de YouTube a néanmoins admis que « le langage avait aussi quelques inconvénients ». Selon lui, la gestion des erreurs pourrait par exemple être améliorée, de même que la planification et la collecte des déchets. Selon Mike Salomon, « au fil du temps, Vitess prendra en charge d'autres fonctions, comme la réplication et la fragmentation automatique, c'est-à-dire qu'une base de données pourra se développer sur plusieurs serveurs sans aucune intervention de la part des administrateurs.