Este documento resume dicas de desempenho para APIs ASP.NET Core. Aborda tópicos como middlewares, acesso a dados, async/await, cache, compressão, infraestrutura, micro serviços e API gateway. O objetivo é apresentar boas práticas para construir APIs rápidas e escaláveis.
3. 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
7. • 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
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
13. • 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
17. • 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
18. • 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
20. • 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
21. • 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
27. • 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
28. • Nativo no ASP.NET Core
• Utilizado para comprimir os dados
• Diminui o trafego de rede
• Por que isto é importante?
Compression
36. • 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
37. • 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
39. • 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