SlideShare uma empresa Scribd logo
Melhor Desempenho
Utilizando Node.js em produção
$ whoami
Software Engineer
developers@squidit.com.br
/khaosdoctor
@_staticvoid
lsantos.me
Lucas Santos
trainingcenter.io
help4papers.com.br
2018.abcdevelopers.org
Node.js production
Node.js production?
O que pode acontecer?
1
Sua máquina se transforma
(Em um fogão, por exemplo)
2
Você se transforma #pas
3
Tudo vai bem
“Na minha máquina funciona” starter pack
Afinal o que é o Node?
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node.js em producao
O Node é:
Assíncrono (event Loop)
Non Blocking
Single Thread
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node.js em producao
Sim! Eu pesquisei
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node.js em producao
API’s de alta performance
A anatomia de uma API
A anatomia de uma API
Começa assim
A anatomia de uma API
Começa assim
Termina assim
“Ajeita ali só”
Maiores causas de problemas
- Muito processamento desnecessário
- Má codificação
- Conteúdo estático
- Uso indevido do Node
- Aumento de tráfego repentino
Maiores causas de problemas
- Muito processamento desnecessário
- Má codificação
- Conteúdo estático
- Uso indevido do Node
- Aumento de tráfego repentino (Event Loop)
Maiores causas de problemas
- Muito processamento desnecessário
- Má codificação
- Conteúdo estático
- Uso indevido do Node
- Aumento de tráfego repentino (C10K)
Por que não os dois?
NGINX to the rescue!
Melhorando a API através da infraestrutura
Cache is the key
Se der, cacheia, senão,
também
● Cachear arquivos estáticos
● Cachear chamadas de API
○ Por rota
○ Por hash de IP
● Cachear retornos de DB
● Cachear arquivos gerados por SSR
● Pode ser implementado via Infra (NGINX)
ou via código (Ex: Catbox-redis)
Proxy reverso
Um proxy, só que
ao contrário
Remove a carga de
conexões do node
Permite escalabilidade de
aplicações
Debounce de conexões
Load Balancing
Balanceando carga
- Escalabilidade
próxima de infinita
- Três tipos de
roteamento
- Round Robin
- Least Conn
- IP Hash
Simples assim
Servidores disponíveis
Load Balancer
Proxy Reverso
HTTP/2
The good, the bad
and the /1.1
Chamadas síncronas uma
a uma
O mesmo domínio só
pode responder a uma
request por vez
Bloqueio HOL (Head of
Line)
The good, the bad
and the /2
Multiplexing
Menos conexões
simultâneas
Mais performance
Compressão
Server push
Keep Alive
Simplificação
Simplificação
Show me the code
Código performático
Quando o problema é a peça entre a cadeira e o monitor
Você FAZ
diferença
- Código mais leve roda
melhor
- Tomar cuidado com
consumo de memória
- Evitar funções complexas
(principalmente loops)
- Regra das 80 colunas
- Use menos libs
Map vs For
A guerra dos loops
Loops são as funções mais custosas
que se pode ter
Adição de complexidade
Muitas vezes contornáveis
A guerra dos loops
Loops são as funções mais custosas que
se pode ter
Adição de complexidade
Muitas vezes contornáveis
CodeMetrics
Nem sempre o built-in é o melhor...
Sem filter + reduce Com filter + reduce
Mas, as vezes loops são melhores...
Hashmap vs Case
Voltando às
origens
- Execução paralela de todos
os caminhos possíveis
(cuidado!)
- Consome menos memória
- Menos complexidade
- Menos linhas de código
- Repetição de keywords
- Dinâmico
Async
Quando você usa funções síncronas no Node...
Segura aí que já
volto
- Não bloqueia o
processamento
- Impacto em tempo é
pequeno
- Otimiza o uso de recursos
O que vem por ai!?
- Asynchronous Iteration
Parallel
Tudo junto!
Executa múltiplas ações ao mesmo tempo
Simula um “multi-core”
Ações independentes
Tudo junto!
Executa múltiplas ações ao mesmo tempo
Simula um “multi-core”
Ações independentes
Evite promise-chaining
Não é paralelo!
Cache is the key²
Se der, cacheia, senão,
também²
- Cachear arquivos estáticos
- Cachear chamadas de API
- Por rota
- Por hash
- Cachear retornos de DB
- Cachear arquivos gerados por SSR
- Pode ser implementado via Infra (NGINX) ou via
código (Ex: Catbox-redis)
SSR?
Será que vale?
Processamento muito intenso do
lado do servidor
Bom para páginas pequenas
Distribua o processamento no
cliente
É uma boa prática dependendo
do caso
Node Cluster API
Porque sim! Node pode ser multi-core
Clusters
- Utilizam o processamento
multi núcleo
- Nativo do Node!
- Simples e fácil
Clusters
- Utilizam o processamento
multi núcleo
- Nativo do Node!
- Simples e fácil
- Estável
https://nodejs.org/api/cluster.html
Use mais o V8!
Use mais o V8!
Não use Lodash
Não use Lodash
Não use Lodash
Não
use
Lodash
NãouseLodash
NãouseLodash
Não use Underscore
Não use Underscore
Não
use
Underscore
Não
use
Underscore
Não use jQuery
Não
use
jQuery
NãousejQuery
NãouseUnderscore
Não
use
jQuery
Use mais o V8!
Não use LoDash(e derivados)
POR… QUE?
- Libs são úteis em casos
específicos, use nesses
casos…
- Pensadas para o
browser (muito código
inútil)
Agora sim
- Quando a lógica é
complexa
- ...ou não intuitiva
- Tipo:
Outros pontos
Outras coisinhas
- Gerenciamento de
sessões ocupa
memória
- Utilize projeção no
banco de dados
- Use plataformas de
monitoramento
Workers/Jobs de alta performance
O que é um e o que é outro?
Worker
- Sempre ativo na máquina
- Roda por eventos disparados de
fora
- Consome mais memória (fica
ligado direto)
- Mais propenso a memory leak
Job
- Fica inativo
- Roda apenas em horários ou
intervalos determinados
(CronJob)
- Consome memória em picos
Coletando o lixo
Yes, we have GC
- Node tem um garbage
collector
- Funciona após 1.4Gb de
memória ocupada (Heap
Limit do V8)
- Dividido em Old Space e
New Space (???)
https://blog.risingstack.com/finding-a-memory-leak-in-node-js/
Garbage Collection in depth
Deletamos um obj. GC Roda
Perdeu Root = Memória não usada
New Space Old Space
Garbage Collection in depth
Deletamos um obj. GC Roda
Perdeu Root = Memória não usada
New Space Old Space
MUITO CUIDADO
Coletando o lixo (Manualmente)
Profiling
- Utilização de libs de
profiling
- Usar profiler nativo do
node:
FlameGraph
Node.js production!
Perguntas?
Obrigado!
/khaosdoctor @_staticvoidlsantos.me

