Francisco Costa

Node.js: a plataforma JavaScript utilizada pela Netflix e Uber

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.

Francisco Costa

Enterprise Solutions Lead

Francisco CostaNode.js: a plataforma JavaScript utilizada pela Netflix e Uber
read more

Node.js: the JavaScript platform used by Netflix and Uber

The progressive and noticeable growth of JavaScript is hard to ignore. Over the years, this programming language has singlehandedly provided hundreds – if not thousands – of frameworks and libraries, helping developers and companies to create websites, portals, and interactive and agile applications, with modern interfaces. Adding the fact that JavaScript is completely independent from other platforms, easy to learn and supported by an ever-growing community, among many other advantages, it is easy to understand why.

However, for a long time, JavaScript was a language exclusively oriented towards client-side development and never managed to establish itself for backend purposes – at least until 2009, when the first version of Node.js was launched. For the first time in history, JavaScript became a viable alternative for backend solutions.

It is important to demystify the fear that many companies have about this alternative to more traditional backend solutions (Java, .NET, etc.) in the world of Enterprise applications, even though companies including Netflix, Trello, PayPal, LinkedIn, Uber, Walmart, NASA, Intel and Twitter have already successfully implemented Node.js in their infrastructures – and this list continues to grow each day.

For those who are not familiar with Node.js, it is important to highlight some of its biggest advantages:

  • Ideal for the construction of real-time applications;
  • Facilitates the programmer’s full stack vision in JavaScript (as both backend and frontend languages are the same);
  • Decreases development time, thanks to its full stack view;
  • Supported by a gigantic community that contributes new libraries and updates at an astonishing rate;
  • Extremely fast code execution;
  • Ideal in architectures oriented towards micro services.

We can now go back to what we really want to discuss: why should companies adopt Node.js for their applications? In a nutshell, because it was designed for large-scale applications, offering a modern perspective on how to develop applications with complex architectures.

How those capacities actually come to fruition is the most important aspect.

Scalability is essential for the vast majority of current corporate applications, and Node.js responds to that necessity by offering a base clustering module with load balancing on multiple CPU cores. Associating the clustering power with a single-threaded, non-blocking solution, specifically designed for events and callbacks, allows it to handle multiple connections simultaneously, processing millions of concurrent connections.

Being single-threaded is often regarded as a limitation because, theoretically, it can slow down the performance of the application, but that is nothing more than a myth. On solutions that are not oriented towards events, where multiple threads are necessary to deal with multiple requests, the number of parallel threads is limited. Node.js is completely free from these limitations. As long as there’s available memory and if the kernel allows it, we can effortlessly process any number of simultaneous requests.

Companies are also generally afraid to place their code in the Cloud, which would prevent the usage of the NPM (Node Package Manager). In order to address this issue, we have created a new Enterprise version that can be installed and maintained on companies’ own infrastructures, therefore preserving their internal module registry and complying with the strictest security requirements.

We also need to touch on the subject of long-term support. This will always be a priority for Enterprise solutions, but the truth is that Node.js also assures that very same support.

Each major version of Node.js will include active support for 18 months from the period it becomes eligible for LTS (Long Time Support), after which it will transition to a maintenance regime with a duration of 12 additional months. During this period, the version used will receive security updates and bug fixes, but new functionalities will not be added. In this way, we have addressed the potential problem that causes the absence of support for solutions developed with the help of Node.js, due to its lack of longevity.

Based on all this information, the aforementioned companies decided to make their transition to this technology. What have they accomplished?

  • Netflix: a reduction of over one minute on buffering times.
  • LinkedIn: rebuilt the core of their mobile services with Node.js. Their application is currently running 20 times faster and benefits from a substantially better integration between backend and frontend. This was achieved while Node.js was just in its first year of development.
  • PayPal: migrated all their web applications from Java to JavaScript and Node.js and saw their programmers writing 33% less lines of code, using more than 40% less files and reducing by half the necessary time to build their applications (while also requiring less people). Response times have decreased by roughly 35%, which translates to an improvement of 200 ms in page creation times.
  • Uber: built their interpersonal system between drivers and passengers with Node.js, due to its fast response capabilities and massive power to process requests, along with the welcome ease and ability to have a distributed architecture.

I don’t want to plant the idea that Node.js is a “silver bullet”. It might not be the best solution for all cases, but it is always wise to evaluate your possibilities and understand the potential benefits of this technology.

Francisco Costa

Enterprise Solutions Lead

Francisco CostaNode.js: the JavaScript platform used by Netflix and Uber
read more