A volta do Java: Uma relíquia retorna para dominar a web

Duke_Wave_smallBiz Stone chamou de “um dos dias mais especiais da história do Twitter.” E também foi um dia notável para o Java, uma relíquia da década de 1990 que está mais uma vez refazendo a internet. No verão de 2010, o Presidente da Rússia Dmitry Medvedev visitou a sede do Twitter em São Francisco, no caminho para um encontro com o chefe do Google Eric Schmidt e outro com o Presidente Barack Obama na Casa Branca. Naquele dia, o QG do Twitter se transformou em algo parecido com uma área de segurança de um aeroporto, cheio de guardas armados, e a imprensa internacional aguardava aos montes o presidente russo enviar o primeiro tuíte.

O tuíte foi previsivelmente banal – “Olá a todos, estou no Twitter e esta é a minha primeira mensagem”, ele disse em russo – mas como Stone, um dos fundadores da companhia, disse à imprensa, esse foi um marco para o Twitter, um momento que mostra claramente que o serviço de micromensagens da empresa passou de uma simples novidade intrigante para algo capaz de mudar o mundo.

O que ninguém percebeu é que Medvedev não usou o Twitter naquele dia. O serviço recebia tantos tuítes de todo o planeta – em grande parte graças aos jogos da Copa do Mundo da África do Sul – que os engenheiros não conseguiam manter o site funcionando por alguns instantes. Antes da visita de Medvedev, eles construíram um serviço separado para que ele tuitasse, para evitar qualquer falha na frente das câmeras.

“Nós literalmente não conseguíamos manter o site para ele”, diz Raffi Krikorian, vice-presidente de engenharia do Twitter. “Quando ele se cadastrou e enviou o primeiro tuíte, nós o tínhamos em um site de encenação… mesmo que ele não soubesse disso na hora.”

No fim, a visita do presidente russo também representou outra virada. Krikorian e o resto dos cérebros da engenharia decidiram que era hora de reconstruir o Twitter de cima a baixo. Decidiram que o site precisava de uma nova fundação. Decidiram mudar tudo para Java.

Desde sua concepção em 2006, o Twiiter rodava em Ruby on Rails – uma ferramenta que representou um grande papel no ressurgimento da web no meio da década, permitindo engenheiros construírem sites de forma rápida e fácil. Mas os engenheiros do Twitter perceberam que o Ruby não era a melhor maneira de segurar os tuítes de milhões de pessoas ao redor do planeta – e manter o site funcionando durante o momento importante com o presidente da Rússia. A melhor maneira era uma nova arquitetura baseada no Java, uma ferramenta que cresceu mais poderosamente que muitos esperavam.

Se você conhece um pouco de Java, pode pensar em algo do final da década de 1990, uma criança do boom original da internet, um pedaço de software que mostrava um mascote de desenho dançando no navegador Netscape. Pode pensar em algo que prometeu um mundo de aplicativos que rodariam em todas as suas máquinas pessoais – de PCs para celulares – mas que falhou por uma série de bugs de segurança e tristes escolhas do criador, a Sun Microsystems. “Para a população em geral”, diz o chefe de engenharia do LinkedIn Jay Kreps, “Java é uma coisa enjoada que sites antigos tentam forçá-la a baixar.” E se você sabe um pouquinho mais que isso, provavelmente irá considerá-lo como uma forma de construir pesadas ferramentas de “middleware” que conectam coisas como servidores e bancos de dados.

Mas ao longo dos últimos anos, Java evoluiu para algo muito diferente. Ele silenciosamente se tornou a base principal para a maioria das maiores e mais ambiciosas operações da rede, incluindo Google, LinkedIn, Tumblr, e Square, bem como Twitter. “Está em toda parte”, diz Krikorian.

No verão de 2011, Bob Lee – o diretor de tecnologia da Square e um ex-engenheiro da Google – anunciou em uma proeminente conferência de software que a web estava “à beira de um renascimento do Java.” Dois anos mais tarde, este renascimento está diante de nós. Como o Twitter, muitas outras empresas já perceberam que o Java é particularmente adequado para a construção de serviços web que podem aguentar as enormes quantidades de tráfego através da internet moderna.

“Java é realmente a única opção quando se trata de requisitos para uma empresa como a nossa – requisitos de desempenho extremo e requisitos de escalabilidade extremas”, diz Lee da Square, uma startup de São Francisco que processa US$ 15 bilhões por ano em transações com cartões de crédito e débito via celulares e tablets. “Não há alternativa viável.”

E há uma reviravolta no renascimento do Java. Ele abrange mais que apenas Java.

Pode parecer um paradoxo, mas o Java não é uma só coisa. São duas. É uma linguagem de programação, uma maneira de escrever código de software. Mas também é uma “máquina virtual” que executa código – uma parte fundamental do software que fica em um servidor, em um PC ou em um celular, fornecendo uma maneira de rodar aplicações em velocidades extraordinariamente rápidas. Originalmente, a máquina virtual Java – também conhecida como JVM – só rodava códigos feitos na linguagem de programação Java, mas, hoje, roda vários tipos de linguagens.

