Java, Ruby ou PHP?

26 respostas
S

Galera,

Estou estudando a viabilidade de criar uma aplicação que rode na nuvem que consiste no seguinte:

  • Criação de um Webservice para consumir dados de um servidor. Serão feitas centenas de requisições simultâneas para esse servidor.

  • Consulta posterior desses dados.

A minha grande dúvida é:

Existe diferenças de desempenho e performance caso opte por utilizar Ruby on Rails, PHP ou Java? Qual delas seria mais recomendado para criar esse webservice?

26 Respostas

lucasvvasconcelos

Se ficar mais complexo melhor Java.
Caso seja algo mais simples usar Ruby on Rails ou PHP :slight_smile:

Rafael_Guerreiro

Eu tenho 2 opiniões que chegam a se contradizer:
1- Java é melhor, performaticamente falando, desde que você realmente saiba escrever um código bom e decente.
2- EU optaria pela linguagem que eu tenho mais conhecimento, pois assim eu tenho menos problemas de desenvolvimento.

Por exemplo, se você domina RoR, de nada adianta fazer em Java, visto que pode ser que o código torne sua aplicação mais lenta que se você tivesse feito com RoR.

S

Opa, obrigado pelas dicas Lucas e Rafael.

Pois é Rafael, sou um usuário nível básico em java, com certeza não consigo fazer algo de nivel “profissa”, pelo menos não agora.

Assim, estou buscando alternativas de profissionais (empresa ou freelancer) para fazer isso, mas não estou bem certo de qual linguagem será a melhor alternativa. Como terei que gastar, estou buscando a melhor alternativa no que diz respeito a tecnologia, principalmente por a aplicação que vai consumir o webservice precisará fazer centenas de consultas simultâneas o que requer um bom nível de controle e performance.

Encontrei uma empresa que faz em Ruby on Rails. É significativa a diferença de performance do Java para o Ruby?

Você recomendaria uma ordem de preferencia entre PHP e ruby?

Rafael_Guerreiro

Entendi. Bom, nesse caso, o Java é melhor em performance.

Ponto positivo do Java: Performance, escalabilidade, mais fácil encontrar profissionais para dar manutenção, profissionais relativamente mais baratos (obviamente, pegar um Júnior e esperar que ele faça algo decente é surreal).
Ponto positivo do RoR: Desenvolvimento muito mais ágil que o Java. Quando os desenvolvedores conhecem bem, conseguem entregar o mesmo projeto muito antes do Java.

Existe até uma startup que eles entregam o seu projeto em RoR (com escopo muito bem definifo) em 48 horas. Eles literalmente viram a noite fazendo e conseguem entregar. Só que só serve para você ver se a sua ideia é viável, pois uma vez que o sistema estiver consolidado, eles sugerem que você invista em criar outro sistema, só que dessa vez mais robusto. Outro detalhe é que depois de entregue, eles não dão manutenção.

S

Entendi, bem interessante a proposta deles.

O aplicação que pretendo fazer inicialmente eu considero até simples, mas tenho ideias de algo mais complexo para o futuro.

L

socialclub:
Existe diferenças de desempenho e performance caso opte por utilizar Ruby on Rails, PHP ou Java? Qual delas seria mais recomendado para criar esse webservice?

Seria mais fácil responder a essas perguntas se você tivesse dito qual seu provedor de nuvem.

S

lkbm:
socialclub:
Existe diferenças de desempenho e performance caso opte por utilizar Ruby on Rails, PHP ou Java? Qual delas seria mais recomendado para criar esse webservice?

Seria mais fácil responder a essas perguntas se você tivesse dito qual seu provedor de nuvem.

Olá lkbm,

Inicialmente ainda não utilizado a aplicação na nuvem, mas dentre as pesquisas que ando fazendo encontrei como opções a Heroku e Amazon.

Recomendaria algum outro em detrimento desses?

L

socialclub:
lkbm:
socialclub:
Existe diferenças de desempenho e performance caso opte por utilizar Ruby on Rails, PHP ou Java? Qual delas seria mais recomendado para criar esse webservice?

Seria mais fácil responder a essas perguntas se você tivesse dito qual seu provedor de nuvem.

Olá lkbm,

Inicialmente ainda não utilizado a aplicação na nuvem, mas dentre as pesquisas que ando fazendo encontrei como opções a Heroku e Amazon.

Recomendaria algum outro em detrimento desses?

Então, uso amazon e quando tenho problemas de performance contrato mais capacidade. Não conheço Heroku, mas acredito que deve ser a mesma coisa apenas para programadores Ruby. Não existe essa história de Java ou qualquer outra linguagem ser mais “performática”. lol

Quem diz que a performance de um sistema depende da linguagem que é escrito ou quer lhe vender algo ou não tem a mínima idéia do que esta falando.

Rafael_Guerreiro

Não precisa pesquisar muito para saber que a linguagem influencia sim na performance da sua aplicação. Inclusive, C costuma ganhar de lavada de qualquer linguagem. Eu mesmo já testei.

Outra coisa que influencia completamente a performance no caso do Java é a configuração da JVM. Normalmente a configuração default atende, mas existem casos em que alguns parâmetros já resolvem muita coisa. Obviamente, isso depende da forma que sua aplicação está escrita. De nada adianta falar que Java é tão lento quanto Ruby sendo que o programa comparado não faz um uso decente da linguagem.

Se a sua aplicação for mais simples, como a maioria é, do tipo que faz cadastro e leitura da base, isso faz pouca diferença.
Nesse caso, a diferença do Java é mais voltada para o controle de processos Multi-thread e isso pode te ajudar muito na questão de vários requests, visto que cada request abre uma Thread.

Existe também a Scala, que é levantada por muitos como uma boa opção pois tem a praticidade do Ruby com a performance do Java (visto que o código compilado É Java). Mas como tive pouco contato, não consigo te dizer muita coisa sobre ela.

rmendes08

"Não existe essa história de Java ou qualquer outra linguagem ser mais “performática”.
Quem diz que a performance de um sistema depende da linguagem que é escrito ou quer lhe vender algo ou não tem a mínima idéia do que esta falando. "

Não é bem assim …

A linguagem pode fazer muita diferença quando o gargalo do seu sistema é CPU. Nesse caso, linguagens nativas como C ou C++ são, de maneira geral mais rápidas que linguagens interpretadas. O que acontece, é que na maioria das aplicações Web o gargalo não está no CPU, mas no acesso a dados compartilhados, acessos a banco de dados, I/O, etc.

Até hoje, o único caso que ouvi falar de se trocar de linguagem plataforma para ganhar escalabilidade foi o Twitter, que trocou de RoR para Java. E o motivo nem foi CPU, mas foi pelo fato de Java possuir uma biblioteca de I/O assíncrona mais madura que o RoR e isso que ajudou na escalabilidade.

Enfim, respondendo ao socialclub, a melhor linguagem/plataforma que você pode escolher no 1o momento é a aquela na qual você se sente mais confortável e mais produtivo. A não ser que você queira de fato aprender uma linguagem nova. Como o lkbm lembrou, mas interessante ainda que escolher a linguagem é escolher como você vai disponibilizar esses serviços na Web, até porque isso acaba envolvendo o dinheiro que você vai investir nisso. Quando problemas de escalabilidade aparacerem, aí sim você vai ter condições de avaliar melhor suas opções, e dificilmente trocar a linguagem é um deles.

S

Pessoal, muito obrigado pelas contribuições.

Não tinha pensando nisso, mas é extremamente relevante as questões levantadas sobre qual servidor para nuvem escolher, vou pesquisar mais também sobre o assunto. Vi também algumas páginas falando da Cloud Server que é da Locaweb eu acho.

Realmente encontrar o melhor custo beneficio requer alguma pesquisa.

jhguj

Muitos estão migrando da AWS para a DigitalOcean. É comum encontrar reviews comparando a DO com a Amazon e com a Linode.

S

Como o custo de hospedagem na nuvem está muito ligado a capacidade do servidor que você precisa utilizar, alguma linguagem se sobressai, podendo ser considerada mais “leve”, otimizando assim o uso de CPU e memória RAM?

rmendes08

Até existem diferenças, mas duvido muito que seja algo significativo. Lembre-se que quando se fala de cloud computing, podemos falar tanto em IaaS quanto PaaS. Seria interessante você pesquisar algumas soluções PaaS como Heroku ou OpenShift e comparar as facilidades em deployar a sua aplicação. Se eu não me engano, com o OpenShift você pode apontar seu projeto para um repositório Github, e ao fazer um push o OpenShift já builda e deploya sua aplicação.

S

Obrigado pela ajuda. Tinha pesquisado um pouco sobre a Heroku e me pareceu uma boa opção.

Minha preocupação com relação ao desempenho da linguagem, é importante devido a necessidade de haver várias requisições (centenas delas) ao mesmo tempo, o que deve consumir um bom recurso da minha hospedagem na nuvem.

Assim, quanto mais leve for cada requisição da minha aplicação ao servidor do parceiro, mais requisições eu poderei ter em paralelo num mesmo servidor nuvem, o que também me reduziria custos.

Quanto mais recurso eu precisar, mais caro fica o serviço.

rmendes08

socialclub:
Obrigado pela ajuda. Tinha pesquisado um pouco sobre a Heroku e me pareceu uma boa opção.

Minha preocupação com relação ao desempenho da linguagem, é importante devido a necessidade de haver várias requisições (centenas delas) ao mesmo tempo, o que deve consumir um bom recurso da minha hospedagem na nuvem.

Assim, quanto mais leve for cada requisição da minha aplicação ao servidor do parceiro, mais requisições eu poderei ter em paralelo num mesmo servidor nuvem, o que também me reduziria custos.

Quanto mais recurso eu precisar, mais caro fica o serviço.

A princípio o seu raciocínio está correto, a princípio. Ou seja, é uma hipótese. Então, hipoteticamente falando, com Java você poderia economizar tempo de CPU, com relação a Ruby ou PHP. Porém, como manda a sabedoria positivista, é muito complicado fazer esse tipo de afirmação sem dados para comprovar, sem um experimento. Como eu disse, eu nunca soube de algum caso de alguém reduzir significamente seu custo de operação na cloud trocando de Ruby ou PHP para Java (se alguém souber, por favor, poste o link do artigo, notícia, etc.).

Enfim, como já havia dito, existe uma centena de outros fatores que acabam criando gargalos muito antes de memória e CPU. No final das contas, você só vai saber fazendo e testando.

S

Show de bola! Vocês sabem de mais, um dia chego lá! :smiley:

L

socialclub:

Minha preocupação com relação ao desempenho da linguagem

“desempenho” não tem nada a ver com linguagem.

Assim, quanto mais leve for cada requisição da minha aplicação ao servidor do parceiro, mais requisições eu poderei ter em paralelo num mesmo servidor nuvem, o que também me reduziria custos.

Quanto mais recurso eu precisar, mais caro fica o serviço.

custo da instância/hora = R$0,007

custo do programador/hora = R$60,00.

L

rmendes08:
socialclub:
Obrigado pela ajuda. Tinha pesquisado um pouco sobre a Heroku e me pareceu uma boa opção.

Minha preocupação com relação ao desempenho da linguagem, é importante devido a necessidade de haver várias requisições (centenas delas) ao mesmo tempo, o que deve consumir um bom recurso da minha hospedagem na nuvem.

Assim, quanto mais leve for cada requisição da minha aplicação ao servidor do parceiro, mais requisições eu poderei ter em paralelo num mesmo servidor nuvem, o que também me reduziria custos.

Quanto mais recurso eu precisar, mais caro fica o serviço.

