Bing.com tourne désormais sur .NET Core 2.1, un choix technique qui lui a permis de gagner en performance,
mais aussi en agilité
Mukul Sabharwal, membre de l’équipe d’ingénieurs responsables du développement de Bing.com, a expliqué que la pile frontale de Bing est principalement écrite en code géré en couches dans un modèle MVC. La plupart du code de logique métier est écrit en tant que modèles de données en C # et la logique de vue est écrite en Razor. Cette couche est chargée de transformer les données de résultat de la recherche (codées en Microsoft Bond) en HTML, qui sont ensuite compressées et envoyées au navigateur.
« En tant que gardiens de cette plateforme frontale chez Bing, nous considérons la productivité des développeurs et l'agilité des fonctionnalités comme des composants clés supplémentaires dans notre définition du succès. Des centaines de développeurs s'appuient sur cette plateforme pour mettre leurs fonctionnalités en production et s'attendent à ce qu'elle fonctionne comme sur des roulettes », a précisé Mukul.
Depuis ses débuts, Bing.com fonctionne sur .NET Framework, mais il est récemment passé à une exécution sur .NET Core. Les principales raisons de l'adoption de .NET Core par Bing.com sont les performances (notamment des latences de diffusion), la prise en charge de l'installation côte à côte et de l'application locale indépendamment de l'installation à l'échelle de la machine (ou de son absence) et des images ReadyToRun.
« En prévision de ces améliorations, nous avons tenté de rendre le code portable sur les implémentations .NET, plutôt que de nous fier uniquement aux bibliothèques disponibles sous Windows et uniquement avec .NET Framework. L'équipe a commencé à aller dans cette direction avec .NET Standard 1.x, mais la surface de l'API réduite a entraîné des complications non négligeables pour nos migrations de code. Avec les plus de 20 000 API qui sont revenues avec .NET Standard 2.0, tout a changé et nous avons pu passer rapidement des modifications de code aux tests. Après avoir corrigé quelques bogues, nous étions prêts à déployer .NET Core en production ».
Images ReadyToRun
Les applications gérées peuvent souvent présenter des performances de démarrage médiocres, car les méthodes doivent d'abord être compilées en JIT avec le code machine. .NET Framework dispose d’une technologie de précompilation, NGEN. Cependant, NGEN exige que l'étape de précompilation ait lieu sur la machine sur laquelle le code sera exécuté. Pour Bing, cela signifierait exécuter NGEN sur des milliers de machines. Ceci, associé à un cycle de déploiement agressif, entraînerait une réduction significative de la capacité de service au fur et à mesure que l'application est précompilée sur les machines de serveur Web. De plus, l’exécution de NGEN requiert des privilèges d’administrateur, qui sont souvent indisponibles ou fortement contrôlés dans un paramètre de centre de données. Sur .NET Core, l'outil crossgen permet de précompiler le code en une étape de pré-déploiement, comme dans l'atelier de génération, et les images déployées en production sont prêtes à fonctionner !
Performance
Mukul assure que .NET Core 2.1 a permis d’améliorer considérablement les performances dans pratiquement tous les domaines de l’exécution et des bibliothèques.
« Nos données de production correspondent aux améliorations de performances significatives de .NET Core 2.1 (par rapport à .NET Core 2.0 et .NET Framework 4.7.2). Le graphique ci-dessous suit la latence de notre serveur interne au cours des derniers mois. L'axe des Y est la latence (valeurs réelles omises) et la chute précipitée finale (le 2 juin) correspond au déploiement de .NET Core 2.1 ! Cela représente une amélioration de 34%, grâce au travail de la communauté .NET », s’est réjouit Mukul.
Agilité du Runtime
Enfin, Mukul a fait valoir que la possibilité d’avoir une version xcopy du moteur d’exécution dans l’application signifie que Microsoft peut adopter des versions plus récentes du moteur d’exécution à un rythme beaucoup plus rapide.
« En fait, si vous jetez un coup d’œil au graphique ci-dessus, nous avons pris la mise à jour .NET Core 2.1 dans le monde entier lors d’un déploiement d’applications le 2 juin, soit deux jours après sa sortie ! Cela a été possible parce que nous utilisions notre pipeline d'intégration continue (CI) avec la mise à niveau quotidienne des fonctionnalités et des performances des tests de CI .NET Core tout au long de la version ».
Source : Microsoft
Voir aussi :
Vos applications Windows Forms et WPF sont-elles prêtes pour .NET Core 3.0 ? Microsoft veut s'en assurer et sollicite les développeurs
La préversion de Compilation hiérarchisée est disponible dans .NET Core 2.1, pour tirer le meilleur parti du démarrage et de l'exécution d'une app
Microsoft annonce la disponibilité de Blazor 0.5.1, son framework web .NET expérimental qui s'exécute au sein du navigateur
Microsoft annonce la sortie d'une préversion du Framework .Net 4.8, la build 3621 Early Access s'accompagne d'améliorations pour WinForms, WPF et plus
Microsoft annonce la sortie de .NET Core 2.1, avec de nombreux ajouts et améliorations qui viennent enrichir cet environnement
Partager