ASP.NET Core est le 3e serveur Web le plus rapide, répondant à 7 millions de requêtes HTTP/s,
Selon un test de TechEmpower

Le , par Bill Fassinou

351PARTAGES

14  0 
ASP.NET Core est un framework .NET open source et multiplateforme permettant de créer des applications Web modernes en nuage sous Windows, Mac ou Linux. C'est un framework bâti sur les bases suivantes : multiplateforme, participation de la communauté, performance, modularité, souplesse, etc. Avec ASP.NET Core, il existe désormais deux déclinaisons de la plateforme .NET. Chacune disposant de son propre cycle de développement et les deux bénéficient du support de Microsoft. Bien qu’il s’agisse d’un framework construit sur une nouvelle pile Web, il présente un degré élevé de compatibilité conceptuelle avec ASP.NET MVC.

De ce fait, quelle différence note-t-on entre .NET Core et son homologue .NET Framework ? Contrairement à .NET Framework qui fonctionne uniquement sur Windows ou Windows Server, .NET Core peut être utilisé aussi bien sur Windows que sur Linux et OS X. La conséquence de cette ouverture est le manque de support d’applications qui reposent sur des technologies Microsoft comme WPF, WinForms ou encore ASP.NET WebForms. .NET Core est développé en open source avec la contribution de la communauté. Ce qui n’est pas le cas pour le .NET Framework.

.NET Core implémente de nombreuses API communes avec le Framework .NET. en plus des API qui sont spécifiques à Unix, Linux et OS X. Les API communes sont regroupées dans .NET Standard, qui est implémenté à la fois par .NET Core et .NET Framework. Ce qui signifie que tout code qui cible .NET Standard, peut s’exécuter sur .NET Core et .NET Framework. Cela rend assez simple le partage de code entre les deux plateformes. La dernière version stable du framework, la version 2.2 a été rendue disponible le 4 décembre passé. La version 3.0 quant à elle, est encore en développement. Mais en attendant, une version Preview 2 est disponible avec quelques changements notables tels que la prise en charge des flux asynchrones, la prise en charge des API de port pour Linux, un support pour ARM64 pour Linux, etc.

Pour permettre à ASP.NET de prendre en charge le framework JSON pour .NET dans les projets, il va falloir ajouter Json.NET comme un package indépendant. Toujours sur cette même lancée, l’équipe de Microsoft a décidé de supprimer la prise en charge de la compilation au moment de l’exécution des pages et des vues. Ce changement a été opéré afin de ne plus dépendre du compilateur Roslyn. Après ces mises à jour répétitives qu’a subi le .NET Core, Microsoft a fourni une synthèse sur ses deux outils à savoir le .NET Core et le .NET Framework, qui montre que .NET Core est plus performant que le .NET Framework.


À la vue de cela, un internaute explique que Microsoft a beaucoup travaillé pour améliorer les performances du .NET Core par rapport à .NET Framework. Pour lui, certains sujets restent encore à la traîne, mais d’autres par contre, ont été revus en profondeur. LINQ est devenu omniprésent ces dernières années, dit-il. La sérialisation, la compression, le networking, etc. dans les Web API sont bien plus rapides dans .NET Core que dans .NET Framework.
Ainsi, TechEmpower (un framework d’applications Web qui compare les projets offrant des services de conception, de stratégie, de gestion, de systèmes et de graphisme) a réalisé récemment une comparaison entre la version stable 2.2 de .NET Core avec plusieurs autres frameworks d’applications Web, d'infrastructures full-stack et micro-frameworks. Les résultats placent ASP.NET Core comme 3e serveur le plus rapide. Il est capable de répondre à 7 millions de requêtes HTTP en seulement une seconde.

