Java, Ruby ou PHP?

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?

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

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.

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?

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.

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.

[quote=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?
[/quote]

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

[quote=lkbm][quote=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?
[/quote]

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

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?

[quote=socialclub][quote=lkbm][quote=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?
[/quote]

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

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?[/quote]

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.

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.

"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.

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.

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

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?

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.

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.

[quote=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.[/quote]

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.

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

[quote=socialclub]

Minha preocupação com relação ao desempenho da linguagem[/quote]

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

[quote]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.[/quote]

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

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

[quote=rmendes08][quote=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.[/quote]

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.[/quote]

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.