Hands-on – NodeJS – PM2

pm2

O PM2 é um gerenciador de processos que roda em Node, mas também podemos utilizá-lo para várias outras linguagens.

Para iniciar nossos testes, vou utilizar um servidor utilizando o express:

Vamos salvar como server.js., se a gente rodar esse servidor, ele trava o console, então se eu fechar o console, o servidor vai cair.

Como podemos contornar isso?

A ideia do PM2 é justamente permitir que você suba esse serviço caso necessário, caso, por algum motivo, seu serviço tenha um exception e caia você consiga voltar ele.

Toda vez que bate uma requisição, eu escrevo o número de segundos que vem do date().getTime().

Essa seria nossa aplicação que queremos colocar no ar, agora vamos fazer o seguinte:

Com isso estou instalando o PM2 em diretório global, assim podemos rodar de onde estivermos e não necessariamente em um diretório específico.

Após a instalação, vamos digitar:

Perceba que ele já está rodando um script:

Agora podemos ver os logs do nosso servidor utilizando:

Perceba que ele startou o servidor e em seguida todos os F5.

Utilizando o PM2 status, é possível ver tudo que temos de script que esteja rodando. Nele podemos ver, por exemplo, o uptime que é há quanto tempo que ele reiniciou por algum motivo.

Outro comando que temos é o:

Com ele podemos monitorar tudo que está acontecendo nesse script:

Vamos supor que você atualizou sua aplicação e queira que ela seja recarregada, é possível fazer um reload, por exemplo, vamos modificar o “Hello World” para  “Hello World!!!” e salvar. Obviamente meu script não será recarregado, mas caso eu faça:

Ele irá recarregar o servidor e caso execute novamente, o script já irá aparecer atualizado. Outra coisa muito interessante no PM2 é que ele permite que a gente crie um cluster de scripts, então quando eu vou startar o PM2, posso falar para ele quantas cópias quero desse script, por exemplo, 4 cópias.

E ele permite que eu escale isso automaticamente. Ele já coloca em modo cluster e distribui as conexões para esse aplicativo de forma automática:

Então, ao rodar, ele já mostra que está no modo cluster e que tem quatro processos rodando. Para testar, vamos utilizar o JMeter:

Em test Plan, vou adicionar um Thread users, em seguida adicionar um Sampler/HTTP Request. Em basic, vamos preencher da seguinte forma:

Eu quero mostrar que, como ele está rodando no modo cluster, ele mostra o log de cada nó no cluster, então baseado na carga que eu colocar no servidor, você pode perceber que vem uma requisição no servidor zero, um, dois e três:

O próprio PM2 já está distribuindo a carga entre o cluster do meu aplicativo. Se tivermos uma máquina com mais de um núcleo, podemos utilizar cada um desses scripts rodando em um núcleo específico, com isso temos uma performance muito melhor.

Deixe suas dúvidas e sugestões nos comentários. Curta o DevPleno no Facebookinscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades.  Abraço!