A princípio o seu raciocínio está correto, a princípio. Ou seja, é uma hipótese. Então, hipoteticamente falando, com Java você poderia economizar tempo de CPU, com relação a Ruby ou PHP. Porém, como manda a sabedoria positivista, é muito complicado fazer esse tipo de afirmação sem dados para comprovar, sem um experimento. Como eu disse, eu nunca soube de algum caso de alguém reduzir significamente seu custo de operação na cloud trocando de Ruby ou PHP para Java (se alguém souber, por favor, poste o link do artigo, notícia, etc.).

Enfim, como já havia dito, existe uma centena de outros fatores que acabam criando gargalos muito antes de memória e CPU. No final das contas, você só vai saber fazendo e testando.

Não é comum tornar a vida do desenvolvedor mais complicada (usando uma linguagem de baixo nível) pra salvar ciclos de CPU porque é economicamente inviável, como provei no post anterior.

L

Rafael Guerreiro:
Não precisa pesquisar muito para saber que a linguagem influencia sim na performance da sua aplicação. Inclusive, C costuma ganhar de lavada de qualquer linguagem. Eu mesmo já testei.

Outra coisa que influencia completamente a performance no caso do Java é a configuração da JVM. Normalmente a configuração default atende, mas existem casos em que alguns parâmetros já resolvem muita coisa. Obviamente, isso depende da forma que sua aplicação está escrita. De nada adianta falar que Java é tão lento quanto Ruby sendo que o programa comparado não faz um uso decente da linguagem.

Se a sua aplicação for mais simples, como a maioria é, do tipo que faz cadastro e leitura da base, isso faz pouca diferença.
Nesse caso, a diferença do Java é mais voltada para o controle de processos Multi-thread e isso pode te ajudar muito na questão de vários requests, visto que cada request abre uma Thread.

Existe também a Scala, que é levantada por muitos como uma boa opção pois tem a praticidade do Ruby com a performance do Java (visto que o código compilado É Java). Mas como tive pouco contato, não consigo te dizer muita coisa sobre ela.

Então porque mais pessoas não criam sites/webservices em C?

rmendes08

lkbm:
Rafael Guerreiro:
Não precisa pesquisar muito para saber que a linguagem influencia sim na performance da sua aplicação. Inclusive, C costuma ganhar de lavada de qualquer linguagem. Eu mesmo já testei.

Outra coisa que influencia completamente a performance no caso do Java é a configuração da JVM. Normalmente a configuração default atende, mas existem casos em que alguns parâmetros já resolvem muita coisa. Obviamente, isso depende da forma que sua aplicação está escrita. De nada adianta falar que Java é tão lento quanto Ruby sendo que o programa comparado não faz um uso decente da linguagem.

Se a sua aplicação for mais simples, como a maioria é, do tipo que faz cadastro e leitura da base, isso faz pouca diferença.
Nesse caso, a diferença do Java é mais voltada para o controle de processos Multi-thread e isso pode te ajudar muito na questão de vários requests, visto que cada request abre uma Thread.

Existe também a Scala, que é levantada por muitos como uma boa opção pois tem a praticidade do Ruby com a performance do Java (visto que o código compilado É Java). Mas como tive pouco contato, não consigo te dizer muita coisa sobre ela.

Então porque mais pessoas não criam sites/webservices em C?

Mais uma vez, tem a ver com custo de desenvolvimento e gargalos …

Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU. Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.

O problema de se fazer qualquer coisa em C/C++ é: você tem que gerenciar a memória na mão (C++ já conta com smartpointer, mas dúvido que seja tão eficiente quanto o GC do Java), você precisa manipular ponteiros, etc. Ou seja, o custo de desenvolver/manter qualquer coisa em C/C++ para Web ultrapassa pagar um pouco mais de CPU. Além disso, como já comentei ,raramente o gargalo de um Web service é CPU. Não adianta nada ganhar 3s ou 4s tratando uma requisição se você consultar uma tabela de 1.000.000 de registros sem um índice adequado.

S

Galera,

