Microsoft a migré Real-Time-Channel vers .Net 7 pour de meilleures performances

Par:
fredericmazue

mar, 13/02/2024 - 14:16

Real-Time Channel (RTC) est le service Websocket de Microsoft Office Online qui alimente les expériences de collaboration en temps réel pour les applications Office. Le service a été écrit en .NET Framework (4.7.2) avec IIS et ASP.NET. Il est principalement construit autour d'un service SignalR fournissant une communication en temps réel et dispose de fonctionnalités supplémentaires telles que le routage, la gestion de session et les notifications.

En avril 2021, Microsoft s'est rendue compte de la nécessité de migrer RTC vers un .NET moderne. A l'époque il s'agissait de .NET 5. Finalement le premier déploiement a été lancé avec .NET 6. Puis la migration a été poursuivie vers .NET 7.

Au final, grâce à cette migration, Microsoft met en avant les résulats suivants :

  • 30 % de réduction de charge processeur
  • Une réduction correspondante de 30 % du COGS de la machine virtuelle.
  • Réduction de 60 % de la mémoire et du temps GC.
  • Diminution moyenne de plus de 50 % de la latence pour les principales API.

Cependant cette migration ne s'est pas opérée dans difficultés. Par exemple, lors de la migration de .NET 6 vers .NET 7, Microsoft a soudainement remarqué une augmentation significative de 3 à 4 fois de la taille du tas de mémoire. La raison est que l'implémentation de GC dans .NET 7 a subi une refactorisation et une refonte majeures par rapport à .NET 6 et aux versions antérieures. Microsoft s'est rendue compte que son modèle d'utilisation des websockets, qui utilise fortement des handles épinglés asynchrones, n'était pas optimal pour la nouvelle implémentation de GC, et a dû utiliser l'option d'extensibilité de .NET 7 pour fonctionner avec le module GC de .NET 6. Cela a permis de maintenir une utilisation optimale de la mémoire, tout en bénéficiant des dernières fonctionnalités de .NET 7 et supérieures.

Un très intéressant billet de Microsoft partage d'autres détails de cette migration de RTC vers .NET 7.