Mas afinal, o que é ser Robusto?


Trabalho com Java há alguns anos e há poucos meses decidi experimentar o Node.JS. Com poucos estudos percebi que o Node.JS chega a ser muito superior ao Java em vários (talvez até todos) quesitos.

Há pouco tempo me deparei com um colega no trabalho, onde trabalho com Java e Flex, e estávamos fazendo um paralelo entre o Java e o Node.JS e no que o Node seria melhor. Em um determinado momento o colega fala que para um Servidor Transacional o Java é muito mais recomendável. Então perguntei o motivo de ele pensar isso, foi aí que ele me falou:

Ah, porque Java é mais Robusto

Tentei explicar a ele alguns motivos de até para Servidores Transacionais, o Node.JS ser melhor. Mas fiquei com esta frase na minha cabeça por um tempo e me veio o questionamento.

Mas afinal, o que é ser Robusto?

Desde a universidade os professores sempre diziam que Java é robusto, mas garanto que poucos pararam para pensar: "Será que é mesmo?". Em uma breve consulta no Google vejo um significado que se aplica ao contexto de Programação:

Firme, inabalável, rígido.
Será Java Firme, inabalável, rígido? Será que Node.JS não é isso?

Então me lembrei de um artigo que li na InfoQ logo quando me aventurei ao Node.JS a respeito do Paypal ter abandonado o Java e migrado sua aplicação para Javascript (Node.JS).

Neste artigo, o Paypal desenvolveu a mesma aplicação tanto em Java, quanto em Node.JS. Enquanto o time Java possuía 5 desenvolvedores, o time Node tinha apenas 2. Mesmo assim o desenvolvimento de Node.JS foi cerca de 40% mais produtivo, concluindo a aplicação em apenas 3 meses, enquanto no Java foram 5. Os resultados dos testes feitos pela empresa foram surpreendentes.

Executando a suíte de testes em hardware de produção, concluiu que o aplicativo Node.js estava com desempenho melhor que o anterior em Java, servindo: O dobro de requisições por segundo em relação à aplicação Java
Resultando um decréscimo de 35% no tempo médio de resposta para a mesma página. Isso resultou em páginas sendo servidas 200ms mais rápido — algo que os usuários certamente perceberão.

Então ao ler o artigo mais uma vez fiz o questionamento:

Será mesmo que Java é robusto e Node.JS não?

Basta parar para ler um pouco sobre como funciona o Node.JS que dá para ter a certeza que Node é extremamente superior ao Java.

Vou ser breve com relação a explicação. O Java foi criado para precisar de uma Thread por requisição em seu servidor. Se temos uma página com 10 mil usuários utilizando simultaneamente, serão necessárias 10 mil Threads para atender à demanda. Além disso, o tempo de vida útil de cada Thread é, em sua maioria, aguardando uma resposta do banco de dados.

Enquanto isso no Node.JS existe apenas uma Thread executando em toda a aplicação, uma vez que ele trabalha assincronamente, qualquer bloqueio de IO retira a execução da Thread até que receba uma resposta.

Sabemos que o processamento de dados é extremamente rápido na computação atual e que o gargalo do computador é o famoso IO, o Node.JS foi pensado para evitar que uma Thread seja desperdiçada enquanto houver esta espera.

Se achar que não é suficiente, existem outras empresas migrando para o Node.JS:

  1. Ebay
  2. Linkedin
  3. Walmart
  4. Yahoo!
  5. Até mesmo o Medium :D

Veja todas no próprio site do Node.JS

Será que não é a hora de parar de bater a cabeça na parede e abrir a mente para tentar novas alternativas ao Java? Será que todas essas grandes empresas estão erradas?