Je cherchais une explication sur la raison pour laquelle Twitter devait migrer une partie de son middleware de Rails vers Scala. Ce qui les a empêchés de s’adapter à la stratégie de Facebook en ajoutant des serveurs à mesure que sa base d’utilisateurs s’étoffait Qu'en est-il de la technologie Ruby/Rails qui a empêché l'équipe Twitter d'adopter cette approche?
Ce n'est pas que Rails ne s'adapte pas, mais les requêtes de données "en direct" en Ruby (ou dans n'importe quel langage interprété) ne sont pas adaptées, car elles sont comparativement beaucoup plus chères en termes d'utilisation du processeur et de la mémoire que leurs équivalents de langage compilé. .
Maintenant, si Twitter était un type de service différent, qui avait la même base d'utilisateurs, mais servait des données qui changeaient moins fréquemment, Rails pourrait être une option viable via la mise en cache; c’est-à-dire éviter complètement les demandes en direct sur la pile Rails et décharger sur le serveur frontal et/ou le cache de la base de données en mémoire. Un excellent article sur ce sujet:
Comment Basecamp Next doit-il être si rapide
Cependant, Twitter n’a pas abandonné Rails pour des problèmes de dimensionnement seuls, ils ont opéré, car Scala, en tant que langage, fournit certaines garanties intégrées concernant l’état de votre application que les langages interprétés ne peuvent pas fournir: s’il compile, des bugs comme le Les fautes de frappe, les appels de méthode incorrects, les déclarations de type incorrectes, etc. ne peuvent tout simplement pas exister.
Pour Twitter, TDD n'était pas suffisant. Une citation de Dijkstra dans Programming in Scala illustre ce point: "le test ne peut que prouver la présence d'erreurs, jamais leur absence". Au fur et à mesure que leur application grandissait, ils rencontraient de plus en plus de difficultés à détecter les bugs. La tournée des mystères magiques devenait un obstacle au-delà de la performance, ils ont donc pris la relève. Un succès retentissant: Twitter est pour Scala ce que Facebook est PHP (bien que Facebook utilise son propre préprocesseur C++ ultra rapide, il est donc très trompeur ;-))
Pour résumer, Twitter a fait basculer performance et fiabilité. Bien sûr, Rails a tendance à être à l'avant-garde de l'innovation, de sorte que les applications du trafic mondial non liées à Twitter de 99% peuvent se débrouiller avec un langage interprété (bien que je sois désormais solidement du côté de la langue compilée Scala est trop beau!)
Aucune plate-forme ne peut évoluer à l'infini tout en gérant des ensembles de données complexes qui changent d'un moment à l'autre. La langue et l’infrastructure importent, mais la façon dont vous construisez votre site et les modèles d’accès aux données importent davantage.
Si vous avez déjà joué à des jeux tels que Transport Tycoon ou Settlers où vous devez transporter des ressources, vous saurez comment vous devez rester au courant des infrastructures de mise à niveau à mesure que l'utilisation augmente.
La mise à l'échelle de plates-formes telles que Facebook et Twitter est une tâche sans fin. Vous avez de plus en plus d’utilisateurs, et on vous demande d’ajouter plus de fonctionnalités. Il s'agit d'un processus continu de mise à niveau d'un bit, ce qui provoque plus de stress sur un autre bit.
Lancer le serveur sur le problème n'est pas toujours la solution et peut parfois causer plus de problèmes.
http://highscalability.com/scaling-Twitter-making-Twitter-10000-percent-faster renvoie à un ensemble de messages sur les modifications, y compris un historique correct des mesures prises au fil du temps.
La version courte indique que Ruby and Rails n’a pas fourni les performances et la fiabilité requises pour le service. Compte tenu de l'ampleur, ce n'est pas surprenant. la plupart des solutions commerciales ne sont pas satisfaisantes à très grande échelle.
Une évolutivité élevée couvre beaucoup de questions relatives à l'architecture de ce haut de gamme, ce qui permet de répondre également à des questions plus générales dans le domaine.
Ils auraient pu utiliser plus de matériel, mais c’est bien plus cher que d’écrire du code plus efficace. Comme beaucoup de frameworks de haut niveau, Ruby on Rails est excellent à bien des égards, mais la haute performance n'en fait pas partie. Les langages compilés seront toujours plus rapides que les langages interprétés.
Facebook (et Google) évoluent en ajoutant plus de serveurs, mais ils répartissent leur application en différents services. Ces services communiquent via une interface et un type convenus, et ils sont désormais libres de les intégrer à toute technologie qui leur semble appropriée. Le fait que vous lisiez que Facebook utilise php ne signifie pas que tous leurs services back-end sont desservis par php (et cela n’a aucun sens, car dans SOA vous pouvez choisir n’importe quelle pile technologique).
Je pense que cette vidéo est la meilleure réponse à votre question:
"De Ruby à la machine virtuelle" https://www.youtube.com/watch?v=ohHdZXnsNi8
Je pense qu’un élément important qui manque ici est la plate-forme. Oui, nous avons eu l'argument compilé vs interprété et quelques autres. Mais la plate-forme constituait un aspect très important. Il existe différentes machines virtuelles Ruby, mais aucune n’a plu à Twitter, bien qu’elle l’a réglé un peu. Mais scala fonctionne sur la machine virtuelle Java et les ingénieurs de Twitter ont une belle expérience goog avec cela. Pourquoi ils n’ont-ils pas essayé/choisi JRuby? Eh bien, je suppose que les raisons mentionnées ci-dessus entrent en jeu.