Assim, os grandes nomes da internet estão usando a máquina virtual Java como base dos serviços, com a JVM instalada em milhares de servidores, e então eles podem rodar códigos feitos em uma infinidade de linguagens – desde o clássico Java até Clojure, ou uma invenção cada vez mais popular conhecida como Scala – escolhendo a melhor ferramenta para o trabalho.

O Twitter constrói parte de seu código usando a linguagem Java, mas a maior parte é feita em Scala (uma linguagem que, para muitos programadores, permite criar software com uma facilidade maior que o Java) e um pouco é feito com Clojure (uma linguagem que parece Lisp, uma forma rápida de criar código que tem sido um pilar durante décadas). LinkedIn usa principalmente Java, com pitadas de Scala. Mas o denominador comum é a JVM, um software afinado durante os últimos 15 anos para rodar código com velocidade.

“Há tantas linguagens diferentes que rodam nela”, diz Krikorian. “Eu só tenho que me preocupar em ajustar e otimizar uma coisa, e depois posso colocá-la em qualquer hardware que temos no Twitter. É simplesmente mais fácil.”

Just in Time para o Twitter

Dia 3 de agosto, o Twitter bateu um novo recorde de tuítes em um segundo. Quando milhares de pessoas no Japão entraram no serviço para discutir a exibição televisiva do filme de animação Castelo no Céu, o serviço alcançou um pico de 143199 tuítes por segundo. É um salto maciço acima do normal – 5700 tuítes por segundo – e o site permaneceu no ar. “Nossos usuários não sentiram um piu”, escreveu Krikorian recentemente.

A ocasião era bem diferente do dia que Dmitry Medvedev visitou a sede do Twitter, e, para Krikorian, prova o valor da nova arquitetura da companhia.

Originalmente, o Twitter era uma aplicação monolítica construída em Ruby on Rails. Mas agora, está dividida em quase duzentos serviços autônomos que conversam entre si. Cada um rodando sobre a JVM, vários em Scala, e alguns em Java e Clojure. Um serviço cuida da página inicial. Outro lida com o site para aparelhos móveis. Um terceiro controla as interfaces para programação, ou APIs, que alimentam outras operações pela internet. E por aí vai.

A configuração ajuda o Twitter a lidar com picos de tráfego. Por causa da eficiência da JVM, ele consegue aguentar quantidades muito maiores de tráfego com menos máquinas. Mas a operação também é mais ágil. Todos os serviços são desenhados para se comunicar uns com os outros, mas se um cai, não leva os outros para o buraco junto. No dia que visitamos Krikorian nos escritórios do Twitter neste mês, a página inicial do Twitter sumiu para muitas pessoas ao redor do globo, mas outros serviços, incluindo o feed para celular, continuaram funcionando.

Do LinkedIn ao Tumblr, muitos outros grandes nomes da web têm adotado uma “arquitetura de serviços” similar e, em geral, eles estão construindo esses serviços com Java ou linguagens relacionadas. Programadores Java são fáceis de encontrar, e, em comparação com C e C++, linguagens que rivalizam com a sua popularidade, Java é bastante fácil de usar. “É a mais fácil das linguagens rápidas”, diz Kreps do LinkedIn. Mas muito dessa tendência é impulsionada pela JVM – e sua capacidade de executar mais do que apenas a linguagem Java.

A JVM fornece o que é chamado de “compilação just-in-time.” Depois de escrever o código do software, você tem que compilá-lo – convertê-lo em língua nativa falada pela máquina que irá executá-lo. Tradicionalmente, os desenvolvedores compilam seu código em linguagem de máquina e, em seguida, enviam-no para o computador em questão. Mas com a compilação just-in-time, ou JIT, o código é compilado enquanto está executando, ganhando alguma velocidade extra, adequando a compilação de acordo com o comportamento da aplicação. Java ainda não pode alcançar a velocidade de linguagens como C e C++, mas de acordo com Krikorian, ele chega perto o suficiente.

Além disso, a JVM é especificamente projetada para executar várias tarefas – ou threads – ao mesmo tempo, uma parte essencial para os serviços da web no mundo moderno. “A concorrência é mais importante do que nunca”, diz Lee. “Não há realmente nenhuma plataforma que se compare com Java nesse aspecto. Ele permite que você escreva código com concorrência – e código extremamente rápido.” A JVM faz isso para o código Java, mas também faz isso para Scala, Clojure, e muito mais.