Ces résultats concernent le serveur Web et le testeur de charge s’exécutant dans des conteneurs Docker, sur deux machines Linux physiques différentes connectées à un réseau de 10GbE, a écrit Ben Adams de Age of Ascent, qui rapporte les différents résultats des tests. « C'est aussi une quantité extraordinaire de bande passante ; assez pour saturer en permanence un lien de 10 Go/s », a-t-il estimé. Selon lui, ASP.NET Core serait très rapide sur toutes les plateformes et l’est plus encore lorsqu’il s’agit de Linux. Dans la comparaison avec d’autres serveurs bien connus, les résultats montrent qu’il est 1,78 fois plus rapide que nginx ; 2,93 fois plus rapide que le servlet de Java ( 7,76 fois plus rapide que le servlet sur Tomcat) ; 7,36 fois plus rapide que le package “net/HTTP” de Golang ; 8,06 fois plus rapide que node.js fonctionnant en cluster de 28 processus (car node.js est à thread unique).


Dans ce dernier cas, certains internautes indiquent que Node.js est totalement dépassé par les performances de ASP.NET Core et cela, quels que soient l’OS, le type de machine et le nombre de cœurs. Ils soulignent notamment les performances remarquables du framework sur Linux. La petite surprise, disent-ils, c’est les bons chiffres sur Ubuntu et ses pairs. On sent que la firme de Redmond a vraiment travaillé sur l’implémentation du .NET Core sur Linux, disent-ils. Néanmoins, ils soulignent quelques imperfections, rien n’étant jamais parfaite à 100 %. « Après, même si cela n’apparaît pas dans les chiffres, il y a tout de même quelques bémols. En effet, sans la désactivation des logs, les performances d'une ’application Web ASP.NET Core sont divisées par environ 5. Ce qui, lors des tests sur Windows, causait des erreurs sur 1 à 2 % des requêtes. Or, une application sans log n’est pas très réaliste en production », ont-ils déclaré.

Ils conseillent donc de préférer les fonctions qui facilitent le développement comme le nouveau concept de Middleware et de Pipeline. D’autres tests réalisés pour examiner les performances de ces outils sur une base de données montrent que ASP.NET Core peut fonctionner avec de nombreuses bases de données (Postgres, MySQL, etc.) avec des performances très remarquables. Il existe d’autres résultats des tests que vous pouvez visualiser sur le site Age of Ascent. D’après Adams, .NET et ASP.NET ont toujours été très productifs et l’avenir avec ASP.NET Core et .NET Core sera aussi productif que rapide.

Sources : Age of Ascent, TechEmpower

Et vous ?

Que pensez-vous des résultats de ce test ?
ASP.NET Core est-il vraiment meilleur que les autres serveurs Web courants, selon vous ? Pourquoi ?
Quel est votre serveur Web préféré et pourquoi ?
Quelles expériences avez-vous faites d'ASP.NET Core ?

Voir aussi

.NET Core ou .NET Framework ? Quelle implémentation adopter pour son projet ?

ASP.NET Core 2.2 est disponible en version stable avec un nouveau module d'hébergement dans IIS et une nouvelle API pour suivre l'état des apps

ASP.Net Core 3 Preview 2 est disponible avec la prise en charge de Razor Components et l'intégration du streaming client-serveur avec SignalR

Apprendre à créer une application CRUD avec ASP.NET Core Razor Pages sous Visual Studio Code et Entity Framework Core, un tutoriel d'Hinault Romaric

Apprendre à déployer une application ASP.NET Core avec un conteneur Docker, un billet d'Hinault Romaric

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de rt15
Membre confirmé https://www.developpez.com
Le 11/02/2019 à 17:40
Pardon mais en première lecture j'ai trouvé ces résultats suffisamment surprenant pour me demander si c'était pas pondu par une boîte, comment dire, légèrement influencée par M$.
Genre une boîte qui vend des produits basés sur ASP.NET et qui est toute contente d'avoir comme par hasard choisi la meilleur technologie.

Pour remettre dans le contexte, il y a quelques années, je me suis un peu intéressé à nodejs.
Avant cette étude, j'imaginais qu'un serveur en nodejs devais être au mieux 20 ou 30% plus lent qu'un serveur en C, C++ ou en Java.
Généralement le javascript peut difficilement espérer faire mieux, même exécuté par le V8 de Google qui est utilisé par nodejs.

