PERFORMANCE DO ASP.NET CORE
(UM COMPARATIVO COM NODE.JS)
WALDYR FELIX
Arquiteto Líder no Time de Operações
Críticas & Consultoria da FCamara
Microsoft MVP desde 2012
Fundador do Grupo ASP.NET Brasil
Blog: waldyrfelix.com.br
Twitter/LinkedIn/Snap: waldyrfelix
.NET CORE
PERFORMANCE
http://web.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-12-6-gbps
BENCHMARK ASP.NET CORE
github.com/aspnet/benchmarks
FERRAMENT
ESCOLHA DE HARDWARE
Server: VM Linux A4 – 8 Cores e
14 GB
Client: VM Linux A2 – 2 Cores e
3.5 GB
SERVIDOR WEB
.NET Core 1.0.0-rc2-3002702
ASP.NET Core 1.0.0-rc2-final
Kestrel 1.0.0-rc2-final
Node.js v6.2.1
Express 4.13.4
HTTP Server
Nativo
RESPONSE DO BENCHMARK
Idênticos para ASP.NET Core e Node.js
Retorna uma lista no formato JSON
api/benchmark/list
Retorna uma lista no formato JSON a
partir de um arquivo de texto em disco
api/benchmark/file
APLICAÇÃO ASP.NET CORE
NODE.JS
APLICAÇÃO ASP.NET CORE
ASP.NET
FERRAMENTA DE LOAD TEST
https://github.com/wg/wrk
wrk -t 8 -c 32 -d 10s http://host/api/benchmark/list
COLETA DE RESULTADOS
EXECUÇÃO DOS TESTES
Execução realizada por um
script bash
Usando a ferramenta wrk
Número de conexões
simultâneas
16, 32, 64, 128, 256, 512, 1024,
2048
Tempo de cada carga 10
segundos
RESULTADOS
RESULTADOS NODE.JS
Tech 16 32 64 128 256 512 1024 2048 Média
Node.js 1764 1965 1943 1889 1853 1844 1650 1593 1876,15
JSON LIST
Tech 16 32 64 128 256 512 1024 2048 Média
Node.js 629,8 663,5 691,8 689,7 711,4 654,8 632,4 600,2 673,52
JSON LIST FROM FILE
RESULTADOS ASP.NET CORE
Tech 16 32 64 128 256 512 1024 2048 Média
ASP.NET Core 5465 5868 6327 6257 5705 6483 6220 6263 6017,49
JSON LIST
Tech 16 32 64 128 256 512 1024 2048 Média
ASP.NET Core 3466 3842 4164 4215 4084 3948 3903 3524 3953,14
JSON LIST FROM FILE
320% mais rápido
580% mais rápido
RESULTADO COMPARATIVO
1876.15
6017.49
Node.js ASP.NET Core
Json List (Sem I/O)
673.52
3953.14
Node.js ASP.NET Core
Json List (Com I/O)
RESULTADO COMPARATIVO
0
1000
2000
3000
4000
5000
6000
7000
16 32 64 128 256 512 1024 2048
Requisições / Segundo (Sem I/O)
Node.js ASP.NET Core
RESULTADO COMPARATIVO
0
500
1000
1500
2000
2500
3000
3500
4000
4500
16 32 64 128 256 512 1024 2048
Requisições / Segundo (Com I/O)
Node.js ASP.NET Core
KESTREL
PERFORMANCE DO LIBUV
É uma biblioteca para I/O assíncrono
Trabalha com single threaded event-loop
Ficou conhecida depois do Node.js
Uso eficiente de sockets assíncronos
Tem versões para Windows, OS X e Linux
Otimização de uso de CPU e memória
Melhora da performance em operações de
I/O
PERFORMANCE DO KESTREL
O Kestrel usa o Libuv assim como
Node.js
Mas apenas para operações de
I/O
Disco, serialização, rede, etc.
Para operações não I/O usa o
código gerenciado .NET
normalmente
Suporta múltiplos event-loop
Otimiza o número de chamadas
REFERÊNCIAS DA APRESENTAÇÃO
https://github.com/waldyrfelix/benchmark_aspnet_brasil_conf
https://nodejs.org/en/docs
https://github.com/wg/wrk
https://github.com/aspnet/benchmarks
http://dotnet.github.io
http://libuv.org
https://github.com/dotnet/coreclr
http://web.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-
12-6-gbps
http://blog.dotnetnerd.dk/post/2015/11/08/Kestrel-the-new-web-server-
for-ASPNET-5.aspx
OBRIGADO

Performance do ASP.NET Core, um comparativo com Node.js

Notas do Editor

  • #6 Escalabilidade - capacidade de um sistema de continuar funcionando com um desempenho aceitável quando aumenta-se a carga de trabalho
  • #8 Performance é algo muito subjetivo - o que pode ser ultra performático num cenário em outro pode ser o diferencial competitivo entre -
  • #20 Escalabilidade - capacidade de um sistema de continuar funcionando com um desempenho aceitável quando aumenta-se a carga de trabalho