Qual a diferença entre "computação em nuvem" e "cliente-servidor"?

30

Observando o CEO de uma nova empresa de "computação em nuvem" descrever sua empresa em um programa financeiro de TV hoje, ele disse algo como "A computação em nuvem é superior à antiga computação cliente-servidor".

Agora estou confuso. Alguém pode explicar o que significa "computação em nuvem" em contraste com o cliente-servidor?

Tanto quanto eu entendo, a computação em nuvem é mais um modelo de serviços de rede, de modo que eu não possuo nem mantenho o hardware físico. A "nuvem" é todo o material de back-end. Mas ainda posso ter um aplicativo que se comunique com esse ambiente de "nuvem". E se eu executar um site, apresente um formulário que o usuário preenche, aperta um botão na página e retorna um relatório gerado pelo servidor da web, não é o mesmo que computação em "nuvem"? E você não consideraria meu navegador como o "cliente"?

Observe que minha pergunta é específica ao conceito de "computação em nuvem" em relação a "cliente-servidor".

Desculpe se esta é uma pergunta inadequada para este site; é o mais próximo do universo Stack e esta é a minha primeira vez aqui. Sou um veterano, programando desde os dias de mainframe no final dos anos 70.

BellevueBob
fonte
Isso é uma simplificação, mas acho que a principal diferença é onde os dados são armazenados. No servidor cliente, SUA empresa armazena seus próprios dados. Em Cloud Computing, seus dados são armazenados pelo provedor de aplicativos em nuvem. Isso tem vantagens, porque o usuário do aplicativo na nuvem tem pouca ou nenhuma manutenção no final e o desenvolvedor do aplicativo na nuvem pode atualizar seu código e bancos de dados sem ter que se preocupar em interromper alguém por três revisões de software. Obviamente, a desvantagem é que o usuário do aplicativo armazena seus dados no armazenamento de outra pessoa.
Dunk16:
3
Em resumo, pode-se dizer que o Cliente-Servidor foi o hype de ontem, enquanto The Cloud é o hype atual. :-)
JensG 16/10
Cliente-servidor é a computação em nuvem como código de montagem é o Excel.
Mouviciel 24/10/2013
11
É a diferença entre dirigir um carro alugado e dirigir um que você possui. Nenhuma diferença real, exceto que você não precisa se preocupar com a manutenção!
James Anderson

Respostas:

28

Estritamente falando, não há 'Cloud'. Não no sentido do que aquele CEO estava falando. Existe uma Internet, é claro. Existem serviços hospedados. Existem VPS. Existem sistemas de entrega de conteúdo. Nós (pessoal técnico) nos adaptamos ao termo para fazer referência a determinados modelos de serviço hospedados. Mas 'nuvem' na mídia do consumidor é amplamente um termo de marketing traduzido livremente como 'internet'. Na maioria das vezes, isso também significa "eu cobro você por mês".

Você está certo em seus pensamentos de que os dois termos, 'nuvem' e 'cliente-servidor' não estão relacionados. Ter um serviço hospedado 'na nuvem' (sempre quero adicionar um dramático 'dun-dun-daaaaaaa' depois de usar essa frase) não torna um aplicativo cliente-servidor menos cliente-servidor-y. Por exemplo, a 'web' usa principalmente um modelo cliente-servidor. O navegador da web é o cliente. O servidor da web é o servidor. O fato de um servidor da Web estar hospedado 'na nuvem' não altera o fato de o relacionamento navegador / servidor da Web ser cliente-servidor.

Portanto, o termo cliente-servidor define o relacionamento entre duas entidades em um sistema. Onde as entidades estão fisicamente hospedadas é irrelevante.

Basicamente, você está correto. Os dois não são comparáveis.

GrandmasterB
fonte
Existem pelo menos dois tipos de cluds: nuvens de alto nível - onde o gerenciamento sai e fala - tecnicamente conhecido como "vapor" ou "fumaça" (daí o termo "smokeware") e nuvens de baixo nível - onde os servidores estão localizados - tecnicamente chamado "nevoeiro". Desculpe pelo cinismo.
Emilio Garavaglia
21

"Computação em nuvem" é um termo geral destinado a fazer duas coisas: primeiro, abstrair todos os usos possíveis de um modelo cliente-servidor por trás de um único termo, em oposição a casos de uso mais específicos, como "servidores de arquivos", "servidores de banco de dados", "servidores web", "servidores de aplicativos" etc .; e segundo, abstrair a própria arquitetura do servidor, em termos de hardware, topologia, localização e até propriedade.