Je me disais que les utilisateurs de nodejs acceptaient cette perte de performance.
Mais en fait pas du tout.
L'architecture d'un serveur nodejs est bien différente de la plupart des serveurs de l'époque.
Alors que beaucoup utilisaient (et utilisent encore) un thread par requête HTTP et parallélisaient les traitements sur différents coeurs, nodejs utilise un seul thread (du point de vue du développeur JS) et se base sur les entrées sorties asynchrones.

Le coeur de nodejs, c'est libuv, une bibliothèque écrite en C par le créateur de nodejs.
Cette librairie permet avant tout de faire en asynchrone les I/O sur les sockets et les disques.

En gros le thread principal ne fait que soumettre des demandes de "tâches" au système d'exploitation, du genre écrit moi ça sur telle socket.
Mais le thread n'attends pas la fin de la lecture ou de l'écriture : la demande de l'exécution d'une tâche n'est pas bloquante.
Au lieu de cela, le thread principal se met en attente sur un ensemble d’évènements tels que "fin de l'écriture" ou "il y a quelque chose à lire sur tel socket".
Le système réalise les tâches en arrière plan et notifie quand elles sont terminées.
Dès qu'un événement se déclenche, le thread principal va le traiter, généralement en soumettant de nouvelles tâches d'entrée/sortie, puis se remettre en attente d'un nouvel évènement.
De cette manière le thread principal a "très peu" de travail et peut gérer des quantités astronomiques de connections et de lectures/écritures sur disque.
Le fait d'avoir peu de threads est très avantageux par rapport à un serveur classique car quand le processeur change de thread, il faut qu'il remplace son contexte d'exécution et ça prend un certain temps.
Ce contexte et la pile associée au thread prend aussi de la place en mémoire.
Par contre le désavantage d'avoir un seul thread principal est que si on a besoin de faire une tâche gourmande en CPU et qu'on l'a fait en JS, ça va bloquer le thread principal et le serveur ne fera rien d'autre : il ne sera pas à l'écoute des évènements pendant ce temps là.

Le résultat c'est que pour certaines applications, un serveur nodejs ne vas pas être 20 ou 30% plus lent qu'une appli JEE. Le serveur nodejs peut battre le JEE à plate couture.
Mais ce n'est pas JS qui est plus rapide que le Java. C'est la librairie C libuv qui bat l'archi JEE.

Donc sachant la qualité de l'approche et de l'implémentation de nodejs dans ce domaine, j'ai été surpris que aspcore puisse écraser nodejs sur un "Best plaintext responses per second".

Qu'est ce qui peut expliquer une telle différence ?
En y regardant de plus près, a priori, le serveur web utilisé par ASP.NET Core dans ce benchmark s'appelle Kestrel (c'est celui par défaut).
https://github.com/TechEmpower/Frame...rks/Program.vb
(à noter qu'ils ont implémentés le benchmark en VB, pas en C#!)

Et devinez sur quoi est basé Kestrel à la base ? Sur libuv...

Depuis l'utilisation de libuv a été supprimé mais en fin de compte la nouvelle implémentation se base certainement sur epoll sous Linux et les Overlapped I/O sous Windows.
Kestrel s'appuie donc sur les mêmes fonctions systèmes que libuv.

En tout cas chapeau aux développeurs C/C++ de M$ pour leur résultat sur ce bench.
1  0 
Avatar de chavers
Nouveau membre du Club https://www.developpez.com
Le 01/03/2019 à 10:19
En effet, dire que libUV est plus rapide sur aspcore que sur nodejs semble étrange... Mais bon, c'est un bench l'interprétation reste humaine. Si je regarde la même source, je peux conclure que PHP est plus rapide que aspcore pour sérialiser du json et que sur les 100 premiers du test « fortunes » les deux seuls qui génèrent des erreurs sont sur aspcore. De là à dire que aspcore est lent et buggé, il n'y a qu'un pas ... de troll.
0  0 
Avatar de ryankarl65
Membre habitué https://www.developpez.com
Le 18/03/2019 à 2:47
J'aurais bien aime avoir un comparatif avec les solutions existantes.
Merci pour cette article.
0  0 

 
Contacter le responsable de la rubrique Accueil

Partenaire : Hébergement Web