Por que java é uma plataforma competitiva para construir servidores?

16 respostas
B

Olá Pessoal.

Muitos serviços de rede são escritos em C, um forte argumento de defesa é que são mais rápidos, seguros se bem programados, recebem mais rápido novos avanços dos SO´S, fácil acesso a recursos de hardware e otimização de recursos(memória,processador,registradores e etc.).

A pergunta é por que muitas empresas criam esses servidores em java? por que java se torna competitivo para tal tarefa?

Avanço dos processadores?
Mercado?
Portabilidade?
Seguro?
Manutenbilidade?

Não seria melhor termos containers web como o tomcat em c, se beneficiando dos avanços nos sistemas operacionais?

Não estou perguntando se faz sentido ou não, estou questionando para saber a opinião da comunidade.

Abraço.

16 Respostas

ViniGodoy
  1. Portabilidade;
  2. Facilidade de desenvolvimento (é osso desenvolver em C);
  3. Não usa tantos recursos do SO assim para justificar o esforço extra;
  4. É tão seguro quanto.

Na verdade, é mais difícil justificar o porque usar C para um container de aplicação, do que o contrário.

Quanto ao argumento “mais rápido”. Isso pode ser válido para serviços, que são softwares pequenos e auto-contidos.
Mas não para softwares maiores. Garantir performance num software de grande porte é algo que vai muito além da linguagem escolhida.

B

Oi Vini tudo bem? Obrigado pelas respostas.

Então tenho outras perguntas, acho que não é tão simples responder essa pergunta.

Facilidade de desenvolvimento é relativo ao conhecimento, é difícil para quem não conhece certo?

Uma empresa experiente, como a oracle/sun, conseguiria financiar um projeto dessa natureza. Até pela qualificação de seus profissionais.

Não usar recursos com a justificativa que não vale o esforço extra é uma premissa que não compartilho, apesar de você ter razão da pespectiva observada.

Se olharmos da pespectiva que o volume de dados é constantemente crescente , que é uma tendência na era da informação e das soluções criadas na internet em escala mundial.

Qualquer economia é muito significativa, o google é um exemplo.

Essas empresas se beneficiam ainda da Economia de escala para recursos computacionais fundamentais, então quanto mais conseguirem reduzir o uso dos mesmos e consequentemente aumentando a capacidade, irão reduzir ainda mais o custo.

A segurança de um aplicativo escrito C, fica no seu domínio até um certo nível, como não existe sistemas 100% seguros, deixar falhas para JVM é um risco em potencial certo?

“Garantir performance num software de grande porte é algo que vai muito além da linguagem escolhida”

Tem toda razão, mas você pode deixar o mais rápido que você conseguir com os recursos que você tem e o contexto onde você está inserido naquele momento da implementação certo? Escolhendo uma plataforma que te permita isso, como *nix, por exemplo.

ViniGodoy

Não. Estou assumindo aqui que quem programará o servidor, conhece bem a linguagem.
O java é uma linguagem gerenciada, assim como o C#. Isso significa que o programador não tem tantas preocupações com alocação e desalocação de memória, com diferenças entre o heap e o stack, e outras preocupações que um programador C e C++ tem. Também não existem macros e as IDEs para Java são mais poderosas. A linguagem também fornece bons profilers, o que facilita muito a identificação de gargalos de performance e problemas de memória.

Eu mesmo sou bastante proficiente em Java e C++. E posso afirmar categoricamente que é muito mais fácil programar em Java.

Conseguiria, mas pra que pagar muito mais, se você pode obter qualidade similar com muito menos?

Bem… então vc acha que você deve pagar por integração com o SO, mesmo que não vá utilizar? Muito estranho, eu geralmente prefiro pagar pelas coisas que uso.

Lembre-se também que existe uma relação direta entre integração com o SO e portabilidade. Quanto mais integrado, menos portável e, portanto, menos flexível é sua aplicação.

boblast:
Se olharmos da pespectiva que o volume de dados é constantemente crescente , que é uma tendência na era da informação e das soluções criadas na internet em escala mundial.

Qualquer economia é muito significativa, o google é um exemplo.

Essas empresas se beneficiam ainda da Economia de escala para recursos computacionais fundamentais, então quanto mais conseguirem reduzir o uso dos mesmos, irão reduzir ainda mais o custo.

Economia de escala? Você ainda está falando em software?