Em um modelo tradicional de cliente-servidor, que ainda hoje é de uso comum, um cliente se conecta a um servidor que executa uma tarefa específica. Este servidor pode hospedar um banco de dados, uma série de compartilhamentos de arquivos ou uma página da web. Quando o cliente se conecta a esse servidor, existe um entendimento implícito do tipo de comunicação e transmissão de dados que ocorrerá entre os dois computadores. Também pode haver um entendimento do cliente ou do usuário final sobre os recursos do hardware do servidor e suas limitações. Esse acoplamento relativamente "estreito" entre a máquina cliente e seu servidor pode causar problemas para um administrador de sistemas que precisa desativar um servidor para manutenção; todos os aplicativos dependentes dos recursos fornecidos por este servidor devem ser apontados para outro servidor,

Em um modelo de nuvem, o hardware, a topologia, a divisão do trabalho e o número uniforme de máquinas envolvidas são abstraídos por trás de um único terminal. A analogia poderia ser desenhada para uma "aplicação web" moderna, em oposição às gerações mais antigas de "site", que eram mais estáticas. Podemos supor que exista um servidor de aplicativos e um servidor de banco de dados nos bastidores, mas realmente não precisamos nos preocupar; o servidor da web, como parte de seu trabalho de atender o aplicativo completo aos usuários além da "borda", fornece um ponto de extremidade unificado, permitindo acesso controlado a todos os dados e serviços fornecidos por outras máquinas atrás dessa porta da frente.

O resultado é que, com um único ponto de extremidade exposto para fornecer a funcionalidade do aplicativo, é tudo o que um consumidor cliente do aplicativo precisa se preocupar, em vez de onde obter seus dados, onde chamar esse e tal processo remoto de aplicativo etc; isso significa que os administradores e arquitetos do provedor de serviços nessa nuvem são mais ou menos livres para alterar as máquinas, a topologia e outros detalhes de implementação específicos desse "serviço em nuvem" sem que os clientes sejam mais sábios. O Facebook poderia, se achasse sensato, reconstruir todo o seu sistema de armazenamento de dados a partir do zero, usando um DBMS diferente e todos os novos servidores. Enquanto o site permanecesse disponível durante a transição, ninguém seria mais sábio; de fato, o Facebook fez exatamente isso, muitas vezes,

KeithS
fonte
2
Por mais que eu aprecie o cinismo por trás do marketing em "nuvem" que a resposta de GrandmasterB contém, esta é a resposta real.
Eric Rei
Achei isso como a melhor resposta!
Arsal 27/07
5

Uma parte essencial da "computação em nuvem" é a ferramenta de gerenciamento de implantação.

Nas implantações "clássicas", solicitava-se uma máquina específica para uma aplicação específica e fazia uma configuração bastante fixa.

Em um ambiente de nuvem, há um hardware mais ou menos padronizado em um pool e uma API que cria e configura máquinas virtuais nele a partir de alguma forma de modelo. Por esse motivo, os sistemas defeituosos podem ser facilmente substituídos, reduzidos ou reduzidos, dependendo das necessidades, e o hardware pode ser alocado conforme necessário, de maneira automatizada.

É claro que os administradores adequados fizeram a maior parte disso antes, mas, além do marketing puro, há uma base de APIs padronizadas (API Aamzons AWS, que também é oferecida por ferramentas como Eucalyptus para "nuvens privadas") e ferramentas (por exemplo, fantoches) emergentes.

johannes
fonte
Muito disso é sobre "marketing", e não sobre tecnologia real, como o hoo-haa sobre "Big Data".
BellevueBob
Você está esquecendo um grande aspecto do "marketing". O marketing não é apenas "propaganda", é também "preço". E é aí que a Cloud Computing é diferente da Client-Server Computing. Às vezes, também é Utility Computing, porque tem o preço de serviços públicos (eletricidade, água da torneira). Obviamente, esse modelo também não é novo, é o preço da computação em mainframe.
Jörg W Mittag 17/10
2

Na arquitetura cliente-servidor 'tradicional', você tinha recursos estaticamente atribuídos (ou pelo menos é apresentado como tal - não tenho experiência no período anterior à nuvem, portanto, corrija-me se estiver errado e depender de marketing falso). O servidor de banco de dados foi chamado db.yourcompany.com e seu servidor da web se comunicou com ele. Se você deseja aumentar os recursos, pode adicionar outro servidor da web dedicado e fornecer balanceamento de carga, etc.

