Um Benchmark para Grails e Ruby on Rails, e escalabilidade

Nesta semana o líder do projeto Grails, Graeme Rocher, criou um benchmark para comparar a performance de uma aplicação implementada com Grails e com Rails. O resultado inicial demonstra uma performance melhor para o Grails. Os resultados podem ser vistos aqui.

Ainda acho cedo para chegar a conclusões com 100% de certeza, vamos aguardar o pessoal do Rails se pronunciar. Acredito que o objetivo não foi o de se vangloriar em relação ao Rails, mas apenas o de mostrar para a própria comunidade Grails que o framework tem uma performance bem razoável.

É interessante apontar que no início do post do Graeme, ele faz questão de dizer: "A realidade deste benchmark é que ele é mais para Rails vs Groovy + SpringMVC + Hibernate + Sitemesh. O grails pode até receber algum crédito, mas o trabalho pesado é feito principalmente por Spring e Hibernate.".

Eu acho esse tipo de benchmark importante para acalmar os ânimos dos usuários do Grails que têm grande preocupação com performance. No fim das contas, estamos comparando uma solução que roda na plataforma Java, que utiliza alguns frameworks conhecidos (Spring, Hibernate, etc), com uma solução do Rails. E o resultado, por enquanto, fala por si só. Eu, particularmente, fico ainda mais confortável de seguir utilizando Grails nos meus novos projetos.

Em seguida ao post, a discussão na maillist continuou, e o assunto escalabilidade surgiu, como não poderia deixar de ser. Afinal, performance != escalabilidade.

Para uma aplicação Grails ganhar em escalabilidade, que no fundo é uma aplicação que roda na JVM, há sempre a possibilidade de se colocar esta aplicação sobre o Terracotta (que recentemente ficou open source lançando o Open Terracotta) ou então o Coherence.

Por outro lado, foi sugerida uma solução bem mais simples que pode dar conta da escalabilidade até um certo ponto. Basta colocar o Squid na frente do servidor, recebendo as requisições, e fazendo com que a aplicação Grails retorne corretamente os headers para o Squid. Se precisar de mais escalabilidade, pode-se aumentar o número servidores com Squid. Até um único servidor com Squid, Grails e Tomcat (ou Jetty, ou...) pode ser usado logo de início. Para resumir, esta solução usa o Squid como um Proxy Reverso de cache para fazer um cache do conteúdo de uma aplicação Grails. No fundo poderia ser uma aplicação Grails, PHP, Rails, ....

Por último, mas não menos importante, já que estamos falando de Grails, e consequentemente de Hibernate, um cache para o hibernate usando o EhCache pode também trazer grandes resultados.

Até a próxima...

[]s
Felipe

0 comentários: