O crescimento a que temos assistido em relação ao JavaScript é difícil de esconder. Ao longo dos anos tem-se conseguido oferecer centenas – senão milhares – de frameworks e bibliotecas que ajudam os developers e as empresas a criar sites, portais, aplicações interativas, ágeis e com interfaces modernas. Se somarmos a isto o facto de o JavaScript ser independente de outras plataformas, fácil de aprender, suportado por uma comunidade sempre crescente, entre muitas outras vantagens, é fácil perceber porquê.
No entanto, durante muito tempo, o JavaScript foi uma linguagem exclusivamente orientada para client-side e nunca conseguiu ser uma alternativa para o backend. Pelo menos até 2009, ano em que foi lançada a primeira versão do Node.js. Pela primeira vez na história do JavaScript apareceu uma alternativa viável para backend.
Algo que é importante desmistificar é o receio que muitas empresas ainda têm sobre esta alternativa aos backend mais tradicionais (Java, .NET, etc), no seu mundo de aplicações Enterprise, mesmo quando empresas como Netflix, Trello, PayPal, Linkedin, Uber, Walmart, NASA, Intel, Twitter, entre muitos outros exemplos, já usam com sucesso Node.js nas suas infraestruturas, sendo que esta lista cresce de dia para dia.
Para quem ainda não conhece Node.js, é importante salientar algumas das suas maiores vantagens:
- Ideal para a construção de aplicações real-time;
- Facilita a visão do programador full stack em Javascript (visto que a linguagem para backend e frontend é a mesma);
- Diminui o tempo de desenvolvimento, graças à visão full stack;
- É suportado por uma comunidade gigante que contribui com novas bibliotecas e updates a um ritmo alucinante;
- A execução do código é extremamente rápida;
- Ideal em arquiteturas orientadas a micro serviços.
Voltamos então à questão que aqui queremos endereçar: porque é que as empresas devem adotar Node.js para as suas aplicações? Respondendo sucintamente, porque foi desenhado para aplicações de escala e orientado para uma visão moderna de como desenvolver aplicações com arquiteturas complexas.
Como é que, na realidade, se concretizam essas capacidades é a parte mais importante.
A escalabilidade é essencial na grande maioria das aplicações empresariais atuais e o Node.js responde a isso oferecendo de raíz um módulo de clustering com balanceamento de carga em múltiplos cores de CPU. Associando o poder de clustering a uma solução single-threaded, non-blocking, orientada a eventos e callbacks, permite que trate de múltiplas conexões em simultâneo, conseguindo desta forma o processamento de milhões de conexões concorrentes.
O facto de ser single-thread é, por vezes, encarado como uma limitação por, em teoria, poder tornar a aplicação mais lenta, mas isso não é mais do que um mito. Ao contrário de soluções que não são orientadas a eventos e onde são necessárias múltiplas threads para lidar com múltiplos pedidos, sendo que o número de threads em paralelo é limitado, em Node.js esse limite não existe. Desde que exista memória e o kernel assim o permita, podemos processar qualquer número de pedidos em simultâneo sem problema.
Existe também o receio de muitas empresas colocarem o seu código na Cloud, o que impediria a utilização do npm (Node Package Manager). Para endereçar esta questão, foi criada uma versão Enterprise que pode ser instalada e mantida na própria infraestrutura da empresa, mantendo assim o seu registo interno de módulos, obedecendo aos requisitos mais rígidos de segurança que possam existir.
Para além disso, existe ainda a questão do suporte a longo prazo. Esta será sempre uma preocupação nas soluções Enterprise, mas a verdade é que o Node.js também garante esse suporte.
Cada versão major do Node.js contará com suporte ativo durante 18 meses, desde o período em que entra em LTS (Long Time Support), passando depois para um regime de manutenção com a duração de 12 meses extra. Durante este período não haverá qualquer inclusão de novas funcionalidades na versão utilizada, apenas a correção de bugs e atualizações de segurança. Desta forma, o problema que poderia existir nas soluções desenvolvidas com recurso a Node.js porque, por não terem longevidade, poderiam deixar de ter suporte, deixa de fazer sentido.
Foi com base em toda esta informação que as empresas anteriormente referidas decidiram fazer a sua transição para esta tecnologia. O que é que ganharam?
- Netflix: tempos de carregamento reduzidos em cerca de 1 minuto;
- LinkedIn: reconstruiu o seu core dos serviços mobile recorrendo a Node.js, com a aplicação a correr 20 vezes mais rápido e com uma integração muito melhor entre backend e frontend, num altura em que o Node.js tinha, apenas, um ano de desenvolvimento;
- PayPal: migrou todas as suas web applications de Java para Javascript e Node.js, e viu os seus programadores escreverem menos 33% das linhas de código, utilizar menos 40% dos ficheiros e levar metade do tempo a construir a sua aplicação (também com recurso a menos pessoas). Os tempos de resposta diminuíram em cerca de 35%, o que implicou páginas a serem devolvidas com uma melhoria de 200ms;
- Uber: montou o seu sistema de relacionamento entre condutores e passageiros com Node.js devido às suas capacidades de resposta rápida, grande poder de processamento de pedidos e facilidade em ter uma arquitetura distribuída.
Com isto não quero dizer que o Node.js é uma “silver bullet”. Pode não ser a melhor solução para todos os casos, mas faz sentido avaliar as suas potencialidades e perceber as mais valias que podemos retirar desta tecnologia.
Partner & Enterprise Solutions Lead