Mais ou menos. A VM é um sistema extremamente depurado. É tão seguro confiar nela quanto é no SO.
Além disso, é mais difícil fazer sistemas seguros em C do que em Java. Uma grande fonte de ataques é justamente o acesso incorreto à memória, explorando um bug que é possível no C e no C++, mas impossível no Java.

Todo o esforço extra de código que sua própria equipe terá que fazer para compensar o que o Java já te fornece pronto, também é custo, e também representa um risco de segurança. O risco é até maior porque seu desenvolvimento próprio não é tão depurado quanto o feito pela equipe do java.

“Garantir performance num software de grande porte é algo que vai muito além da linguagem escolhida”

Tem toda razão, mas você pode deixar o mais rápido que você conseguir com os recursos que você tem e o contexto onde você está inserido naquele momento da implementação certo? Escolhendo uma plataforma que te permita isso, como *nix, por exemplo.

Certo, de uma maneira simplista, sim.

Dizemos que o C é mais otimizável que o C++, e que o C++ é mais otimizável que o Java. Agora, otimizável != otimizado. O custo para se ter uma solução mais complexa em C mais otimizada que em Java é altíssimo. Envolve coisas sinistras como seu próprio alocador de memória, por exemplo. Também vai exigir um time muito mais caro e qualificado, e muito mais tempo de desenvolvimento.

M

Segurança, performance, são coisas que tem pouca relação com a linguagem, isso faz seu post ficar confuso, se vc quer falar de Java como plataforma precisa especificar qual plataforma se refere quando fala de C.

Imo, se foi feito em Java ou C, isso é o que menos importa, a linguagem. A pessoa que fez em Java pode portar para C (ou qualquer segunda linguagem que ele saiba), ou vice-versa, em questão de horas.

B

Olá Pessoal, bem a intenção é so pegar algumas opiniões mesmo, mas concordo que ficou confuso vou tentar esclarecer, também não estou querendo pegar uma opinião estritamente técnica acredito que as pessoas aqui, também tem condições de dar opiniões mais alto nível também e me interessam, não quero descer muito,muito muito o nível pois se não vamos estender muito o assunto, chegaremos a nível de assembly prologue e epilogue, e não é esse o propósito, não queria entrar nesses detalhes queria uma visão mais experiente e em poucas palavras também, podendo ser direta ou subjetiva, como o vini fez no primeiro post. Deu sua opinião e pronto.

Entendi a opinião do vini, não vou argumentar se não vamos fugir do objetivo do tópico. Apenas explicando o que eu quis dizer sobre economia de escala:

Vini a idéia que passei de Economia de escala foi apenas porque eu entendi em “Não usa tantos recursos do SO assim para justificar o esforço extra” que você estava se referindo a serviços e recursos que o SO oferece juntamente com o hardware, por exemplo: mecanismos para escalonamento (threads, processos), I/O Multplexing, shared memory, disco rígido, memória, mecanismos de comunicação entre processos e etc. Onde é possível se beneficiar o máximo desses recursos com o intuito de otimizar o máximo o uso dos fundamentais recursos computacionais, processamento e armazenamento são alguns exemplos, para oferecer uma vantagem competitiva (baixo custo), como afirma essa reportagem http://tinyurl.com/2xu73b. Mesmo que um cliente de pequeno porte tente fazer o mesmo ele não conseguiria por não ter a mesma capacidade de recursos(Máquinas e Pessoas). O google é único provedor de cloud que não usa virtualização para fazer cloud, e tem seus requisitos e motivações para tal.

Não vou comentar o restante das respostas, embora discorde de algumas, volto a dar ênfase que quero apenas saber opinião de outras pessoas também, mais experientes e que ja deram palestras sobre isso, trabalham com isso. Então por gentileza pessoal deixem as outras pessoas respoderem, gostaria de ter outras opiniões também. um bom exemplo das respostas válidas é opiniões pequenas e sucintas como o primeiro post do vini, ele deu as suas razões e ponto.

Outro exemplo:

Se acha que segurança tem pouco haver com linguagem, argumente de forma simples e direta, se possível claro.

Exemplo:
“A linguagem tem pouco haver por que segurança é uma área de conhecimento que envolve muitos outros estudos, disaster recover, alta disponibilidade enfim”.

“A linguagem tem haver na minha opinião por que em java por exemplo eu não tenho ataques de buffer overflow stack-based mas em c é possível”.(pode ser técnica também a esse nível.)

Bom espero que tenha ficado mais claro. e agradeço desde ja as respostas de quem quer me ajudar e compartilhar um pouco de conhecimento.

