PM2 quebrado
Entenda os problemas da semana causado pelo PM2
O PM2 é um dos pacotes mais usados para monitoria e também manter aplicações NodeJS rodando. Recentemente apresentou alguns, vou explicar a treta nesse artigo e também alternativas para ele.
Um problema relacionado ao PM2 foi colocado no Github, motivo uma das dependencias retorna um status code 503. Essa dependencia não usava o npm e estava em um outro servidor.
Isso logo gerou algumas reações e investigações sobre essa dependencia e que Luke Jackson encontrou como um simples console.log
com a mensagem 'Smarty Smart Smarter'
So pm2 (a node process manager package on npm) just caused thousands of CI builds to fail because of an "optionalDependency" on a package called gkt which is requested as a tarball from a server that was returning 503. That package consists of one file which contains this: pic.twitter.com/9lY7yJZFm5
— Luke Jackson (@lukejacksonn) May 23, 2019
A empresa que mantem o PM2 consertou esse problema em menos de 24horas e justificou o problema disso como não podendo confiar nas estatiscas de download no npm e usa para gerar o gráfico da home.
As we cannot rely on NPM downloads counter, so we had to build our own analytics system relying on an external module. Basically it helps us crunch analytics and have this realtime dashboard: https://t.co/nc7yuqEacG
— Keymetrics I/O (@keymetrics_io) May 23, 2019
Coletar dados para melhorar um produto não é um problema em si, mas a forma de fazer isso é complicado. Mesmo que o código final seja só um pequeno console.log
, isso deixa as instalações de dependencias mais lentas e expões os servidores que fazem as requisições para essa dependência.
Alternativas ao PM2
Já deu para ver que não podemos confiar muito em uma dependencia como o PM2 então o que usar no lugar?
Configure seu serviço usando o systemmd
, ele gerencia os processos da sua aplicação e reinicia da forma correta. Se quiser se aprofundar mais só ler essa série bem completa sobre o assunto. Como o developerworks não tem a sequencia correta, só olha na lista abaixo ;)
Parte 1, Parte 2, Parte 3, Parte 4, Parte 5 e Parte 6
Outra opção que pode ser bem util configurar o seu Docker para reiniciar automaticamente.
docker run --autorestart
Ou se você já não se importar com mais nada, existe o forever
.
[sudo] npm install forever -g
Ou então, você usa o systemctl docker run forever
, mas não usa o PM2. #brinks
Eles já resolveram o problema e pode usar se você achar necessário. Mas temos mais um problema relacionado ao ecossistema de pacotes javascript, o que é o maior também para ser justos.
Photo by Italo Melo from Pexels