Actualités / Jeux

Création de microservices motivés par la performance

Chez Roblox, nous avons adopté le paradigme des microservices et construit une plate-forme de développement basée sur des conteneurs. Notre équipe de croissance internationale a lancé cet effort en mettant en œuvre des services qui ont adopté la nouvelle approche et ont introduit de nouvelles pratiques visant une concurrence et une évolutivité élevées. Nous examinons maintenant comment nous pouvons améliorer nos statistiques de performances globales et nous avons obtenu des résultats cohérents après quelques itérations.

Une fois que Roblox a décidé d'aller de l'avant avec le développement d'une plateforme orientée microservices et conteneurs, de nombreuses questions ouvertes ont été soulevées concernant la manière de:

  • Atteignez la maturité avec la plateforme et suivez la courbe d'apprentissage pour y arriver.
  • Réagissez à «l'inconnu» (comme les mises à jour fréquentes des dépendances, les mises à niveau d'outils et autres changements).
  • Simplifiez et réécrivez les stratégies, car nous venions d'une base de code monolithique qui répondait à trop de problèmes en même temps.
  • Gérez l'incertitude de production et l'état de préparation de l'infrastructure.

Notre équipe de croissance internationale a été le fer de lance idéal pour trouver ces réponses. Nos projets exploraient déjà un territoire inexploré pour faire de Roblox dans les pays internationaux une réalité – comme le soutien du contexte de conformité juridique et des réglementations relatives au temps d'écran. Dans le même temps, nos services alors-futurs, maintenant présents n'avaient pas de fortes dépendances avec le reste de la plate-forme. Par conséquent, des expériences pratiques avec notre processus de développement – de la planification à l'exécution – étaient attendues afin d'atteindre un nouveau niveau de compréhension.

Face à «l'inconnu»

Après une planification interstitielle et des réunions avec l'équipe de la plateforme Microservice (MSP), nous avons rapidement réalisé qu'un nouvel état d'esprit était nécessaire pour planifier «l'inconnu». Un tel état d'esprit devrait tenir compte de toutes les préoccupations ci-dessus tout en conduisant à la progression à chaque sprint.

Au fur et à mesure que le développement logiciel progressait, nous avons décidé d'investir dans la compréhension de toutes les couches, du code au cluster d'infrastructure avec cette approche de développement axée sur les performances. Semblable au développement piloté par les tests, nous ne cherchions pas seulement à réussir des cas de test ou à trouver des défauts, mais également à améliorer les performances.

Toutes les préoccupations ont été associées à des métriques pour suivre fréquemment le succès et assigner des actions concrètes à prendre à chaque sprint, pour chaque livrable. Ces préoccupations sont apparues comme des opportunités d'améliorer notre processus comme suit:

https://blog.roblox.com/

Mesurer en permanence le succès

La performance du bâtiment est le processus d'observation continue, de compréhension et de correction de ce qui se passe sur toutes les couches – code, conteneur et cluster – afin d'atteindre un fonctionnement optimal par itération.

Au début du développement de notre premier microservice, nous avons identifié qu'il était essentiel de disposer d'un cadre de test de charge pour mesurer le succès. Dans cet objectif, nous avons monté un projet utilisant Gatling pour modéliser des simulations de base. Nous avons également constaté que la collecte de métriques QA par build pouvait être simplifiée en utilisant Sonarqube.

Après quelques itérations, ces idées sont devenues un cadre conteneurisé plus cohérent capable de simuler des milliers de requêtes et de produire des tableaux de bord en temps réel lors des builds et des tests. Plus d'outils sont entrés dans l'équation afin de simplifier le suivi des performances. Aujourd'hui, nous avons les moyens de capturer des tableaux de bord provenant de sources multiples et de créer un rapport pour chaque caractérisation, test de charge ou événement significatif. Ce ne sont là que quelques exemples de la façon dont l'itération continue avec l'état d'esprit «performance du bâtiment» a déjà donné des résultats.

Quand «l'inconnu» devient familier

Faire du profilage, de la caractérisation et des tests de charge en continu après plusieurs sprints a porté ses fruits. Nous avons trouvé plusieurs problèmes sur différentes couches. Certains d'entre eux étaient faciles à résoudre, comme les optimisations de journaux. D'autres étaient moins simples, comme le réglage du serveur et la gestion des connexions. Chaque point sensible ou amélioration que nous abordons améliore au moins une métrique; soit en réduisant le temps de réponse moyen, soit en faisant plus de demandes avec les mêmes ressources.

Notre confiance a augmenté après que le premier service a atteint un grand nombre de trafic en production. Notre vitesse a considérablement amélioré sprint par sprint au fur et à mesure que de nouveaux services arrivent ou que les existants sont améliorés. Il y a encore place à l'amélioration, mais les premières améliorations étaient évidentes après seulement quelques mois.

https://blog.roblox.com/

Le renforcement des connaissances est également important et la distribution des fonctionnalités de plusieurs services à différents ingénieurs a donné de bons résultats. Cela a apporté de la valeur non seulement en raison du partage tribal, mais aussi parce que chaque fois que nous revisitons la performance, de nouvelles idées se font jour.

Comment faire de la performance une priorité

La détection des problèmes de performance dans le cadre du cycle de développement s'est avérée cruciale pour l'avenir de notre équipe et de notre entreprise. Les ajustements que nous avons apportés à notre processus agile et à nos pratiques de développement sont minimes par rapport aux avantages que nous avons observés. C'est aussi naturel que toute autre approche de développement traditionnelle basée sur les tests, mais avec l'avantage d'une meilleure prévision de l'évolutivité et de l'utilisation des ressources.

Une partie du travail que nous avons effectué est encore semi-automatique, mais l'avenir est prometteur. Notre plan est d'adopter l'automatisation complète du processus et de l'intégrer dans notre pipeline CI / CD. La nouvelle plateforme commence à adopter certaines de ces pratiques, et très bientôt toutes les équipes backend bénéficieront des outils que nous avons construits.

Le plus grand avantage est que l'investissement dans un esprit de développement axé sur la performance nous a amenés au bon endroit avec de nombreuses opportunités supplémentaires. Avoir à portée de main les moyens de suivre les performances contribue fortement à la maturité de notre nouvelle plateforme. Utiliser des conteneurs pour des services et des outils ajoute une manière cohérente de standardiser cette méthodologie et de la reproduire partout.

L'intégration de la performance à votre quotidien est la clé de l'avenir de tout service hautement évolutif.


Ni Roblox Corporation ni ce blog n'approuvent ou ne soutiennent aucune entreprise ou service. De plus, aucune garantie ou promesse n'est faite concernant l'exactitude, la fiabilité ou l'exhaustivité des informations contenues dans ce blog.

Cet article de blog a été initialement publié sur le blog Roblox Tech.