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:
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?