Série Node.js: Rodando suave…

Olá!

[English Version]

Esta é a parte 5 da minha série Node.js, dê uma olhada nos posts anteriores!

Até agora na série, determinamos que há muitas vantagens em migrar para o Node.js, desde a facilidade de adoção da equipe de programadores até o desempenho, mas ele precisa de algumas ferramentas.

Ao executar seu código diretamente do node ou do do npm, como acontece em qualquer outra linguagem, ocorrerão erros, e você não quer que seus serviços sejam interrompidos sempre que alguém esquecer de tratar alguma exceção. Você também desejará fornecer continuamente atualizações de código sem que os clientes experimentem o tempo fora do ar ou a redução do desempenho.

Para conseguir isso, você deveria verificar o PM2 , da Keymetrics.

Essa ferramenta não apenas manterá seu código em execução, mas também fornecerá ferramentas profissionais para monitorar, gerenciar e até mesmo debugar seu código de execução.

Se você já tem o Node.js instalado, tudo o que você precisa fazer é executar isso no seu console:

npm install pm2 -g

Uma vez que você o tenha, é fácil rodar o seu primeiro código, se você tiver um arquivo javascript que roda com o Node, digamos que seja chamado myservice.js, você pode iniciá-lo executando o código abaixo. Para este exemplo, estou usando o código que eu postei anteriormente, dê uma olhada!

pm2 start myservice.js

Se o seu console retornar algo assim, você está no caminho certo:

[PM2] Starting /myservice.js in fork_mode (1 instance)
[PM2] Done.
⇆  PM2+ activated | Web: https://app.pm2.io/#/r/MY_ID | Server: vrsbrazil | Conn: Axon
PM2+ on-premise link: root.keymetrics.io
┌───────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┬──────────┐
│ App name  │ id │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem       │ user     │ watching │
├───────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┼──────────┤
│ myservice │ 0  │ fork │ 7398 │ online │ 0       │ 0s     │ 0%  │ 12.8 MB   │ vrsbrazil│ disabled │
└───────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┴──────────┘
 Use `pm2 show ` to get more details about an app

Então essa é a parte em que fica interessante. Se você fizer olhar a linha 3, você verá uma URL, o ID aqui está obviamente alterado, mas uma vez que você o execute em sua máquina e acessar este link, você chegará à página de monitoramento em nuvem, que se parecerá com isto:

Captura de tela de 2018-08-02 11-43-21

Como você pode ver, este é obviamente um recurso pago, mas pode realmente melhorar a sua vida. Se você tem até 4 processos, você pode usar a versão gratuita e, na verdade, há muito a fazer com ela, o monitoramento em tempo real oferecido é bastante útil, mas há muitos recursos que você pode obter com o pago.

Captura de tela de 2018-08-02 11-59-15

De volta ao console, como eu mencionei no começo, você vai querer ter seu serviço à prova de falhas e este é um dos recursos pré-construídos, caso seu código falhe, o PM2 irá reiniciar automaticamente para você. É claro que é necessário ter uma maneira de garantir que seus processos sejam iniciados automaticamente, caso você precise reiniciar o servidor. Para fazer isso, tudo o que você precisa fazer é executar isso em seu console:

pm2 startup

O console retornará o próximo comando que você precisa para executar, a fim de permitir que ele inicie em tempo de boot, no meu caso, é isso que eu recebi:

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /home/vrsbrazil/.npm-global/lib/node_modules/pm2/bin/pm2 startup systemd -u vrsbrazil --hp /home/vrsbrazil

Garanta que você rodou o comando sugerido e tudo deverá funcionar bem.

Bem, é isso para este post. Espero que você goste e, se puder, deixe-me saber o que você está construindo nos comentários.

Ainda há muito o que falar nessa série do Node.js, então, por favor, siga-me no twitter @vrsbrazil para que você possa ser notificado no próximo post.

Muito obrigado!

Advertisements

Node.js Series: Smoothly running it

Hey there!

[Versão em Português]

This is part 5 of my Node.js series, make sure you checkout the previous posts!

So far in the series we have determined that there are a lot of advantages migrating to Node.js, from programmer’s team ease of adoption to performance, but it does need a few tools though.

When running your code directly from the node or npm executable, as it happens in any other languages, errors will occur, so you do not want your services braking down every time someone forgets to treat some exception. You will also like to continuously deliver code updates without clients experiencing downtime or performance degrading.

To achieve this you should probably be checking PM2 out, from Keymetrics.

This tool will not only keep your code running, but it also gives you strong professional tools for monitoring, managing and even debugging your running code.

If you already have Node.js installed, all you need to do is run this on your console:

npm install pm2 -g

Once you have it, it is easy to run you first code, if you have a javascript file that runs with node, let’s say it is called myservice.js, you can start it by running the code below. For this example I am using the code I posted previously, so go check it out!