Por outro lado, o estresse na nuvem foi colocado na abstração de níveis mais baixos e denota como o 'servidor' é construído. No exemplo, você tem:

  • HAAS (Hardware como serviço) - o cliente (empresa) recebe um computador hospedado no qual pode instalar qualquer sistema operacional que desejar. A diferença é que eles não "conseguem" realmente um computador, mas uma máquina virtual em um farm. Como é virtualizado, eles não precisam se preocupar com detalhes de nível inferior, como quantidade de energia computacional, pagar as contas independentemente de a máquina ser usada, como está conectada etc.
  • PAAS (plataforma como serviço) - um nível mais alto - você escreve uma aplicação que de alguma forma é executada. Como a API é geral o suficiente, os provedores de nuvem podem alocar recursos sob demanda; portanto, se seu aplicativo for cortado, você pagará por mais recursos e sofrerá com DDOS não malicioso.
  • SAAS (software como serviço) - mais um nível mais alto - você não escreve um aplicativo - usa um. Você não se importa como é implementado ou com os recursos que usa. Está disponível em qualquer lugar e a qualquer momento.

Observe que, embora na maioria dos casos esteja implícito que o serviço real seja terceirizado para grandes empresas (por exemplo, Amazon ou Google), não é necessário o caso - grandes empresas ou universidades implantam suas próprias nuvens internas para facilitar o gerenciamento de recursos. Isso permite adicionar os recursos ao aplicativo para que sua execução seja adicionada conforme necessário. Se a nova inicialização interna tiver êxito, eles não precisam se preocupar com a sobrecarga dos servidores. No entanto, como a economia de escala desempenha um papel, isso geralmente é feito apenas quando há requisitos especiais (por exemplo, com relação à segurança).

Do ponto de vista do usuário, é transparente e tem aparência de arquitetura cliente-servidor. O servidor da Web pode viver 'na nuvem' enquanto usa HTTP simples e antigo. De fato, os problemas e as soluções das idéias remontam aos mainframes dos anos 50 e, atualmente, voltam mais como um contraste com os PCs clientes de espessura.

Dito isto, também pode ser um chavão em determinada frase e afirmar que a empresa é dinâmica e se concentra em sua competência principal enquanto habilita seus funcionários.

Maciej Piechotka
fonte
1

Alguém pode explicar o que significa "computação em nuvem" em contraste com o cliente-servidor?

Depende da sua perspectiva. Para as empresas, a computação em nuvem é boa porque (geralmente) permite que você seja mais flexível com o número de máquinas que suportam seus serviços. Essa flexibilidade permite que você seja mais responsivo, o que deve economizar seu dinheiro. As empresas também podem tirar vantagem de permitir que o provedor de nuvem faça backups, recuperação de desastres, segurança física e todos os outros itens de infraestrutura com os quais eles não desejam lidar. Isso geralmente leva a economia e melhor qualidade.

Do ponto de vista do consumidor, a maior qualidade e confiabilidade da conexão são boas. Alguns provedores de nuvem também ajudam a distribuir seus servidores para ajudar na latência do consumidor.

Para programadores ... é basicamente a programação cliente-servidor, onde o servidor é difícil de acessar e você ocasionalmente precisa usar algumas APIs especializadas.

Telastyn
fonte
-1

Eu acho que é justo dizer que "cloud computing" e "client-server" são muito semelhantes. Na minha perspectiva, a computação em nuvem parece confiar mais no servidor do que no modelo "cliente-servidor". Em teoria, algumas formas de computação em nuvem podem acontecer independentemente da conexão do cliente. O benefício de um aplicativo executado apenas na nuvem sem comunicação com o cliente não parece muito útil; portanto, faz sentido criar alguma forma de comunicação com o cliente para esse servidor.

Basicamente, acho que depende principalmente de onde a maior parte do seu poder de computação está sendo realizada. Um servidor geralmente possui especificações melhores, em termos de hardware e poder de computação, do que um computador de usuário padrão, a fim de simplesmente gerenciar muitas conexões de clientes e operações simultâneas para atender a essas conexões. A computação em nuvem usa isso como uma vantagem, movendo o que normalmente seria o código de execução do cliente para o servidor e permitindo que o cliente seja o mais "burro" possível. Assim, é necessário menos recursos do usuário para lidar com o mesmo tipo de operações.

Pode não ser a melhor resposta, mas é assim que eu a vejo.

StMotorSpark
fonte
2
Discordo. A web usa um modelo cliente-servidor. O navegador da web é o cliente. O servidor da web é o servidor. O fato de um servidor da Web estar "de fora da nuvem" é irrelevante. Os dois termos não são comparáveis.
precisa
Para mim, eles são comparáveis ​​simplesmente porque eu os vejo como essencialmente iguais, exceto onde a maioria da computação é feita. "Cloud Computing" é o mesmo, exceto pelo fato de contar com pouco suporte computacional do cliente.
StMotorSpark