Houve um tempo em que muitos questionaram a eficiência da JVM. “Eu trabalhei bastante com Java há muito tempo”, diz o engenheiro de software do Tumblr, Mike Hurwitz. “Fiquei feliz em deixá-lo para trás.” Mas, hoje em dia, as pessoas como Hurwitz, Krikorian e Lee cantam uma música muito diferente. “A melhor coisa da JVM é que existe biblioteca de software para tudo”, diz Hurwitz. “Se você quiser resolver um problema – não importa o quão estúpido – há provavelmente algo que você pode pegar e usar.”

Ruby descarrilhado

Em 2006, quando o Twitter construiu seu serviço de micro-blogging com Ruby on Rails, ele não estava sozinho. Enquanto a web experimentava um renascimento, as ferramentas de programação do momento eram Ruby e PHP, duas linguagens de “tipagem dinâmica” que permitem construir código sucinto em um ritmo rápido. Mas o tempo mostrou que essas linguagens não eram adequadas para rodar os maiores serviços web do mundo, e agora eles ficaram na traseira do Java – pelo menos no grande palco.

“Ruby on Rails foi ótimo para nos levar ao ponto onde poderíamos tomar a decisão de abandoná-lo”, diz Krikorian. Com Java, explica ele, o Twitter tem cerca de dez vezes menos máquinas para executar o seu site do que seria necessário com Ruby. E ao contrário do framework do Rails, Java e Scala permitem ao Twitter facilmente compartilhar e modificar sua enorme base de código através de uma equipe de centenas de desenvolvedores.

A linguagem Java não é tão fácil de usar como Ruby, mas para Krikorian e seus engenheiros, Scala é. “Scala parece ser uma linguagem mais moderna”, diz ele. “Ela faz a transição do Ruby mais fácil – e é mais divertida.”

A exceção que confirma a regra é o Facebook. O Facebook foi originalmente construído com PHP, e ainda roda em PHP. Mas, para resolver o problema de escalabilidade, o site de rede social usou uma página do livro Java, movendo o seu código PHP para uma máquina virtual customizada que fornece compilação just-in-time.

Facebook desfruta esse tipo de hack interno. Mas tantos outros acabaram de se mudar para longe de suas línguas originais. Assim como o Twitter, Square mudou de Ruby para Java. O Tumblr migrou para Scala após tentar várias outras ferramentas. Até o próprio Google mudou para Java a partir de C – embora ele ainda rode C em alguns lugares.

Enquanto isso, fora do mundo da programação, Java é ainda retratado como pesadelo de segurança que já não executa aplicativos em PCs, laptops e celulares. E há alguma verdade nisso. No ano passado, uma série de novos bugs de segurança acendeu uma luz vermelha para o Java como uma maneira de executar o software na maioria das máquinas pessoais.

Mas graças a uma nova máquina virtual construída especificamente para dispositivos móveis, a máquina virtual Dalvik do Google, a linguagem Java tem encontrado uma nova vida em celulares e tablets Android, onde é o principal meio de construir aplicações. E em servidores, está ajudando a impulsionar não só os grandes serviços web, mas inúmeras aplicações de software usadas dentro de outras empresas.

O Java tem continuado a evoluir, mesmo com o abalo da Sun Microsystems. A Sun, apesar de todos os seus defeitos, era inteligente o bastante para abrir o código-fonte da JVM, e a Oracle, que adquiriu a Sun em 2010, provou ser um administrador mais ativo para a plataforma Java – para a surpresa de muitos.

Como um projeto de código aberto, a JVM é livre para uso de todos, e qualquer um é livre para construir um novo software e até mesmo novas linguagens de programação que rodam em cima dela. Na onda do Scala, outros desenvolvedores estão construindo uma nova linguagem para a JVM chamada Ceylon, e se você quiser, você pode até mesmo executar o Ruby sobre a máquina virtual, utilizando JRuby.

Empresas como Twitter, LinkedIn e Square estão constantemente construindo novas ferramentas Java a partir do zero, e, em muitos casos, eles estão compartilhando este código com o resto do mundo, assim como a Sun compartilhou a JVM e outras partes do Java. Este código aberto gera mais código aberto. E o ciclo continua. “Nós escolhemos as coisas que atendam as nossas necessidades”, afirma Lee, da Square. “Empresas como a nossa estão construindo todos os tipos de infraestrutura, mas também achamos que é muito importante abrir o código.”

O benefício adicional – para todas essas empresas – é que, quando chegar a hora, elas podem mover mais facilmente os seus serviços para novos tipos de hardware. Elas não estão escrevendo código para servidores ou processadores específicos. Elas estão escrevendo para a JVM. Então, quando o mundo abraçar um novo tipo de servidor – o que já está no horizonte – não será necessário reescrever tudo. Elas podem simplesmente mover para uma nova versão do JVM.

Em outras palavras, elas estão prontas para o próximo renascimento.

Traduzido de:
The Second Coming of Java: A Relic Returns to Rule Web
por CADE METZ  via WIRED.com

Anúncios
Marcado com: , , , ,
Publicado em JavaEE

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: