SlideShare uma empresa Scribd logo
1 de 47
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

Mais conteúdo relacionado

Mais procurados

DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...iMasters
 
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...iMasters
 
Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prismakamud
 
Animações com Xamarin.Forms
Animações com Xamarin.FormsAnimações com Xamarin.Forms
Animações com Xamarin.Formsakamud
 
Aula 4. bibliotecas js
Aula 4. bibliotecas jsAula 4. bibliotecas js
Aula 4. bibliotecas jsandreluizlc
 
Desenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsDesenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsRogerio Chaves
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!Vinicius Mussak
 
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e Firebase
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e FirebaseTDC SP 2015 - Criando Web Apps Real Time com AngularJs e Firebase
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e FirebaseAndre Baltieri
 
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abade
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abadeAcelere - e melhore! - o feedback com testes automatizados rápidos - igor abade
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abadeIgor Abade
 
ASP.NET MVC, para sua vida melhorar
ASP.NET MVC, para sua vida melhorarASP.NET MVC, para sua vida melhorar
ASP.NET MVC, para sua vida melhorarWaldyr Felix
 
Breve introdução ao Rails
Breve introdução ao RailsBreve introdução ao Rails
Breve introdução ao RailsDaniel Andrade
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETAndre Baltieri
 
Novidades do ASP.NET MVC 4
Novidades do ASP.NET MVC 4Novidades do ASP.NET MVC 4
Novidades do ASP.NET MVC 4Waldyr Felix
 
O que é angular?
O que é angular?O que é angular?
O que é angular?Caio Rolla
 
Reuso De Código Com Rails
Reuso De Código Com RailsReuso De Código Com Rails
Reuso De Código Com RailsRodrigo Urubatan
 
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCDo MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCJanderson Silva
 
Workshop Vanilla JS e ES6
Workshop Vanilla JS e ES6Workshop Vanilla JS e ES6
Workshop Vanilla JS e ES6Wendell Adriel
 
Do marketplace ao WordPress - WordCamp BH 2015
Do marketplace ao WordPress -  WordCamp BH 2015Do marketplace ao WordPress -  WordCamp BH 2015
Do marketplace ao WordPress - WordCamp BH 2015Fellyph Cintra
 

Mais procurados (20)

DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
 
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
 
Tornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com PrismTornando o Xamarin.Forms ainda melhor com Prism
Tornando o Xamarin.Forms ainda melhor com Prism
 
Animações com Xamarin.Forms
Animações com Xamarin.FormsAnimações com Xamarin.Forms
Animações com Xamarin.Forms
 
Aula 4. bibliotecas js
Aula 4. bibliotecas jsAula 4. bibliotecas js
Aula 4. bibliotecas js
 
Desenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on RailsDesenvolvimento Ágil com Ruby on Rails
Desenvolvimento Ágil com Ruby on Rails
 
ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!ITerior - .NET Core, usando .NET no Linux!
ITerior - .NET Core, usando .NET no Linux!
 
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e Firebase
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e FirebaseTDC SP 2015 - Criando Web Apps Real Time com AngularJs e Firebase
TDC SP 2015 - Criando Web Apps Real Time com AngularJs e Firebase
 
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abade
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abadeAcelere - e melhore! - o feedback com testes automatizados rápidos - igor abade
Acelere - e melhore! - o feedback com testes automatizados rápidos - igor abade
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
ASP.NET MVC, para sua vida melhorar
ASP.NET MVC, para sua vida melhorarASP.NET MVC, para sua vida melhorar
ASP.NET MVC, para sua vida melhorar
 
Breve introdução ao Rails
Breve introdução ao RailsBreve introdução ao Rails
Breve introdução ao Rails
 
Trabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NETTrabalhando com WebHooks no ASP.NET
Trabalhando com WebHooks no ASP.NET
 
Novidades do ASP.NET MVC 4
Novidades do ASP.NET MVC 4Novidades do ASP.NET MVC 4
Novidades do ASP.NET MVC 4
 
O que é angular?
O que é angular?O que é angular?
O que é angular?
 
Reuso De Código Com Rails
Reuso De Código Com RailsReuso De Código Com Rails
Reuso De Código Com Rails
 
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVCDo MVP ao PWA, melhorando o engajamento com cliente na CVC
Do MVP ao PWA, melhorando o engajamento com cliente na CVC
 
Workshop Vanilla JS e ES6
Workshop Vanilla JS e ES6Workshop Vanilla JS e ES6
Workshop Vanilla JS e ES6
 
Do marketplace ao WordPress - WordCamp BH 2015
Do marketplace ao WordPress -  WordCamp BH 2015Do marketplace ao WordPress -  WordCamp BH 2015
Do marketplace ao WordPress - WordCamp BH 2015
 
Play Framework
Play FrameworkPlay Framework
Play Framework
 

Semelhante a ASP.NET Core APIs Performance Tips

Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance RailsVitor Pellegrino
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIAlvaro Viebrantz
 
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Renato Groff
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceJosé Roberto Araújo
 
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...iMasters
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobilenipjc
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemCloves Moreira Junior
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Giovanni Bassi
 
Conhecendo o asp.net core
Conhecendo o asp.net coreConhecendo o asp.net core
Conhecendo o asp.net coreNicolas Takashi
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?Luis Vendrame
 
IIS para desenvolvedores
IIS para desenvolvedoresIIS para desenvolvedores
IIS para desenvolvedoresCleber Dantas
 
Introdução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSIntrodução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSTimóteo Nascimento
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Desenvolvimento Serverless
Desenvolvimento ServerlessDesenvolvimento Serverless
Desenvolvimento ServerlessAndré Felizardo
 

