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