Derrière la technologie qui a sauvé YouTube d'un cauchemar d'évolutivité

Derrière la technologie qui a sauvé YouTube d'un cauchemar d'évolutivité
En 2010, YouTube était dans une situation difficile. La plateforme se développait rapidement et son infrastructure ne parvenait pas à suivre le rythme. Injecter plus de CPU et de mémoire n’a pas aidé ; Il n'arrêtait pas de s'affaisser au niveau des coutures. C'est à ce moment-là que deux ingénieurs YouTube, Sugu Sougoumarane et Mike Soloman, ont décidé de prendre du recul et d'examiner le problème sous un angle différent : "Quand nous nous sommes assis et avons écrit une grande feuille de calcul de tous les problèmes et solutions, et quand nous avons examiné "Il était évident que nous devions créer quelque chose qui se situe entre l'application et la couche MySQL et modérer toutes ces requêtes", a déclaré Sugu lors d'une réunion avec LaComparacion Pro en marge de la Percona Live Conference Europe 2019 à Amsterdam. La solution au problème est venue sous la forme de Vitess, qui facilite essentiellement la mise à l'échelle et la gestion de grands groupes de bases de données MySQL. Sugu nous raconte que le projet a beaucoup évolué depuis sa création sur YouTube. À l'époque, Vitess était principalement confronté à des problèmes d'évolutivité : "Mais au fil du temps, dès que ce proxy a été implémenté, les utilisateurs ont commencé à demander de plus en plus de fonctionnalités. Et nous avons grandi de manière organique jusqu'à ce que nous en soyons aujourd'hui."

Routage transparent

Sugu dit que ses utilisateurs préfèrent Vitess au clustering en raison de la flexibilité qu'il offre : « Le clustering MySQL pose des problèmes d'extension. Ainsi, lorsque vous souhaitez évoluer, vous souhaitez que les parties s'emboîtent de manière plus lâche. Mais si vous utilisez le clustering (MySQL »), cela n'est pas le cas. "Je n'ai pas cette flexibilité pour déplacer les choses plus facilement. Je pense donc que c'est pourquoi les utilisateurs préfèrent Vitess." Une exigence essentielle pour faire évoluer une base de données est de gérer la façon dont une base de données est divisée ou partagée dans le langage DBA. L'une des raisons de la popularité de Vitess est son système de fragmentation efficace. VTGate, l'un des deux principaux proxys de Vitess, initialement conçu comme un consolidateur de connexions, devient un élément important de la solution : « Lorsque nous avons créé Vitess pour la première fois, nous avions besoin que l'application soit parfaitement consciente. Par conséquent, l'application devait dire « Je Je veux envoyer cette requête, je veux l'envoyer à ce fragment. " Ce qui signifiait que si vous décidiez d'utiliser Vitess, vous deviez réécrire votre application pour effectuer des appels prenant en charge le fragment et Vitess gère le cluster pour vous. " Cela a changé en 2013, lorsque VTGate a pu acheminer les requêtes standard vers le bon fragment : "Cela signifiait que l'application n'avait plus besoin de connaître les fragments... n'importe quel autre pilote de base de données peut désormais utiliser Vitess. Sugu nous dit que le fournisseur de commerce électronique indien , Flipkart, propriété de Walmart, a été le premier à prendre note de cette fonctionnalité et à créer un pilote JDBC pour Vitess, ce qui leur a ensuite permis de porter facilement leur application. dans Vitess Cette fonctionnalité, qui, selon Sugu, était relativement simple à mettre en œuvre, a modifié les perspectives du projet.

IaaS

