SlideShare a Scribd company logo
ASP.NET Core //Build reloaded
ASP.NET Core
Web Framework Benchmarks
Nicolò Carandini [MVP]
n.carandini@outlook.com
@TPCWare
ASP.NET Core //Build reloaded
Performance
• Perché è importante
• Cosa misurare e come si fa
• Evoluzione delle performance di ASP.NET Core
• Comparazione di ASP.NET Core con gli altri framework
• Cosa rende ASP.NET Core molto più performante di ASP.NET
• Ulteriori miglioramenti in corso di realizzazione
ASP.NET Core //Build reloaded
L’importanza delle prestazioni
Le prestazioni di un Web Application Framework incidono
pesantemente sui costi:
2.000 RPS x 100 Server = 200k x 1 Server
Ma i costi non sono esattamente gli stessi… ☺
ASP.NET Core //Build reloaded
Cosa si misura
Il numero di RPS (Request Per Seconds).
Ovviamente cambia molto a seconda degli scenari, perché si
possono sommare altri effetti dovuti, ad esempio, al database
engine coinvolto in una query di dati.
Si passa quindi da scenari molto semplici e facilmente
paragonabili tra loro come PlainText e JSON Serialization fino
ad arrivare a scenari più complessi di Single Query e Multiple
Query e di Data Update.
ASP.NET Core //Build reloaded
Come si misura
• Questione storicamente molto controversa
• La cosa migliore è utilizzare dei benchmark di terze parti che
girino sui diversi scenari formati da una permutazione di
framework, platform, linguaggi ed elementi complementari
(DB, ORM, …)
• TechEmpower, società di sviluppo e gestione di Web App, ha
sviluppato una serie di test per differenti workload che
esegue periodicamente e di cui pubblica i risultati sul suo
sito: www.techempower.com/benchmarks
ASP.NET Core //Build reloaded
Ambiente fisico di test di TechEmpower
Load Generator
Linux Server
wrk load generation tool
Database Server
Dell R710
10-Gigabit switch
Application Server
Dell R910
4x 10-Core E7-4850 CPUs
Ambiente Cloud
Microsoft Azure
D3v2 instances
ASP.NET Core //Build reloaded
Evoluzione delle performance
Quando il team di ASP.NET Core ha incominciato a testare le prestazioni
il quadro risultante era desolante: 2.120 RPS per il semplice PlainText.
Per correre ai ripari, il team ha:
• Creato l’ambiente fisico di test nella sede del team (letteralmente!)
• Creato un progetto su GitHub di implementazione dei benchmark
• Inserito i test di performance nella tool chain di sviluppo di ASP.NET
Core
I risultati venivano inizialmente raccolti e mostrati con una Pivot Table
di Excel, oggi sono visibili online tramite Power BI, tuttora in fase di
sviluppo: bit.ly/2rNebyz (short link temporaneo creato da me, quello
riportato su GitHub è anch’esso temporaneo e lunghissimo!)
ASP.NET Core //Build reloaded
Community Standup - Performance Testing
www.youtube.com/watch?v=7O81CAjmOXk
ASP.NET Core //Build reloaded
Ambiente di test di ASP.NET Core
Load Generator
Ubuntu 14.04.5 LTS
wrk load generation tool Web Server
Windows Server
10-Gigabit switch
ASP.NET Core //Build reloaded
I risultati di un anno di lavoro open source
A fine febbraio 2016 ASP.NET Core ha superato il milione di RPS
ASP.NET Core //Build reloaded
La situazione ad oggi
Questi i risultati del round n. 14 del 10 maggio 2017, limitatamente ad
ASP.NET, ASP.NET Core e Node.js:
https://www.techempower.com/benchmarks
ASP.NET Core //Build reloaded
Confronto con gli altri Framework
TechEmpower offre un’ampia varietà di filtri per framework, linguaggi e
piattaforme e soprattutto suddivide i test in tre tipologie:
• Platform
test che richiedono la semplice risposta del server
• Micro
test che utilizzano la pipeline
• Fullstack
test che utilizzano tutto lo stack tecnologico del framework, tipo MVC
ASP.NET Core //Build reloaded
Risultati per Fullstack, Micro e Platform
https://www.techempower.com/benchmarks
30°
14°
ASP.NET Core //Build reloaded
Risultati per Fullstack, Micro
https://www.techempower.com/benchmarks
15°
3°
ASP.NET Core //Build reloaded
Risultati per Fullstack
https://www.techempower.com/benchmarks
6°
ASP.NET Core //Build reloaded
Perché ASP.NET Core è più veloce di ASP.NET
• ASP.NET Core è modulare, open source e Cross Platform.
• La componibilità della pipeline fornita da ASP.NET Core consente di
utilizzare solo i componenti necessari.
• ASP.NET Core non dipende più ne da System.Web ne da IIS.
• Può essere utilizzato con Kestrel, il web server cross-platform, tramite
reverse proxy server Nginx.
ASP.NET Core //Build reloaded
Aree di sviluppo
L’aumento delle prestazioni è stato ottenuta lavorando sull’ottimizzazione
delle diverse parti critiche, quali:
• Kestrel server
• Thread pool
• JITter
• Cold start
ASP.NET Core //Build reloaded
Altre migliorie in corso d’opera
• Runtime Store con le versioni pre-JITted di tutti i package ASP.NET Core
• Precompilazione delle Razor view page durante la pubblicazione
ASP.NET Core //Build reloaded
Misurare le performance delle proprie App
Per lo stesso motivo per cui è utile al team di ASP.NET Core testare e
continuamente migliorare le prestazioni del framework, allo stesso
modo è essenziale farlo per le nostre soluzioni.
Per realizzare un nostro laboratorio di benchmark basta utilizzare:
• Docker
• Wrk
ASP.NET Core //Build reloaded
Wrk
Wrk è un potente strumento di generazione di carichi di lavoro single e
multi core, con un motore di scripting che consente di automatizzare i
test e raccogliere i risultati.
ASP.NET Core //Build reloaded
Istruzioni per l’uso
Grazie a docker mettere su il laboratorio è molto semplice:
1. Caricare l’immagine di wrk:
2. Caricare l’immagine dell’app che vogliamo testare
3. Recuperare l’indirizzo IP della nostra app:
4. Eseguire i test (ad esempio con 2 thread e 5 connection, per 5 sec):
C:>docker pull williamyeh/wrk
C:>docker inspect –f
"{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" MyAppID
C:>docker run --rm MyAppID -t2 -c5 -d5s -H 'Host: example.com‘
--timeout 2s http://IPAddress:Port
ASP.NET Core //Build reloaded
Esempio di lab con Docker per Windows 10
Load Generator
Linux Server
wrk load generation tool
Web Server
Windows Nano Server
ASP.NET Core Web App
Virtual switch
Web Server
Linux Server
Node.js Web App
Web Server
Linux Server
ASP.NET Core Web App
ASP.NET Core //Build reloaded
Demo
Benchmark Lab con Wrk e Docker
ASP.NET Core //Build reloaded
Riferimenti e link utili
• Web Framework Benchmarks
https://www.techempower.com/benchmarks
• Benchmarks
https://github.com/aspnet/benchmarks
• ASP.NET Core – 2300% More Requests Served Per Second
https://www.ageofascent.com/2016/02/18/asp-net-core-exeeds-1-15-million-requests-12-6-gbps
• ASP.NET Core 2 – More Performance Improvements
https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1
• Introducing ASP.NET Core 2.0
(Fast Startup and Defaulting View Precompilation on at 42')
https://channel9.msdn.com/events/Build/2017/B8048
• NET Core 2.0 runtime store
https://github.com/aspnet/Announcements/issues/243

More Related Content

What's hot

ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
Andrea Dottor
 
Deploy PrestaShop con Docker
Deploy PrestaShop con DockerDeploy PrestaShop con Docker
Deploy PrestaShop con Docker
Bwlab
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
Andrea Dottor
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossa
Gian Maria Ricci
 
XmlBlackBox Presentation
XmlBlackBox PresentationXmlBlackBox Presentation
XmlBlackBox PresentationAlexander Crea
 
Building Scala with Bazel - Scala Days
Building Scala with Bazel - Scala DaysBuilding Scala with Bazel - Scala Days
Building Scala with Bazel - Scala Days
Natan Silnitsky
 

What's hot (7)

ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del web
 
Deploy PrestaShop con Docker
Deploy PrestaShop con DockerDeploy PrestaShop con Docker
Deploy PrestaShop con Docker
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Database project alla riscossa
Database project alla riscossaDatabase project alla riscossa
Database project alla riscossa
 
XmlBlackBox Presentation
XmlBlackBox PresentationXmlBlackBox Presentation
XmlBlackBox Presentation
 
Building Scala with Bazel - Scala Days
Building Scala with Bazel - Scala DaysBuilding Scala with Bazel - Scala Days
Building Scala with Bazel - Scala Days
 

Similar to ASP.NET Core Web Framework Benchmarks

Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
Nicolò Carandini
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
Andrea Dottor
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
Andrea Dottor
 
ASP.NET Core essentials
ASP.NET Core essentialsASP.NET Core essentials
ASP.NET Core essentials
Andrea Saltarello
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
Andrea Della Corte
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
Andrea Dottor
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
Gian Maria Ricci
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
Alessandro Forte
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
Andrea Dottor
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
Luca Congiu
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
Gian Maria Ricci
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
XPeppers
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
Roberto Messora
 
Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile! Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile!
Davide Benvegnù
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
dotnetcode
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo Greco
Giuneco S.r.l
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
Massimo Bonanni
 

Similar to ASP.NET Core Web Framework Benchmarks (20)

Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
ASP.NET Core essentials
ASP.NET Core essentialsASP.NET Core essentials
ASP.NET Core essentials
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Single Page Applications
Single Page ApplicationsSingle Page Applications
Single Page Applications
 
Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile! Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile!
 
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
Meetup DotNetCode Settembre 2018 - ASP.NET Core 2.1
 
Blazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo GrecoBlazor with .net 5 - di Gerardo Greco
Blazor with .net 5 - di Gerardo Greco
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
 

More from Nicolò Carandini

Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynote
Nicolò Carandini
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure Http
Nicolò Carandini
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazor
Nicolò Carandini
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
Nicolò Carandini
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live Share
Nicolò Carandini
 
Azure dev ops meetup one
Azure dev ops meetup oneAzure dev ops meetup one
Azure dev ops meetup one
Nicolò Carandini
 
Spa with Blazor
Spa with BlazorSpa with Blazor
Spa with Blazor
Nicolò Carandini
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
Nicolò Carandini
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
Nicolò Carandini
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
Nicolò Carandini
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
Nicolò Carandini
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
Nicolò Carandini
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
Nicolò Carandini
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
Nicolò Carandini
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
Nicolò Carandini
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
Nicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
Nicolò Carandini
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
Nicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
Nicolò Carandini
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
Nicolò Carandini
 

More from Nicolò Carandini (20)

Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynote
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure Http
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazor
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live Share
 
Azure dev ops meetup one
Azure dev ops meetup oneAzure dev ops meetup one
Azure dev ops meetup one
 
Spa with Blazor
Spa with BlazorSpa with Blazor
Spa with Blazor
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
 

ASP.NET Core Web Framework Benchmarks

  • 1.
  • 2. ASP.NET Core //Build reloaded ASP.NET Core Web Framework Benchmarks Nicolò Carandini [MVP] n.carandini@outlook.com @TPCWare
  • 3. ASP.NET Core //Build reloaded Performance • Perché è importante • Cosa misurare e come si fa • Evoluzione delle performance di ASP.NET Core • Comparazione di ASP.NET Core con gli altri framework • Cosa rende ASP.NET Core molto più performante di ASP.NET • Ulteriori miglioramenti in corso di realizzazione
  • 4. ASP.NET Core //Build reloaded L’importanza delle prestazioni Le prestazioni di un Web Application Framework incidono pesantemente sui costi: 2.000 RPS x 100 Server = 200k x 1 Server Ma i costi non sono esattamente gli stessi… ☺
  • 5. ASP.NET Core //Build reloaded Cosa si misura Il numero di RPS (Request Per Seconds). Ovviamente cambia molto a seconda degli scenari, perché si possono sommare altri effetti dovuti, ad esempio, al database engine coinvolto in una query di dati. Si passa quindi da scenari molto semplici e facilmente paragonabili tra loro come PlainText e JSON Serialization fino ad arrivare a scenari più complessi di Single Query e Multiple Query e di Data Update.
  • 6. ASP.NET Core //Build reloaded Come si misura • Questione storicamente molto controversa • La cosa migliore è utilizzare dei benchmark di terze parti che girino sui diversi scenari formati da una permutazione di framework, platform, linguaggi ed elementi complementari (DB, ORM, …) • TechEmpower, società di sviluppo e gestione di Web App, ha sviluppato una serie di test per differenti workload che esegue periodicamente e di cui pubblica i risultati sul suo sito: www.techempower.com/benchmarks
  • 7. ASP.NET Core //Build reloaded Ambiente fisico di test di TechEmpower Load Generator Linux Server wrk load generation tool Database Server Dell R710 10-Gigabit switch Application Server Dell R910 4x 10-Core E7-4850 CPUs Ambiente Cloud Microsoft Azure D3v2 instances
  • 8. ASP.NET Core //Build reloaded Evoluzione delle performance Quando il team di ASP.NET Core ha incominciato a testare le prestazioni il quadro risultante era desolante: 2.120 RPS per il semplice PlainText. Per correre ai ripari, il team ha: • Creato l’ambiente fisico di test nella sede del team (letteralmente!) • Creato un progetto su GitHub di implementazione dei benchmark • Inserito i test di performance nella tool chain di sviluppo di ASP.NET Core I risultati venivano inizialmente raccolti e mostrati con una Pivot Table di Excel, oggi sono visibili online tramite Power BI, tuttora in fase di sviluppo: bit.ly/2rNebyz (short link temporaneo creato da me, quello riportato su GitHub è anch’esso temporaneo e lunghissimo!)
  • 9. ASP.NET Core //Build reloaded Community Standup - Performance Testing www.youtube.com/watch?v=7O81CAjmOXk
  • 10. ASP.NET Core //Build reloaded Ambiente di test di ASP.NET Core Load Generator Ubuntu 14.04.5 LTS wrk load generation tool Web Server Windows Server 10-Gigabit switch
  • 11. ASP.NET Core //Build reloaded I risultati di un anno di lavoro open source A fine febbraio 2016 ASP.NET Core ha superato il milione di RPS
  • 12. ASP.NET Core //Build reloaded La situazione ad oggi Questi i risultati del round n. 14 del 10 maggio 2017, limitatamente ad ASP.NET, ASP.NET Core e Node.js: https://www.techempower.com/benchmarks
  • 13. ASP.NET Core //Build reloaded Confronto con gli altri Framework TechEmpower offre un’ampia varietà di filtri per framework, linguaggi e piattaforme e soprattutto suddivide i test in tre tipologie: • Platform test che richiedono la semplice risposta del server • Micro test che utilizzano la pipeline • Fullstack test che utilizzano tutto lo stack tecnologico del framework, tipo MVC
  • 14. ASP.NET Core //Build reloaded Risultati per Fullstack, Micro e Platform https://www.techempower.com/benchmarks 30° 14°
  • 15. ASP.NET Core //Build reloaded Risultati per Fullstack, Micro https://www.techempower.com/benchmarks 15° 3°
  • 16. ASP.NET Core //Build reloaded Risultati per Fullstack https://www.techempower.com/benchmarks 6°
  • 17. ASP.NET Core //Build reloaded Perché ASP.NET Core è più veloce di ASP.NET • ASP.NET Core è modulare, open source e Cross Platform. • La componibilità della pipeline fornita da ASP.NET Core consente di utilizzare solo i componenti necessari. • ASP.NET Core non dipende più ne da System.Web ne da IIS. • Può essere utilizzato con Kestrel, il web server cross-platform, tramite reverse proxy server Nginx.
  • 18. ASP.NET Core //Build reloaded Aree di sviluppo L’aumento delle prestazioni è stato ottenuta lavorando sull’ottimizzazione delle diverse parti critiche, quali: • Kestrel server • Thread pool • JITter • Cold start
  • 19. ASP.NET Core //Build reloaded Altre migliorie in corso d’opera • Runtime Store con le versioni pre-JITted di tutti i package ASP.NET Core • Precompilazione delle Razor view page durante la pubblicazione
  • 20. ASP.NET Core //Build reloaded Misurare le performance delle proprie App Per lo stesso motivo per cui è utile al team di ASP.NET Core testare e continuamente migliorare le prestazioni del framework, allo stesso modo è essenziale farlo per le nostre soluzioni. Per realizzare un nostro laboratorio di benchmark basta utilizzare: • Docker • Wrk
  • 21. ASP.NET Core //Build reloaded Wrk Wrk è un potente strumento di generazione di carichi di lavoro single e multi core, con un motore di scripting che consente di automatizzare i test e raccogliere i risultati.
  • 22. ASP.NET Core //Build reloaded Istruzioni per l’uso Grazie a docker mettere su il laboratorio è molto semplice: 1. Caricare l’immagine di wrk: 2. Caricare l’immagine dell’app che vogliamo testare 3. Recuperare l’indirizzo IP della nostra app: 4. Eseguire i test (ad esempio con 2 thread e 5 connection, per 5 sec): C:>docker pull williamyeh/wrk C:>docker inspect –f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" MyAppID C:>docker run --rm MyAppID -t2 -c5 -d5s -H 'Host: example.com‘ --timeout 2s http://IPAddress:Port
  • 23. ASP.NET Core //Build reloaded Esempio di lab con Docker per Windows 10 Load Generator Linux Server wrk load generation tool Web Server Windows Nano Server ASP.NET Core Web App Virtual switch Web Server Linux Server Node.js Web App Web Server Linux Server ASP.NET Core Web App
  • 24. ASP.NET Core //Build reloaded Demo Benchmark Lab con Wrk e Docker
  • 25. ASP.NET Core //Build reloaded Riferimenti e link utili • Web Framework Benchmarks https://www.techempower.com/benchmarks • Benchmarks https://github.com/aspnet/benchmarks • ASP.NET Core – 2300% More Requests Served Per Second https://www.ageofascent.com/2016/02/18/asp-net-core-exeeds-1-15-million-requests-12-6-gbps • ASP.NET Core 2 – More Performance Improvements https://blogs.msdn.microsoft.com/webdev/2017/05/10/aspnet-2-preview-1 • Introducing ASP.NET Core 2.0 (Fast Startup and Defaulting View Precompilation on at 42') https://channel9.msdn.com/events/Build/2017/B8048 • NET Core 2.0 runtime store https://github.com/aspnet/Announcements/issues/243