le .NET Chez Stack Overflow
Your Content Goes Here
15/01/2023
5min

Stack Overflow. Le site que tout développeur a déjà rencontré une fois dans sa vie. Ce forum aux allures de Reddit du code donne les réponses aux questions auxquelles se posent des millions de développeurs, chaque jour.
Il adresse aussi bien les questions évidentes posées par les plus grands noobs (dont je fus partie), que les questions avancées d’informatique quantique. Tout le monde y trouve son compte. Surtout Jon Skeet.
Il y a une question, cependant, que vous ne vous êtes peut-être jamais posée: En quoi StackOverflow lui-même est-il développé ?
La réponse est pourtant évidente (si vous avez lu le titre de l’article): .NET.
Durant la .NET Conf 2022(que nous avons couverte sur ce blog), une web-conférence a particulièrement piqué mon intérêt: .NET at Stack Overflow.
Roberta Arcoverde, Director Of Engineering à Stack Overflow, a pu y présenter la vision pragmatique de StackOverflow vis-à-vis de la conception de son application web.
Les chiffres
Stack Overflow c’est: 24 millions de questions et 34 millions de réponses depuis 2008.
Cela représente environ 225 millions de requêtes HTTP par jour, et 4TB de données échangées pour servir ces requêtes. 85 millions de ces requêtes permettent d’afficher des pages web.
Ces pages ont un temps de réponse moyen de 24 millisecondes.
C’est impressionnant. Maintenant qu’on y pense, Stack Overflow est globalement très rapide lors de l’affichage d’une page du forum. Je n’ai jamais entendu aucun développeur s’en plaindre.
Avec de telles performances, on imagine une architecture moderne basée sur une palanquée de micro-services déployés dans des conteneurs nuagiques.
Détrompez-vous! La réalité est tout autre.
L’infra
Et si je vous disais que Stack Overflow tournait sur 9 serveurs web on-premises ? C’est difficile à croire, et pourtant c’est la réalité.
On est loin des standards actuels, et pourtant ça marche ! 24 millisecondes de réponse avec une telle infrastructure, pour une appli multi-tenant, c’est assez dingue. Et ce, sans aucun cache ! Cela est dû au fait que la plupart de leurs requêtes SQL sont optimisées pour donner un temps de réponse minime.
Ils n’utilisent pas de micro services, à la place utilisent du MVC tout ce qu’il y a de plus classique. Pourquoi ? Tout simplement parce qu’ils ont une approche on ne peut plus pragmatique de la situation.
L’approche pragmatique de Stack Overflow
Stack Overflow n’adopte pas de nouveaux patterns ou librairies parce que ces derniers sont nouveaux, mais plutôt parce que ces derniers répondent à un besoin de leur part.
Cependant, en définitive, s’il n’y a pas d’expérimentation, cela ralentit l’innovation. Ainsi, une nouvelle librairie ou un nouveau pattern peut être expérimenté de tout temps dans les projets internes. S’il se trouve que cette librairie est performante, elle peut ainsi être promue dans les projets publics, comme stackoverflow.com.
Comme ils le disent si bien, ils préfèrent accorder de la valeur au pragmatisme plutôt qu’au dogmatisme.
Value pragmatism over dogmatism — Roberta Arcoverde
Les migrations .NET
.NET est utilisé à Stack Overflow depuis ses débuts, en 2008. Des temps obscurs où .NET Core et son interopérabilité avec les systèmes UNIX n’existaient pas.
À cette époque immémoriale, donc, le site tournait avec ASP.NET 1.0 qui dépend de .NET Framework 3.5. À l’ancienne !
Depuis, les choses ont évidemment changé.
Au fur et à mesure de leurs migrations, StackOverflow est passé à .NET 5, et une initiative vers .NET 6 est en cours.
Comment procèdent-ils ?
Leur politique, c’est de ne jamais atteindre la fin de vie d’une version de .NET. Ils mettent à jour constamment.
Pour chaque mise à jour du framework .NET, ils procèdent de la manière suivante:
- Ils font tous les changements nécessaires sur une branche/pull request séparée (framework, librairies…)
- Ils exécutent leurs tests d’intégration directement sur un environnement dédié, dans un cluster Kubernetes. Ils ont en tout plus de 15000 tests !
- Ils déploient leurs changements directement dans un des 9 serveurs web en production, et ils regardent comment cela se comporte. Si ça fonctionne, ils déploient sur les autres serveurs web un par un jusqu’au dernier.
Pour quels résultats?
Selon Stack Overflow, migrer vers .NET 5 fut assez concluent. Le principal gain fut une meilleure efficacité en mémoire. Moins de mémoire s’est ainsi retrouvée allouée par leurs différents applicatifs.
Aussi, le nombre de threads dans leur thread pool s’est retrouvé drastiquement réduit. Plutôt pas mal !
Ils sont déjà en chantier pour migrer vers .NET 7.
Conclusion
Stack Overflow est un site web extrêmement performant. Cette performance, cependant, résulte de choix techniques particulièrement étonnants pour notre époque.
Cela s’explique par un pragmatisme et une surveillance qualité à toute épreuve, que l’on peut avoir raison d’admirer comme détester.
Je serais plutôt d’avis de dire que la diligence du site web indique que les bons choix furent effectivement menés durant son développement.
Selon moi, Stack Overflow est un exemple à suivre !… Mais pas on-premises, si possible 😉.