pm2 start myservice.js

If your console returns something like this, you are good to go:

[PM2] Starting /myservice.js in fork_mode (1 instance)
[PM2] Done.
⇆  PM2+ activated | Web: https://app.pm2.io/#/r/MY_ID | Server: vrsbrazil | Conn: Axon
PM2+ on-premise link: root.keymetrics.io
┌───────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┬──────────┐
│ App name  │ id │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem       │ user     │ watching │
├───────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┼──────────┤
│ myservice │ 0  │ fork │ 7398 │ online │ 0       │ 0s     │ 0%  │ 12.8 MB   │ vrsbrazil│ disabled │
└───────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┴──────────┘
 Use `pm2 show ` to get more details about an app

So this is the part where it gets interesting. If you checkout line 3, you will see an URL, the ID here is obviously changed but once you run it on your machine and reach out to this link, you will get to the cloud monitoring page, and it looks like this:

Captura de tela de 2018-08-02 11-43-21

As you can see this is obviously a paid feature, but it can really level up your game. If you have up to 4 processes you may use the free version and there is actually a lot to it, the real time monitoring it offers is quite useful, but there are a lot of features you may get with the paid one.

Captura de tela de 2018-08-02 11-59-15

Back on the console, like I mentioned in the beginning, you will want to have your service fault proof and this is one of the pre-built features, in case your code fails, PM2 will automatically start restart it for you. Of course there needs to be a way you make sure your processes will start automatically in case you need to restart your server and to do that all you need to do is run this at your console:

pm2 startup

The console you return the next command you need to run in order to enable it to start on boot, in my case, this is what I got:

[PM2] Init System found: systemd
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /home/vrsbrazil/.npm-global/lib/node_modules/pm2/bin/pm2 startup systemd -u vrsbrazil --hp /home/vrsbrazil

Make sure you run the suggested code and you should be all set.

So there you go then, this is a good head start for you to get your Node.js service running on fail-safe mode.

This is it for this post. I hope you enjoy it, and if you can, do let me know what you are building with it on the comments.

There is still a lot to talk about on this Node.js series so please follow me on twitter @vrsbrazil so you can get notified on the next post.

Thank you very much!

Node.js Series: Connecting to Oracle DB

Hi!

[Versão em Português]

This is part 4 of my Node.js series, do checkout the previous posts and let me know what you think!

So we knew it would come to this, connection to Oracle DB. First of all, it does work, so what I am going to do here is the first part of the post is telling you how you do it, second part is my overall experience with this and what you should expect being your next moves. Let’s get to it then:

Acquiring the tools

Oracle provides you a mostly open-source module for your connection right here. And it works for Node 6, 8 and 10, so make sure you check your installation first. I used it with Node.JS version 10.7.0 and it worked fine.

Even though the installation process is a bit tricky, it is well documented at their github page. Keep in mind it demands the installation of Oracle client libraries into your running machine, so be warned that a simple npm i oracledb will not do!

So here is my example code:


var oracledb = require('oracledb');

oracledb.getConnection(
  {
    user          : "usr",
    password      : "pwd",
    connectString : "host:port/orcl"
  },
  function(err, connection) {
    if (err) {
      console.error(err.message);
      return;
    }
    connection.execute(
      `SELECT *
       FROM dual`,
      [],  
      function(err, result) {
        if (err) {
          console.error(err.message);
          doRelease(connection);
          return;
        }
        console.log(result.rows);
        doRelease(connection);
      });
  });

function doRelease(connection) {
  connection.close(
    function(err) {
      if (err)
        console.error(err.message);
    });
}


This code is basically a copy of the code the can be found on their github page, as you can see, there is a lot of room for improvement braking this code into components, so keep that in mind when building your production ready version.

The code above did not work the first time though, I got thrown an error:

ORA-24454: client host name is not set

All you have to do is run this on you Linux console:

sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"

So yeah, this all I had to do in order to get this Oracle DB thing going.

It does work, BUT…

I think this solution is incomplete. As promised that is the second part with my personal opinion on the solution.

We are right now living in an environment where the high tendency is not even knowing the machine your code is running at, so offering a solution that needs local machine config in order to connect is questionable in the very least. I thought we had this figured out by the time JDBC thin clients were born. Most of Node.js customers out there are planning if not already deployed their first versions on serverless cloud providers, so it is my belief it should be reviewed.

My personal recommendation here is you should by now really start planning the usage of intermediary NoSQL databases databases like MongoDB instead of going straight to the SQL database. There are a LOT of advantages on the performance and even security realms to this strategy which we may even talk about in future post.

There are still lots to talk about on Node.js and new things are coming everyday, please follow me on twitter @vrsbrazil to follow this series and more.

Thank you!