Por que aprender Node.js? 8 Casos reais!

nodejs-logo

Atualizado em 21/06/17 com mais cases!

Depois de uma década desenvolvendo principalmente em Java e C#, recentemente minha atenção se voltou para Node.js. Isso tem chamado a atenção de pessoas próximas à mim que me perguntam porque não troquei Java e C# por linguagens mais “legais” como Ruby e Python.

Como alguém que sempre trabalhou com linguagens fortemente tipadas, orientadas à objeto e em projetos com arquiteturas bem definidas, eu gosto de linguagens “chatas”. Não estou à procura de “zoeira” na minha vida de programador. Eu estou à procura de eficiência.

Eu quero reduzir meus custos com infraestrutura. Eu quero aumentar o desempenho dos meus projetos. Eu quero programar mais rápido.

Node.js me proporciona tudo isso em uma escala sem precedentes. E quanto mais aprendo sobre a plataforma, mais me interesso por ela.

Mas uma dúvida sempre ficava em minha cabeça: será que tem alguém “grande”, que use Node.js em projetos de verdade?

Fui atrás de resposta e embora seja uma plataforma relativamente nova, ela já está sendo utilizada por várias empresas da Fortune 500 e gigantes da tecnologia, principalmente pelas características que citei antes: escalabilidade, velocidade de entrega e performance excepcional. Groupon, LinkedIn, Walmart, PayPal – são apenas algumas empresas bem sucedidas no uso de Node.js.

Os cases deste artigo são:

  1. Groupon
  2. LinkedIn
  3. Walmart
  4. PayPal
  5. Dow Jones
  6. Uber
  7. GoDaddy
  8. Netflix
  9. Conclusões

Vamos lá!

Curso Node.js e MongoDB
Curso Node.js e MongoDB

Groupon

 

Em 2013 o Groupon trocou sua tecnologia de backend de Ruby on Rails para Node.js. O engenheiro Adam Geitgey comenta sobre essa mudança nesse post, e eu transcrevo uma parte aqui:

“Estávamos buscando por uma solução para um problema específico – manipulação eficiente de múltiplas requisições HTTP, fazendo chamadas de API paralelas para servir cada uma dessas requisições e renderizando os resultados em HTML. Também queríamos algo em que pudéssemos confiar.”

A troca para Node.js lhes entregou exatamente isso. Groupon notou uma melhora significativa no tempo de carregamento das páginas de todo o site, na faixa de 50%. Não só isso, mas os times de desenvolvedores passaram a entregar features mais rápido também.

LinkedIn

Quando a maior rede social profissional do mundo relançou seu app mobile em 2011 usando Node.js como backend, eles conseguiram melhorar a velocidade do seu sistema em 20x ao mesmo tempo em que reduziram o número de servidores em 90%.

O líder de desenvolvimento mobile Kiran Prasada, em entrevista ao VentureBeat, disse que “Foi rápido acima de qualquer padrão”. “Eu já trabalhei em empresas grandes e startups como Yahoo, e yeah, era muito rápido.”

Walmart

O maior varejista do mundo levou o uso de Node.js a outra dimensão quando decidiram adotar a plataforma para uso na Black Friday, o maior dia de vendas do ano. E a escolha se pagou: na Black Friday, os servidores do Walmart não chegaram a usar mais de 1% de suas CPUs, a despeito do fato de que suportam 200 milhões de usuários naquele dia.

“Node nos permitiu…escalar muito bem,” conforme dito por Dion Almaer, VP do Walmart para arquitetura mobile. “Ele é perfeito para o que estamos fazendo em mobile.”

PayPal

PayPal é outra grande empresa que está colhendo os benefícios do Node. Sua primeira aplicação Node.js foi uma reescrita de sua página de overview da conta – “uma das mais visitadas do site”, segundo Jeff Harrell do PayPal. Querendo testar o Node, mas sem se arriscar demais, eles decidiram por construir a aplicação em Node.js e em Java, lado a lado, para ver qual teria a melhor performance.

E nesse teste lado-a-lado, Node.js venceu. O time que usou Node desenvolveu duas vezes mais rápido, com menos pessoas, com 33% menos linhas de código e com 40% menos arquivos. Além disso temos a performance. Node conseguiu atender o dobro de usuários por segundo do que o Java, com uma média de 35% mais velocidade na entrega das requisições.

Segue um vídeo de uma das apresentações que o PayPal fez de como estão usando Node em seus projetos:


Dow Jones

