ASP.NET Core APIs
Performance Tips
Quem sou?
• Microsoft MVP desde 2013
• Desenvolvedor Web desde 2005
• Atuação em projetos nacionais e internacionais
• Atuação em projetos pequenos, médios e grandes
• Consultor independente desde 2012
• Fundador do balta.io
http://andrebaltieri.net/
contato@andrebaltieri.net
http://balta.io/
http://bit.ly/asp-net-cast
http://bit.ly/software-em-contexto
http://mvp.microsoft.com
Agenda
• ASP.NET vs ASP.NET Core
• Middlewares
• Acesso à Dados
• Async/Await
• Cache
• Compressão
• Infraestrutura
• Micro Serviços
• API Gateway
ASP.NET vs ASP.NET Core
Mudanças Significativas
• Exceeds 1.15 Million request/s
• 2300% More Requests Served Per Second
• More than 12.6 Gbps of Throughput
• https://github.com/aspnet/benchmarks
• https://aka.ms/aspnet/benchmarks
ASP.NET Core
Comparativo: ASP.NET, Node, ASP.NET Core
• Open Source
• Roda sobre o Full Framework / Core Framework
ASP.NET Core
Commits no GitHub do ASP.NET Core
• Se você já utilizava OWIN, é tranquilo
• Se não utilizava, também é tranquilo
• Roda sobre o mesmo ambiente (Full Framework)
• Já está na versão 2.0
ASP.NET => ASP.NET Core
Middlewares
A grande mudança
• Não vem com nada!
• Você pluga o que quer
• Pipeline bem mais limpo
• Exemplos de Middlewares
• Autenticação/Autorização
• Log
• ASP.NET MVC
Middlewares
Middlewares
Middlewares
Performance
Dicas
• Quantos requests ao banco uma requisição a sua API faz?
• Não culpe o EF por tudo
• Você pode mesclar EF com Dapper
Acesso à Dados
• Recurso do C# 5+
• Permite a execução de requisições assíncronas
• Libera a Thread principal no IIS (Desafoga)
• Não deve ser utilizado apenas na API
Async/Await
Async/Await
• Pode ser realizado no Client/Server
• Client => Setar o header Cache-Control
• Server => Existe nativo no ASP.NET Core
• Evita requisições a API (Client)
• Evita requisições ao banco e processamento na API (Server)
Cache
• Compõe o cabeçalho da requisição com os parâmetros do Cache
• Vary
• Só é setado quando a propriedade VaryByHeader for enviada
• NoStore e Location.None
• Tipicamente utilizado em páginas de erros
• Desabilita o Cache
• Location e Duration
• Determina localização e duração do Cache
ResponseCache
VaryByHeader
NoStore e Location.None
Location e Duration
• Utilizado para padronizar o cache da API
• Cria perfis que podem ser re-utilizados
Cache Profile
Cache Profile
• Sub-utilizados
• Somente no lado do cliente
• Podem ser acessados Offline
• São bons amigos quando utilizados
• Vide o balta.io
Local e Session Storage
• Nativo no ASP.NET Core
• Utilizado para comprimir os dados
• Diminui o trafego de rede
• Por que isto é importante?
Compression
Compression
Compression
Compression
Compression
• Utilizado para comprimir textos, imagens e até arquivos
• Também é possível utilizar um Custom Provider
GzipCompressionProvider
GzipCompressionProvider
Infraestrutura
A performance é um conjunto
• Não adianta ter uma API rápida num servidor lento
• Não adianta ter uma API rápida numa super máquina sem alta disponibilidade
• Não adianta ter uma API rápida sem escalonamento automático
• Não adianta ter uma API rápida publicada junto a um frontend massivo
• Não adianta ter uma API rápida publicada numa máquina que ser imagens
• Não adianta ter uma API rápida e um banco lento
Infraestrutura
• Não adianta ter API+Infra e não ter um deploy automatizado
• Não adianta ter API+Infra e não saber qual versão está em produção
• Não adianta ter API+Infra e não ter controle de versão
• Não adianta ter API+Infra e não ter controle de mudanças
• Não adianta ter API+Infra e não ter controle de novas funcionalidades
DevOps
Micro Serviços
Dividir para conquistar
• Ao invés de uma API enorme, diversas APIs menores
• Escalonamento individual
• Problemas Individuais
• Fácil manutenção
• Menor batch size
• A Netflix tem uma API com 1 método, atendendo apenas a listagem do seu catálogo de filmes
Dividir para conquistar
API Gateway
Muitas APIs trazem grandes responsabilidades
• Muitos requests
• Comunicação entre serviços
• Autenticação entre APIs
• Múltiplos Protocolos de Comunicação
Muitas APIs também representam…
Performance
É o conjunto de tudo que você viu aqui!
http://bit.ly/baltaio-curso-aspnetcore
Obrigado
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips
ASP.NET Core APIs: Performance Tips