Mais conteúdo relacionado

PPTX
Microsservicos serverles combinacao perfeita
PPTX
Arquitetura API em NodeJS
PDF
PDF
Web Apps Minimalistas com Sinatra
PDF
Minicurso Ruby e Rails (RailsMG UNA)
PPT
Concorrência em Android
KEY
Dr Java Virtual Machine
PDF
Detalhes internos da nova JVM do Java 8 @mariofts
Microsservicos serverles combinacao perfeita
Arquitetura API em NodeJS
Web Apps Minimalistas com Sinatra
Minicurso Ruby e Rails (RailsMG UNA)
Concorrência em Android
Dr Java Virtual Machine
Detalhes internos da nova JVM do Java 8 @mariofts

Mais procurados (16)

PDF
Rails nas Nuvens
PDF
Princípios de Concorrência em Ruby e Além
PPTX
JSPs parte 2
PPSX
Vagrant: Na sua máquina também funciona!
PDF
Coffe script
PDF
Definindo a quantidade de workers para sua app
PDF
Apt_vagrant_chef_olavo_queiroz
PDF
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
PDF
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
KEY
testando interfaces web
PPT
Faça seu próprio servidor pirata com OpenVZ
PPT
Estudo de caso do "O Curioso" (Rio on Rails)
PDF
Play svg! Utilizando vetores na web
PPTX
Desenvolvemos para web?
PDF
Vagrant + Puppet
KEY
Sapo Sessions - Web Mobile
Rails nas Nuvens
Princípios de Concorrência em Ruby e Além
JSPs parte 2
Vagrant: Na sua máquina também funciona!
Coffe script
Definindo a quantidade de workers para sua app
Apt_vagrant_chef_olavo_queiroz
Primeiros passos com Nerves (Elixir para dispositivos embarcados)
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
testando interfaces web
Faça seu próprio servidor pirata com OpenVZ
Estudo de caso do "O Curioso" (Rio on Rails)
Play svg! Utilizando vetores na web
Desenvolvemos para web?
Vagrant + Puppet
Sapo Sessions - Web Mobile
Anúncio