Semelhante a ASP.NET Core APIs Performance Tips (20)

O Futuro do ASP.NET
O Futuro do ASP.NETO Futuro do ASP.NET
O Futuro do ASP.NET
 
Workshop Performance Rails
Workshop Performance RailsWorkshop Performance Rails
Workshop Performance Rails
 
BigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage APIBigQuery Performance Improvements Storage API
BigQuery Performance Improvements Storage API
 
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
Desenvolvendo APIs seguras com ASP.NET Core, JWT, Docker e Azure Web App for ...
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performance
 
Desenvolviemento web com ASP.Net e MVC
Desenvolviemento web com ASP.Net e MVCDesenvolviemento web com ASP.Net e MVC
Desenvolviemento web com ASP.Net e MVC
 
Web tools pt-br
Web tools pt-brWeb tools pt-br
Web tools pt-br
 
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
DevCommerce Conference 2016 - Workshop: Velocidade e confiabilidade em e-comm...
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobile
 
A nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvemA nova geração da arquitetura web para a era da nuvem
A nova geração da arquitetura web para a era da nuvem
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
Conhecendo o asp.net core
Conhecendo o asp.net coreConhecendo o asp.net core
Conhecendo o asp.net core
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Preparando sua arquitetura para microservicos
Preparando sua arquitetura para microservicosPreparando sua arquitetura para microservicos
Preparando sua arquitetura para microservicos
 
IIS para desenvolvedores
IIS para desenvolvedoresIIS para desenvolvedores
IIS para desenvolvedores
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Introdução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWSIntrodução a arquitetura Serverless na AWS
Introdução a arquitetura Serverless na AWS
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Desenvolvimento Serverless
Desenvolvimento ServerlessDesenvolvimento Serverless
Desenvolvimento Serverless
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 

Mais de Andre Baltieri

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Andre Baltieri
 
31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks31/08/2019 - Flutter Talks
31/08/2019 - Flutter TalksAndre Baltieri
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de UnidadeAndre Baltieri
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIsAndre Baltieri
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureAndre Baltieri
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2Andre Baltieri
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETAndre Baltieri
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptAndre Baltieri
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native ScriptAndre Baltieri
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignAndre Baltieri
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoAndre Baltieri
 
5509 segurança em ap is
5509   segurança em ap is5509   segurança em ap is
5509 segurança em ap isAndre Baltieri
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 
5505 otimizando frontends
5505   otimizando frontends5505   otimizando frontends
5505 otimizando frontendsAndre Baltieri
 

Mais de Andre Baltieri (20)

Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022Clean Code - Promob DevDay 2022
Clean Code - Promob DevDay 2022
 
31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks31/08/2019 - Flutter Talks
31/08/2019 - Flutter Talks
 
Refatorando para Testes de Unidade
Refatorando para Testes de UnidadeRefatorando para Testes de Unidade
Refatorando para Testes de Unidade
 
PWA: State of Art
PWA: State of ArtPWA: State of Art
PWA: State of Art
 
PWAs no seu Desktop
PWAs no seu DesktopPWAs no seu Desktop
PWAs no seu Desktop
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Otimizando seu cenário de APIs
Otimizando seu cenário de APIsOtimizando seu cenário de APIs
Otimizando seu cenário de APIs
 
Turbine sua API no Microsoft Azure
Turbine sua API no Microsoft AzureTurbine sua API no Microsoft Azure
Turbine sua API no Microsoft Azure
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Migrando para o Angular 2
Migrando para o Angular 2Migrando para o Angular 2
Migrando para o Angular 2
 
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NETProgressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
Progressive Web Apps e o futuro do desenvolvimento Web na Plataforma .NET
 
BaaS com Firebase 3
BaaS com Firebase 3BaaS com Firebase 3
BaaS com Firebase 3
 
Otimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScriptOtimizando eu JavaScript com TypeScript
Otimizando eu JavaScript com TypeScript
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Introdução ao Native Script
Introdução ao Native ScriptIntrodução ao Native Script
Introdução ao Native Script
 
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material DesignCriando aplicações Híbridas com AngularJs, TypeScript e Material Design
Criando aplicações Híbridas com AngularJs, TypeScript e Material Design
 
Microsoft e o mundo do Desenvolvimento
Microsoft e o mundo do DesenvolvimentoMicrosoft e o mundo do Desenvolvimento
Microsoft e o mundo do Desenvolvimento
 
5509 segurança em ap is
5509   segurança em ap is5509   segurança em ap is
5509 segurança em ap is
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
5505 otimizando frontends
5505   otimizando frontends5505   otimizando frontends
5505 otimizando frontends
 

ASP.NET Core APIs Performance Tips

  • 1.
  • 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
  • 5. Agenda • ASP.NET vs ASP.NET Core • Middlewares • Acesso à Dados • Async/Await • Cache • Compressão • Infraestrutura • Micro Serviços • API Gateway
  • 6. ASP.NET vs ASP.NET Core Mudanças Significativas
  • 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
  • 9. • Open Source • Roda sobre o Full Framework / Core Framework ASP.NET Core
  • 10. Commits no GitHub do 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
  • 25. • Utilizado para padronizar o cache da API • Cria perfis que podem ser re-utilizados Cache Profile
  • 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
  • 33. • Utilizado para comprimir textos, imagens e até arquivos • Também é possível utilizar um Custom Provider GzipCompressionProvider
  • 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
  • 40. API Gateway Muitas APIs trazem 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 conjunto de tudo que você viu aqui!