ASP.NET Core APIs: Performance Tips

  • 2.
  • 3.
    Quem sou? • MicrosoftMVP desde 2013 • Desenvolvedor Web desde 2005 • Atuação em projetos nacionais e internacionais • Atuação em projetos pequenos, médios e grandes • Consultor independente desde 2012 • Fundador do balta.io http://andrebaltieri.net/ contato@andrebaltieri.net
  • 4.
  • 5.
    Agenda • ASP.NET vsASP.NET Core • Middlewares • Acesso à Dados • Async/Await • Cache • Compressão • Infraestrutura • Micro Serviços • API Gateway
  • 6.
    ASP.NET vs ASP.NETCore Mudanças Significativas
  • 7.
    • Exceeds 1.15Million request/s • 2300% More Requests Served Per Second • More than 12.6 Gbps of Throughput • https://github.com/aspnet/benchmarks • https://aka.ms/aspnet/benchmarks ASP.NET Core
  • 8.
  • 9.
    • Open Source •Roda sobre o Full Framework / Core Framework ASP.NET Core
  • 10.
    Commits no GitHubdo ASP.NET Core
  • 11.
    • Se vocêjá utilizava OWIN, é tranquilo • Se não utilizava, também é tranquilo • Roda sobre o mesmo ambiente (Full Framework) • Já está na versão 2.0 ASP.NET => ASP.NET Core
  • 12.
  • 13.
    • Não vemcom nada! • Você pluga o que quer • Pipeline bem mais limpo • Exemplos de Middlewares • Autenticação/Autorização • Log • ASP.NET MVC Middlewares
  • 14.
  • 15.
  • 16.
  • 17.
    • Quantos requestsao banco uma requisição a sua API faz? • Não culpe o EF por tudo • Você pode mesclar EF com Dapper Acesso à Dados
  • 18.
    • Recurso doC# 5+ • Permite a execução de requisições assíncronas • Libera a Thread principal no IIS (Desafoga) • Não deve ser utilizado apenas na API Async/Await
  • 19.
  • 20.
    • Pode serrealizado no Client/Server • Client => Setar o header Cache-Control • Server => Existe nativo no ASP.NET Core • Evita requisições a API (Client) • Evita requisições ao banco e processamento na API (Server) Cache
  • 21.
    • Compõe ocabeçalho da requisição com os parâmetros do Cache • Vary • Só é setado quando a propriedade VaryByHeader for enviada • NoStore e Location.None • Tipicamente utilizado em páginas de erros • Desabilita o Cache • Location e Duration • Determina localização e duração do Cache ResponseCache
  • 22.
  • 23.
  • 24.
  • 25.
    • Utilizado parapadronizar o cache da API • Cria perfis que podem ser re-utilizados Cache Profile
  • 26.
  • 27.
    • Sub-utilizados • Somenteno lado do cliente • Podem ser acessados Offline • São bons amigos quando utilizados • Vide o balta.io Local e Session Storage
  • 28.
    • Nativo noASP.NET Core • Utilizado para comprimir os dados • Diminui o trafego de rede • Por que isto é importante? Compression
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
    • Utilizado paracomprimir textos, imagens e até arquivos • Também é possível utilizar um Custom Provider GzipCompressionProvider
  • 34.
  • 35.
  • 36.
    • Não adiantater uma API rápida num servidor lento • Não adianta ter uma API rápida numa super máquina sem alta disponibilidade • Não adianta ter uma API rápida sem escalonamento automático • Não adianta ter uma API rápida publicada junto a um frontend massivo • Não adianta ter uma API rápida publicada numa máquina que ser imagens • Não adianta ter uma API rápida e um banco lento Infraestrutura
  • 37.
    • Não adiantater API+Infra e não ter um deploy automatizado • Não adianta ter API+Infra e não saber qual versão está em produção • Não adianta ter API+Infra e não ter controle de versão • Não adianta ter API+Infra e não ter controle de mudanças • Não adianta ter API+Infra e não ter controle de novas funcionalidades DevOps
  • 38.
  • 39.
    • Ao invésde uma API enorme, diversas APIs menores • Escalonamento individual • Problemas Individuais • Fácil manutenção • Menor batch size • A Netflix tem uma API com 1 método, atendendo apenas a listagem do seu catálogo de filmes Dividir para conquistar
  • 40.
    API Gateway Muitas APIstrazem grandes responsabilidades
  • 41.
    • Muitos requests •Comunicação entre serviços • Autenticação entre APIs • Múltiplos Protocolos de Comunicação Muitas APIs também representam…
  • 42.
    Performance É o conjuntode tudo que você viu aqui!
  • 43.
  • 44.