Semelhante a TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node.js em producao (20)

PDF
Node.js no Pagar.me
PDF
TDC2018SP | Trilha Serveless - Pra que SERVErless?
PDF
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
PPT
Replicacao Object Sistemas
PDF
Node.JS - Workshop do básico ao avançado
PPTX
Novas Fronteiras
PDF
Node.JS - Campus Party Brasil 2011
PDF
Node.js for Noobs
PDF
Nodejs - A performance que eu sempre quis ter
PDF
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
PDF
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
PDF
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
PDF
Planejamento de Capacidade - Técnicas e Ferramentas
PDF
Além da programação funcional com Elixir e Erlang
PPTX
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
KEY
Uma visão rápida sobre Nodejs
PDF
RubyMasters 2011 - Beyond Ruby with NodeJS
ODP
Programação Paralela - Threads
PDF
Node.js: 5 razões para começar a utilizar
PPTX
Foco no app, viva o serverless!
Node.js no Pagar.me
TDC2018SP | Trilha Serveless - Pra que SERVErless?
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Replicacao Object Sistemas
Node.JS - Workshop do básico ao avançado
Novas Fronteiras
Node.JS - Campus Party Brasil 2011
Node.js for Noobs
Nodejs - A performance que eu sempre quis ter
Webinar Melhores práticas e lições aprendidas com aplicações sem servidor
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
Planejamento de Capacidade - Técnicas e Ferramentas
Além da programação funcional com Elixir e Erlang
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Uma visão rápida sobre Nodejs
RubyMasters 2011 - Beyond Ruby with NodeJS
Programação Paralela - Threads
Node.js: 5 razões para começar a utilizar
Foco no app, viva o serverless!
Anúncio

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core

Último (20)

PPTX
INDÚSTRIA_ Histórico da industrialização.pptx
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
PPT
sistema reprodutor para turmas do oitavo ano
PPTX
435434725-A-Mineracao-No-Brasil-Colonial.pptx
PDF
Células Introdução para as aulas de EJA.
PDF
Metabolismo_energético_3ano_pre_vest_2026.pdf
PDF
Cantores.pdf-Deslandes, Tinoco e Zambujo
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
PDF
A Revolução Francesa de 1789 slides história
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PPT
aula de envelecimento.ppt saúde do idoso
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPT
História e Evolução dos Computadores domésticos
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PPTX
Noções de Saúde e Segurança do Trabalho.pptx
INDÚSTRIA_ Histórico da industrialização.pptx
Trabalho Cidades sustentáveis ou Utopia.pptx
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
sistema reprodutor para turmas do oitavo ano
435434725-A-Mineracao-No-Brasil-Colonial.pptx
Células Introdução para as aulas de EJA.
Metabolismo_energético_3ano_pre_vest_2026.pdf
Cantores.pdf-Deslandes, Tinoco e Zambujo
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
A Revolução Francesa de 1789 slides história
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
aula de envelecimento.ppt saúde do idoso
GUERRAFRIA.pptdddddddddddddddddddddddddx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
História e Evolução dos Computadores domésticos
Pedagogia em Ambientes Não Escolares.pptx
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
BINGOS_DAS_PALAVRAS_bingo das palavras.pdf
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
Noções de Saúde e Segurança do Trabalho.pptx

TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node.js em producao