O parceiro me informou que cada requisição retorna em média 80kb de dados e a ideia é fazer milhares de pesquisa por dia, acredito que 200 mil requisições/dia.

No que diz respeito a bando de dados é mais tranquilo pq desses 80kb, apenas 1kb… por ai eu irei armazenar, então não será tão pesado. Minha dúvida é com relação ao tráfego, do peso dessas requisições.

Vocês acham que é possível fazer algo desse porte a um baixo custo? tem alguma hospedagem que me proporcione isso?

marcusnunes

eu prefiro php, pela facilidade de encontrar servidores e pela ótima documentação.

L

rmendes08:

Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU.Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.

Por isso é errado. Quando falamos de linguagens devemos estar falando de humanos e não CPUs.

Você pode escrever um programa Java, e concluir que o mesmo programa teria sido muito mais agil fazer em Ruby ou PHP, mas não da pra dizer se o programa vai executar mais lento ou mais rápido apenas baseado na linguagem em que ele foi escrito.

rmendes08

lkbm:
rmendes08:

Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU.Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.

Por isso é errado. Quando falamos de linguagens devemos estar falando de humanos e não CPUs.

Você pode escrever um programa Ruby, e concluir que o mesmo programa teria demorado muito mais tempo para o programador fazer do que Java, mas não se ele vai executar mais lento.

Colega, você está misturando as bolas …

Velocidade da linguagem é uma coisa, produtividade é outra. Como eu disse, velocidade de uma linguagem tem a ver com consumo de CPU, você só pode dizer que uma linguagem é mais rápida que outra comparando o tempo de execução de programas semelhantes em máquinas semelhantes, para isso servem os benchmarks, existema vários deles na Internet, mas de maneira geral o resultado é quase sempre o mesmo com relação a tempo de execução : C/C++ <<< Java < PHP, Python, etc.

Já produtividade seria a relação daquilo que você consegue fazer e o tempo necessário para desenvolver, sendo assim, quanto mais abstrata e quanto mais bibliotecas a linguagem tiver, mais produtivo o programador é. Sendo assim, é óbvio que linguagens de mais alto nível serão mais produtivas.

Enfim, faço questão de definir as terminologias corretas para que se possa atacar o problema corretamente. Ou seja, no exemplo do nosso amigo, mais do que escolher uma linguagem, a decisão real é escolher entre velocidade da linguagem ou produtividade da linguagem. Ou seja, devo escolher a linguagem mais rápida ou a linguagem mais produtiva ?

E como sempre, a resposta é o "depende". Depende, antes de mais nada de requisitos não-funcionais: o sistema tem um tempo limite de resposta ? Tenho limite no footprint ? Tenho restrições de ambiente ? Por isso que nem sempre é possível a escolher a linguagem mais produtiva para todo tipo de situação, fosse assim jogos hardcore e sistemas de tempo real já seriam implementados em Ruby, Python ou algo semelhante. Por outro lado, para a maioria dos sistemas Web pode não haver nenhum ganho significativo no troughput (requisições/segundo) trocando a linguagem.

Embora eu conheça um caso real. Essa aplicação foi desenvolvida por alguns colegas meus: http://vimember.com/, e algumas rotinas de processamento de imagens tiveram de ser implementadas em C para que o sistema ganhasse a responsividade desejada.

L

O que o benchmark de uma linguagem testa não é a “velocidade” ou “desempenho” da linguagem, e sim do código objeto que é produzido por um compilador.

O que estou dizendo é que um programa escrito em uma linguagem (digamos PHP) pode executar em diferentes velocidades, dependendo de como ele é compilado. Sei que é comum as pessoas se referirem a velocidade como se fosse algo inerente a linguagem, mas não deixa de ser um erro de conceito.

A única velocidade que linguagem influencia é na velocidade de desenvolvimento (produtividade). Nesse ponto eu concordo, linguagens de alto nível são mais produtivas.

Criado 2 de junho de 2014
Ultima resposta 10 de jun. de 2014
Respostas 26
Participantes 7