Em 2010 a editora Dow Jones (responsável pelo jornal financeiro mais famoso do mundo, o The Wall Street Journal, com 2.1 milhões de cópias vendidas por dia) já usava Javascript. De acordo com Scott Rahner, líder de desenvolvimento da empresa, o time de desenvolvedores começou a usar Node.js em produção pela primeira vez em 2011, durante uma aplicação experimental de leitura do Facebook, o Wall Street Journal Social. Eles experimentaram grande performance na aplicação e no processo de desenvolvimento, que foi concluído em poucas semanas. O CTO ficou espantado com o sucesso obtido com Node.js e convenceu a diretoria a apoiar a tecnologia o que culminou com o Node.js sendo a tecnologia primária da empresa, sendo atualmente utilizada para a maioria dos projetos, especialmente os produtos para os consumidores.

Com as palavras, Scott Rahner da Dow Jones (em uma tradução livre):

“Quando você pensa em Javascript, não há nenhuma tecnologia igual. Algo que você pode fazer deploy em qualquer plataforma, não importa se é Linux, Windows, Heroku, AWS, Digital Ocean, etc… É mais famosa entre os engenheiros do que qualquer outra linguagem. Obviamente combina com as exigências de performance das aplicações de hoje em dia. Combina perfeitamente.”

Uber

Na NodeConf que aconteceu em 2015, Tom Croucher, Engenheiro Sênior na Uber, compartilhou o seguinte relato (tradução livre):

“A coisa que eu mais gosto no Node é o quanto de poder que eu pessoalmente passei a ter com ele. A facilidade com a qual eu consigo fazer coisas com Node amplificou o meu poder enquanto desenvolvedor.”

O Uber começou a usar Node ainda na versão 0.8 e desde a versão 0.10 que eles relatam que a plataforma é super estável e funciona muito bem. O core dos sistemas dessa empresa que na época do relato valia 15 bilhões de dólares é escrito em Node, mais especificamente seus confiáveis sistemas distribuídos e suas bases de dados geoespaciais.

Segue o vídeo com a referência original e neste post o mesmo Tom Croucher fala do uso de Node e de Go, junto de Python, em toda aplicação do Uber:


GoDaddy

Dessa vez quem fala bem de Node é Stephen Comissio, desenvolvedor sênior da GoDaddy, uma das maiores empresas de hospedagens de site e registro de domínio do mundo.

Stephen, agora ex-desenvolvedor .NET, conta que há alguns anos atrás a GoDaddy empregava alguns dos mais experientes desenvolvedores Java e .NET do mercado. Eles queriam iniciar uma mudança cultural na empresa e pensaram que começar a prototipar aplicações em Node.js, lá atrás em 2013, foi um primeiro passo rumo a uma cultura mais ágil. Até então, o front-end da GoDaddy sempre confiou no Javascript e em aplicações single-page (SPA), mas o backend rodava com .NET. Para aumentar sua capacidade de atender requisições em uma de suas aplicações, a empresa decidiu mudar inteiramente seu backend para uma infraestrutura baseada em Node.js.

Durante o anúncio chamado ‘Puppet Master’ durante o SuperBowl de 2014, a GoDaddy enfrentou o seu maior desafio de escala. Eles tinham como meta que 100 milhões de pessoas visitassem um site em questão. A infraestrutura inteira da GoDaddy, naquele momento, conseguia lidar com 13 mil requisições por segundo, com um tempo de resposta médio de 87ms. Mas isto não era o bastante e eles tiveram que pensar em como melhorar ambas métricas, pois estimava-se que apenas um site relacionado ao SuperBowl receberia 10.000 requisições por segundo. Para suportar essa carga o site teve de ser migrado para um cluster próprio de 12 servidores e felizmente eles conseguiram fazer a tempo.

De acordo com Stephen, agora a GoDaddy suporta essa mesma carga com apenas 10% do hardware desde que migraram de .NET para Node.js. Isso significa menos servidores para gerenciar. Eles hoje estão aptos a servir 1.7 milhões de requisições por mês e sobreviveram a diversos ataques DDOS com impacto quase nulo usando Node.js.

O uso da tecnologia também representou um boom para a GoDaddy em termos de aquisição de talentos.

Curso Node.js e MongoDB
Curso Node.js e MongoDB

Netflix

 

A diretora de engenharia de front-end do Netflix, Kim Trott, contou a história do uso da plataforma na Netflix no último Node Summit em Portland.

A história começou em 2013 quando o Netflix não usava Node.js em produção. Eles tinham um grande sistema legado com um tempo de inicialização de 40 minutos, monolítico, builds demorados e máquinas de desenvolvimento enormes. Isto afetava a habilidade de serem mais produtivos e inovarem mais rapidamente. Eles até mesmo não conseguiam construir testes A/B eficientemente, o que é algo crucial uma vez que o Netflix constantemente roda diferentes versões das interfaces para fazer testes, centenas delas simultaneamente na verdade.