(Crédit d'image: Pixabay)

Solution cloud native

Vitess est une solution cloud native. Sceptiques, nous avons demandé à Sugu s'il ne s'agissait pas simplement de se conformer à des mots à la mode. Il explique que la nature cloud-ready de Vitess peut être attribuée au gestionnaire de cluster de Google appelé Borg. Vitess a été initialement conçu pour fonctionner dans les centres de données de YouTube. Jusqu'en 2013, où Google décide de les déplacer en interne chez Google : « Le logiciel Borg de Google est une bête car c'est un environnement hostile pour les systèmes de stockage. Il fallait vraiment faire tourner Vitess dans cet environnement où Borg viderait, à sa guise, sa capsule et effacerait ses données, lui permettant de survivre dans cet environnement. » Cela signifiait que les développeurs devaient créer des fonctions de résistance dans Vitess pour garantir que les pods seraient ressuscités après la stagnation de Borg : « Et pour la plupart, ce sont les mêmes règles que Kubernetes. Dans Kubernetes, si un pod tombe en panne, ses données sont perdues. Nous étions donc presque prêts pour Kubernetes, avant la naissance de Kubernetes. "De plus, ils ont également dû apporter des modifications subtiles au code Vitess car le cycle de vie du cloud Les déploiements sont très différents de leur cycle de vie sur bare metal : « Sur bare metal, on peut avoir un master pendant six mois. Chez Google, une semaine serait un miracle, car Google réorganisait constamment les pods, ce qui finirait par le faire tomber. " Un autre aspect de cette reprogrammation a permis de préparer Vitess à l'environnement cloud en constante évolution : " Lorsque (le planificateur de Google) est reprogrammé, il affiche parfois autre chose dans la même direction. Par exemple, il est possible de reprogrammer un fragment et de le programmer dans un autre. Vous ne le saurez même pas car le schéma est correct, vous soumettez une demande et il vous enverra des réponses. Nous avons donc dû renforcer notre protection contre ces choses.

(Crédit d'image: Crédit d'image: Shutterstock / Imilian)

Open Source

Comme tous les bons ingénieurs, Sugu et son co-développeur ne voulaient pas réimplémenter leur solution d'évolutivité à partir de zéro tant que leur carrière les menait ailleurs. Ils ont donc demandé à Google d'approuver la fourniture open source de Vitess, qui a approuvé la demande après s'être assuré qu'il n'y avait rien de propriétaire dans son code. C'est l'Open Sourcing Vitess qui a finalement conduit Sugu à quitter YouTube pour créer une société de services autour de Vitess appelée PlanetScale : « YouTube, à un moment donné, était satisfait de l'endroit où se trouvait Vitess. Mais ce qui s'est passé, c'est que la communauté était au courant du projet et qu'il y avait beaucoup d'intérêt de la part des gens qui voulaient l'adopter, ainsi qu'une forte demande de fonctionnalités. Ainsi, d'un côté, une entreprise qui ne voulait pas mutualiser ses ressources pour construire essentiellement un composant d'infrastructure et, de l'autre, un communauté sceptique qui hésitait à participer à un projet d'une entreprise dont la compétence principale n'était pas l'infrastructure. "C'est alors que nous sommes arrivés à la conclusion que ce projet avait pris de l'ampleur et que pour qu'il soit sain, il devait être géré par une seule personne". "YouTube a fait don du projet à la CNCF (Foundation for Native Cloud Computing), puis j'ai décidé de lancer PlanetScale avec mon co-fondateur."

Inverser la tendance

Sugu a expliqué que, pour l'instant, le plus important pour eux est que Vitess n'est pas encore une alternative : « Si vous allez à Vitess, 90 % de vos demandes fonctionneront (mais). vous devez gérer ces 10 % en une seule fois. d'une manière ou d'une autre." Il a également mentionné que Vitess ne prend pas encore en charge les requêtes OLAP (Online Analytical Processing). Mais ce n'est pas quelque chose qui les préoccupe beaucoup, car les utilisateurs n'exportent généralement leurs données que vers un système OLAP comme Snowflake, Pinot ou Presto : "Ce n'est donc pas un gros problème, mais ils veulent une solution unifiée." Sugu est enthousiasmé par une nouvelle fonctionnalité appelée VReplication, qui permet aux utilisateurs de « matérialiser une table d'un espace clé à un autre ». Comme les règles de matérialisation sont totalement flexibles, le nombre d'applications pour cette fonctionnalité est énorme : « Et cela résout également certains problèmes fondamentaux que pose le sharding lui-même. Par exemple, si vous avez une relation hiérarchique, il est facile de partager, mais ce n'est pas le cas. facile si vous avez plusieurs relations, VReplication résout ce problème en vous permettant de matérialiser la même table à plusieurs endroits. Cette fonctionnalité contient environ une demi-douzaine de cas d'utilisation illustrés par Sugu dans son discours lors de l'événement. Alors que nous concluons notre conversation, Sugu déclare que lui et son co-fondateur sont convaincus que l'industrie des bases de données a pris la mauvaise décision en s'éloignant des bases de données relationnelles dans des magasins de valeurs clés : « C'était une nécessité, car les bases de données de données relationnelles refusaient de répondre aux attentes. " La demande. d'évolutivité. S'ils avaient répondu à cette demande, les gens ne se seraient pas tournés vers les magasins à valeur ajoutée. Notre vision est, espérons-le, d'inverser cette tendance autant que possible, car désormais les bases de données relationnelles peuvent évoluer. "