Escalabilidade e Alta Disponibilidade com Node.js

Escalabilidade e Alta Disponibilidade com Node.js

F803c45d62a468e0cb990398c004bd3e?s=128

Vinicius Reis

November 19, 2019
Tweet

Transcript

  1. Escalabilidade e Alta Disponibilidade com Node.js

  2. Vinicius Reis @vinicius73 @LuizVinicius73 Gravo aulas sobre Vue.js, JavaScript e

    Laravel para codecasts.com.br Claro Controle @ M4U @vinicius73
  3. A base de tudo

  4. Node.js é single thread Um serviço node é por padrão

    um único processo, uma única thread. Process Execution CPU
  5. E as operações assíncronas?

  6. Primeiro, devemos entender um pouco de como o JavaScript é

    executado.
  7. Call Stack Cada chamada de função/operação gera uma entrada na

    callstack do motor do JavaScript. Essa pilha de execução enche e esvazia conforme a aplicação é executada, de forma síncrona. Memory Heap Call Stack
  8. Callback Queue Uma pilha de execução similar a call stack,

    porém sua execução é assíncrona. Callback Queue Memory Heap Call Stack Conforme a callback queue “esvazia”, a call stack “enche”
  9. Event Loop O Event Loop é o responsável por coletar

    esses eventos e adicioná-los a call stack. Callback Queue Call Stack Event Loop Referências: https://bit.ly/33Rn3CX Veja funcionando: http://latentflip.com/loupe/
  10. Operações Bloqueantes

  11. Operações Bloqueantes Apesar dessas características, as operações executadas no JavaScript

    são concorrentes. Ou seja, concorrem entre si para saber em que momento podem ser executadas. Apenas uma operação ocorre por vez. https://bit.ly/32SAP6Q
  12. Código bloqueante impacta na performance de aplicações http

  13. Teste de carga Uma simples operação bloqueante de 5 segundos

    foi capaz de prejudicar a performance da aplicação em 99,96% Sem Blocking Com Blocking (5s) 51.415 req/10s 18 req/10s 5145 req/s 1,8 req/s https://bit.ly/2CTdpDL
  14. - Node.js Cluster Mode -

  15. Node.js Cluster Mode Um cluster é resumidamente um processo que

    age como balanceador de carga para subprocessos. Sub Process Sub Process Sub Process Sub Process Main Process / Service
  16. Node.js Cluster Mode Cluster não é multi-thread. Cada processo ainda

    sofrerá com ações bloqueantes, entretanto o balanceador de carga terá como distribuir as requisições paralelas em outros processos enquanto um estiver “ocupado”. Sub Process Sub Process Sub Process Sub Process Main Process / Service m ulti-thread
  17. Como?

  18. PM2 https://pm2.keymetrics.io/

  19. Só isso?

  20. Definitivamente não!

  21. Escalabilidade + CPU +Memória ... Vertical Horizontal +Máquinas / +Instâncias

    Uma estratégia de escalabilidade deve ser tomada para garantir performance e disponibilidade da aplicação.
  22. Escalabilidade Vertical + CPU +Memória ... Vertical Se resume a

    aumentar as capacidades de uma única instância / máquina onde a aplicação é executada. Apesar de simples, tem custos elevados no longo prazo, e não garante disponibilidade.
  23. Escalabilidade Horizontal Horizontal +Máquinas / +Instâncias Ao optar por incrementar

    a quantidade de máquinas / instâncias de uma aplicação haverá uma maior disponibilidade. Caso uma máquina falhe, a aplicação continuará disponível.
  24. Escalabilidade Horizontal Horizontal +Máquinas / +Instâncias Esta estratégia garante uma

    maior disponibilidade. Caso uma máquina falhe, a aplicação continuará disponível.
  25. Escalabilidade Horizontal Nesta arquitetura, as requisições não chegam diretamente nas

    instâncias. Um balanceador de carga é o responsável por determinar para onde a requisição deve ir. A B C D E F Load Balancer Requests
  26. Escalabilidade Horizontal IMPORTANTE: Recursos como banco, cache entre outros, devem

    ser compartilhados entre as instâncias. A B C D E F Load Balancer Recursos compartilhados
  27. Como?

  28. Docker

  29. Orquestradores São ferramentas responsáveis por criar e criar novas instâncias.

  30. Conclusão Apesar de suas particularidades, com alguns ajustes, Node.js (e

    outras soluções) têm a capacidade de escalar e entregar alta disponibilidade.
  31. Obrigado!