Para eles, estava impossível continuar nessa situação, cheios de retrabalhos e tudo mais, principalmente tendo de escrever um código completamente diferente para o front-end e para o backend. Eles usavam Java no servidor e Javascript no cliente. Eles tinham duas maneiras diferentes de depurar, acessar dados e renderizar, e estava ficando muito difícil de continuar trabalhando nesse ambiente. A contratação de profissionais experientes também estava sendo um problema. No fim das contas, eles não estavam se movendo tão rapidamente quanto precisavam para manter o negócio inovador.

Em um primeiro momento, eles estavam simplesmente buscando uma maneira simples de renderização para sua camada de front-end, mais especificamente fazer o roteamento correto das páginas, carregamento de templates e mescla de dados junto aos templates. Netflix também queria transformar o site em um Single Page Application ao invés de ficar renderizando todas as páginas do início ao fim.

Netflix escolheu Node.js uma vez que queria uma linguagem comum para escrever esse mesmo código já existente e de uma maneira que pudessem rodar onde quisessem. Isto ajudou muito os desenvolvedores que estavam constantemente ocupados trocando de contexto entre Java e Javascript toda hora.

Agora Netflix roda de maneira análoga a um SPA e com uma experiência de usuário muito mais rica, sendo que o Node.js é usado em todas as partes do site. Mais que 30% do time do Netflix trabalha com Node em produção e eles dizem que “você vai de 0 a 100 com Node muito rápido, você consegue fazer as coisas funcionarem rapidamente”.

Segue o vídeo com a referência:


Conclusões

Existem outras empresas que não divulgam tão publicamente seu apreço por esta tecnologia, como Google, Yahoo e Mozilla. Outras, como a Microsoft, que escreveu sua ferramenta de CLI do Azure em Node, tem apoiado, e muito, a Node Foundation.

Esses relatos, entre tantos outros que existem pela Internet, me fazem crer que é uma ótima opção de linguagem a se ter no rol de tecnologias dos programadores modernos. Empresas brasileiras que vem crescendo rápido, como a 4all, também estão utilizando Node e mesmo em meus projetos pessoais tenho aprendido a extrair cada vez mais dessa tecnologia.

Em um projeto recente, estimo que os ganhos de trocar C# por Node.js como tecnologia de backend vai me permitir reduzir os custos com datacenter em 75%, uma vez que 1) Node vai atender o dobro de usuários e 2) vou poder rodar ele em Linux sem receios e sem gambiarras.

Isso é eficiência.

Quer aprender hoje como programar em Node.js? Dá uma olhada nesses posts aqui:

e nesse vídeo que eu fiz recentemente:

De nada! 😉

Curtiu o post? Então clica no banner abaixo e dá uma conferida no meu livro sobre programação web com Node.js!

Como rodar NodeJS em servidor Windows

nodejs-retina-preview

Atualizado em 13/07/2017 com bônus!

Dizem que Node.js roda melhor em Linux. Como eu não sou lá muito fã de tela preta e queria colocar um projeto no ar de uma vez, acabei optando por rodar em Windows Server mesmo. No entanto deu um pouco mais de trabalho do que eu previa. De qualquer forma, resolvi organizar a trabalheira aqui para ajudar quem estiver nos mesmos apuros ou para eu mesmo me lembrar no futuro, hehehe.

Saliento que minha aplicação está usando Express, o que pode mudar alguma coisa em relação ao passo-a-passo, dependendo do seu projeto, mas não sei exatamente o quê…

O quê, você não faz a mínima ideia do motivo de eu estar usando Node.js? Dá uma olhada então nesse post aqui que você vai entender.

Se o que você estava buscando era um tutorial de como PROGRAMAR em NodeJS, o link certo é esse aqui.

Os passos para conseguir rodar uma aplicação Node.js no Windows são:

  1. Derrubar o IIS
  2. Desativar Web Deploy
  3. Liberar o Firewall
  4. Configurar a porta 80
  5. Instalar o Node.js
  6. Instalar o Windows Service
  7. Bônus: PM2

Passo 1: Derrubar o IIS

Se você tem o IIS instalado no seu servidor, o primeiro passo é parar ele, para que possamos usar a porta 80 do IIS para nossa aplicação Node.js (afinal, você não vai querer o seu usuário tendo de digitar a porta 3000 ao lado da sua URL, certo?). Existem outras alternativas para rotear o tráfego do IIS para o Node, que dizem inclusive ser mais profissional, mas deixo isso para você estudar por conta.

Você pode pausar o IIS rodando o seguinte comando com permissão de administrador no Executar/Run do Windows (Windows + R).

Ele vai perguntar se você tem certeza, basta confirmar com Y.

Passo 2: Desativar Web Deploy

Se você tem instalado Web Deploy no seu servidor (eu tinha), ele também estará ocupando a porta 80, temos de derrubar ele também. Para isso, abra o Executar/Run novamente e digite:

