Saiba por que você deve utilizar Node.Js como a NASA
Usando o Node.js, podemos criar aplicativos JavaScript para serem executados em um ambiente do lado do servidor, usando o mecanismo Google JavaScript v8, o mesmo do Google Chrome (ECMAScript 5)
Apesar de ser uma tecnologia de última geração, tem sido utilizada por muitas grandes corporações como Uber, Netflix, Linkedin, NASA, Walmart e muitas outras. Com essas grandes empresas por perto, o uso do Node.js na comunidade se tornou a norma.
Uma das principais razões para adotá-lo é sua alta escalabilidade. Sua arquitetura, flexibilidade e baixo custo os tornam ideais para microsserviços e implementações de arquitetura sem servidor. Com isso, é comum que novas empresas decidam usar o Node.js, por isso há uma demanda crescente por desenvolvedores que entendem da tecnologia.
Atenção: O objetivo deste artigo não é citar ou tentar convencê-lo de que o Node.js é superior a qualquer outra tecnologia, a escolha do Node.js ou de qualquer outra tecnologia envolve muita complexidade e depende principalmente do contexto em que o projeto estará envolvido.
O Problema
Tudo no espaço parece pacífico, e a gravidade zero pode até dar a impressão de tranquilidade, mas não se engane: a órbita da Terra é um ambiente extremamente hostil e perigoso. Tanto que uma equipe dedicada está constantemente no terreno monitorando sinais vitais, previsões espaciais, velocidades relativas e inúmeras variáveis de diferentes fontes para garantir que tudo corra bem para as missões fora da estação espacial.
Em um acidente em uma das missões, a água começou a vazar do interior do capacete do traje espacial, e a equipe de comando de combate terrestre descobriu que os sistemas usados para tomar decisões críticas não estavam otimizados. Informações e dados geralmente são coletados de sistemas diferentes, redes diferentes e fornecedores com tecnologias de propósito único.
A impossibilidade de realizar consultas mais granulares e acessar todas as fontes em tempo real levou ao desenvolvimento de novos sistemas, além de integração quase inexistente, duplicação de dados.
Node.js como solução
No contexto de implementação de sistemas distribuídos de alto desempenho, o plano é migrar para o sistema Elastic Search usando software de código aberto com Node, Docker e RethinkDB. Isso permite que as empresas tenham mais flexibilidade e familiaridade com a tecnologia ao contratar a agência no futuro. Todo o repositório de documentos foi migrado de um data center específico para a nuvem, e APIs RESTful foram criadas para facilitar a integração entre os sistemas. Dessa forma, os aplicativos são criados de forma mais rápida e integrada, permitindo maior escalabilidade e profundidade de consulta e pesquisa.
Mas o que torna essa linguagem tão revolucionária e adequada para esse tipo de aplicação? Simples: A mudança para um paradigma orientado a eventos com um sistema de E/S sem bloqueio pode lidar melhor com aplicativos em tempo real com um grande número de conexões simultâneas.
Feito para escalar
Um modelo de processamento diferente do que estamos acostumados é responsável pela excelente escalabilidade de aplicações intensivas em E/S. Em vez de atribuir várias threads para lidar com solicitações, esperando respostas de acesso lento ao banco de dados, a arquitetura do Node.JS propõe um único evento para ativar uma thread para lidar com solicitações enquanto atribui tarefas mais demoradas aos trabalhadores por meio de respostas de retorno de chamada.
O modelo otimiza o uso de recursos em aplicativos como chat ao vivo, streaming de dados, transações bancárias e até agentes, reunindo informações (geralmente para dashboards) de diferentes provedores com tempos de resposta altamente variáveis.
Dados prontos para uso
Outra grande vantagem é usar um banco de dados que usa JSON nativamente, como MongoDB ou RethinkDB, o que facilita a comunicação com aplicativos clientes em Javascript, seja banco, servidor ou cliente, usando um único formato de dados. Isso evita a conversão para um modelo de dados intermediário (como no Rails) e produz consultas mais rápidas.
O intérprete também pode lidar de forma muito inteligente com solicitações bancárias que não exigem confirmação, como syslogs ou operações menos relevantes, onde a consistência eventual dos dados é suficiente (por exemplo, “curtidas” do facebook). O cliente recebe a confirmação da solicitação, mas o banco pode enfileirar operações de menor prioridade para otimizar os recursos do sistema em caso de gargalos ou alto tráfego.
Onde não usar Node.js?
As vantagens oferecidas pelo Node.js resolvem o problema de aplicações específicas no sistema onde as solicitações de E/S são limitadas. Sistemas intensivos em processos podem acabar mantendo a única thread (event loop) que se comunica com os clientes, uma vez que o paralelismo nesta arquitetura só se aplica a tarefas no operador de acesso ao banco de dados. Além desse risco, o event loop acaba não aproveitando muitos dos núcleos disponíveis nas máquinas na nuvem, o que reduz seu poder de processamento em relação a outros sistemas.
Aplicações que utilizam bancos de dados relacionais ainda são pouco suportadas em Node e acabam não aproveitando bem, enquanto outros frameworks como Rails tratam esse tipo de desenvolvimento de forma mais simples e rápida.
Resumindo, você precisa entender o domínio da sua aplicação para escolher a melhor solução para um determinado problema. Na MRI Technologies, o uso de Node.js facilita a integração de sistemas por meio de APIs REST e abre as portas para a introdução de software de código aberto em um setor muitas vezes muito fechado. Se você planeja construir um serviço semelhante com acesso de E/S pesado e um banco de dados não sequencial, confiar em um engenheiro aeroespacial não é uma coisa ruim.