Não estou obrigando ninguém a responder e não responder sinta-se a vontade é um fórum afinal.

Estou so tentando aqui deixar mais claro possível.

Abraço e muito obrigado Vini pelas suas respostas.

Esqueci, hihi se quiser postar uma bíblia fique a vontade vou ler do mesmo jeito.

B

Apaga esse tópico ai vini por favor

ViniGodoy

Ué, e por que deveria? O assunto foi interessante.

B

Hehe ninguém responde :frowning:

foxpv

Acho que é tudo uma questão de custo/benefício, por exemplo:

Você acha que o ideal seria ter um servidor compilado exclusivamente para tal arquitetura? Sabe que é muito mais difícil portar para outras arquiteturas? Quer desenvolver em C? Tem dinheiro para pagar profissionais que atendam suas expectativas?

Agora,

Você está seguro com o amadurecimento da JVM (tanto no aspecto da segurança quanto no desempenho)? Quer construir um servidor facilmente portável?

Etc…

O que eu quis dizer com todas essas perguntas, é que, na minha opnião não existe um resposta fixa. Após respondermos todas elas chegaremos em uma escolha rasoável.

Agora pelo que você disse na pergunta do tópico, parece que o pessoal anda optando pela JVM.

G

Vou deixar uma pergunta que pode ajudar a esclarecer a pergunta do tópico, também espero que o pessoal responda.
Quem aqui programa ou programou profissionalmente para arquiteturas e sistemas que não x86/x86_64 e Linux/OS X/Windows ?

B

Oi pessoal achei bem interessante esse post, http://tinyurl.com/33mq7so que o @lucasbastos encaminhou no twitter pela manhã.

Gostaria de compartilhar com vocês, parece que a opção puramente feita em java threads não aguentou algumas milhares de conexões.

Me parece que ele não usou a estratégia de criar um pool de conexões de threads em java por que ele queria ver o máximo que o java suporta em conexões simultâneas, uma atendida por cada thread!

eu também sempre acreditei que java não suporta um número gigante de conexões simultâneas.

e agora ele esta usando uma estratégia em NIO e parece que atendeu muito melhor os seus requisitos, pois ele deve ter usado o padrão reactor.

Alguém conhece algum paper que mediu a acurácia(performance e concorrência) desses servidores de aplicação ou web servers em java?

Abraço.

M

O servidor implementado no link possui um custo de produção que é esperado crescer na medida que aumenta o número de usuários do sistema. O que aconteceu com sua preocupação anterior com a economia de escala?

B

mochuara:
O servidor implementado no link possui um custo de produção que é esperado crescer na medida que aumenta o número de usuários do sistema. O que aconteceu com sua preocupação anterior com a economia de escala?

Oi mochuara tudo bem?

Então não entendi muito bem o que você quis dizer com minha preocupação com a “economia de escala”?, na realidade não estou preocupado com a economia de escala, apenas mencioneu essa característica, onde pode-se tirar algum proveito da mesma, mas nem sempre é o caso.
Bom espero que o primeiro post sejam as perguntas que devam ser respondidas.

Obs: Eu apenas trouxe um caso em que eles mostram que java não aguenta muitas conexões simultâneas.

M

boblast:
mochuara:
O servidor implementado no link possui um custo de produção que é esperado crescer na medida que aumenta o número de usuários do sistema. O que aconteceu com sua preocupação anterior com a economia de escala?

Oi mochuara tudo bem?

Então não entendi muito bem o que você quis dizer com minha preocupação com a “economia de escala”?, na realidade não estou preocupado com a economia de escala, apenas mencioneu essa característica, onde pode-se tirar algum proveito da mesma, mas nem sempre é o caso.
Bom espero que o primeiro post sejam as perguntas que devam ser respondidas.

Obs: Eu apenas trouxe um caso em que eles mostram que java não aguenta muitas conexões simultâneas.

Não. Voce trouxe um exemplo usando Java, apenas com outro modelo de threads, e economicamente inverso, já que um servidor pub/sub requer um custo muito maior por cliente.

B

O que é pub/sub? não observei isso no artigo, vou ler atentamente, então esquece o exemplo.

Abraço.

M

boblast:
O que é pub/sub? não observei isso no artigo, vou ler atentamente, então esquece o exemplo.

Abraço.

Repare no trecho em que ele diz porque abandou a solução em C.

Criado 29 de setembro de 2010
Ultima resposta 5 de out. de 2010
Respostas 16
Participantes 5