Isso vai abrir o gerenciador de serviços do Windows. Procure pelo serviço Web Deployment Agent Service e dê um Stop nele. Mais que isso, altere para que ele não inicie automaticamente com o Windows, para evitar problemas futuros.

Passo 3: Liberar o Firewall

O próximo passo é desbloquear a porta 80 no Firewall do Windows. Na caixa Iniciar do Windows digite Firewall e irá aparecer o ícone correto. Abra o gerenciador do Firewall e clique em Inbound Rules, lá, adicione uma nova regra para permitir acesso à porta 80, configurando a mesma na aba Ports and Protocols. Confirme tudo antes de sair.

Passo 4: Configurar a porta 80

Por padrão os apps Node.js rodam na porta 3000 (ao menos usando Express). Se quiser que ele rode na porta 80, além de preparar o servidor como fiz acima, deve alterar o arquivo www dentro da pasta bin do seu projeto Express. Dentro dele (abra com o notepad) verá que a porta 3000 é citada em uma dada linha, apenas altere para 80.

Curso Node.js e MongoDB
Curso Node.js e MongoDB

Passo 5: Intalar o Node.js

Baixe e instale no servidor a versão mais recente disponível para Windows no site oficial do NodeJS.

Depois de instalado, vá novamente no Executar/Run e digite:

Isso deve lhe devolver a versão do NodeJS instalada no servidor. Se não funcionar, reinicie o servidor e tente novamente.

Publique a sua aplicação NodeJS em uma pasta do servidor. Minha sugestão é C:\domains\nomedoapp\www.

Abra uma janela do CMD com permissão de administrador e navegue usando cd até a pasta da sua aplicação Node.js. Exemplo:

Uma vez lá, digite o seguinte comando para instalar as dependências do seu projeto:

Isso deverá ser o suficiente, mas se quiser ter certeza de que tudo que necessita para rodar Node.js está instalado em seu servidor, execute também os seguintes comandos em sequência:

Agora finalmente execute seu app Node.js com o comando abaixo ainda “dentro” da pasta do seu projeto (ou navegue novamente usando cd):

Passo 6: Instalar o Windows Service

Por padrão, o seu site Node.js ficará executando enquanto a janela do console que iniciou seu site estiver funcionando. Se você fechar ela, ou seu servidor reiniciar (malditos Windows Updates!) já era, seu site vai ficar fora do ar até que você execute o npm start de novo.

Para que isso não aconteça, você deve instalar seu site como um Windows Service. Para fazer isso, primeiro instale o módulo node-windows globalmente:

Agora rode o seguinte comando (dentro da pasta do seu projeto) para incluir uma referência deste módulo ao seu projeto:

Depois, dentro do seu projeto Node.js (na raiz mesmo) crie um arquivo service.js com o seguinte conteúdo:

Troque as propriedades name e description de acordo com seu gosto, mas atente à propriedade script nesse código, que deve conter o caminho absoluto até o arquivo JS que inicia sua aplicação. No meu caso, como estou usando express, estou apontando para o arquivo www que fica na pasta bin do projeto (curiosamente ele não possui extensão, mas é um arquivo).

Se você fez tudo corretamente, vá até Ferramentas Administrativas > Serviços (Administrative Tools > Services ou services.msc no Run/Executar do Windows) e seu serviço vai aparecer lá com o name que definiu ali no script, lhe permitindo alterar suas configurações de inicialização, dar Start, Stop, etc.

Outra coisa bacana desse módulo é que ele manda todas as mensagens para o Event Viewer/Visualizador de Eventos do Windows. Assim, caso sua aplicação Node.js não esteja funcionando ou seu serviço não esteja inicializando, basta dar uma olhada lá, na seção Windows > Applications para entender o que está acontecendo.

Caso precise remover esse serviço (para instalar uma versão mais atualizada, por exemplo) rode o comando abaixo no cmd:

Esse servicename você encontra nas propriedades do Windows Service que deseja excluir.

Bônus: PM2

PM2 é um projeto open-source criado e mantido pela empresa Keymetrics.io, que além do PM2 (que é gratuito) vende um serviço de gerenciamento de performance de aplicações Node.js homônimo. Só para você ter uma ideia do que o PM2 é hoje, são mais de 20M de downloads e empresas como IBM, Microsoft e PayPal usando, o que o torna, disparado, a melhor solução de process manager pra Node, muito mais do que seus principais concorrentes, o Forever e o Nodemon.

Pra usar o PM2 é muito simples, primeiro instale globalmente o módulo do PM2:

Depois, quando quiser iniciar o processo da sua aplicação Node.js:

E para garantir que ele rodará eternamente, se recupere sozinho de falhas, etc, você pode estudar o guia oficial dele.

De nada! 😉

Curtiu o post? Então clica no banner abaixo e dá uma conferida no meu livro sobre programação web com Node.js!