Modelo cliente-servidor
O modelo cliente-servidor é uma estrutura de aplicação distribuída que particiona tarefas ou cargas de trabalho entre os provedores de um recurso ou serviço, chamados servidores , e solicitantes de serviço, chamados clientes . [1] Frequentemente, clientes e servidores se comunicam em uma rede de computadores em hardwares separados, mas tanto o cliente quanto o servidor podem residir no mesmo sistema. Um host de servidor executa um ou mais programas de servidor, que compartilham seus recursos com clientes. Um cliente geralmente não compartilha nenhum de seus recursos, mas solicita conteúdo ou serviço de um servidor. Os clientes, portanto, iniciam sessões de comunicação com os servidores, que aguardam solicitações recebidas. Exemplos de aplicativos de computador que usam o modelo cliente-servidor são e- mail , impressão em rede e a World Wide Web .
Função de cliente e servidor
A característica "cliente-servidor" descreve a relação de programas cooperativos em um aplicativo. O componente servidor fornece uma função ou serviço para um ou vários clientes, que iniciam solicitações para tais serviços. Os servidores são classificados pelos serviços que prestam. Por exemplo, um servidor web serve páginas da web e um servidor de arquivos serve arquivos de computador . Um recurso compartilhado pode ser qualquer software e componentes eletrônicos do computador servidor, desde programas e dados até processadores e dispositivos de armazenamento . O compartilhamento de recursos de um servidor constitui um serviço .
Se um computador é um cliente, um servidor ou ambos, é determinado pela natureza do aplicativo que requer as funções de serviço. Por exemplo, um único computador pode executar um servidor da Web e um software de servidor de arquivos ao mesmo tempo para fornecer dados diferentes a clientes que fazem diferentes tipos de solicitações. O software cliente também pode se comunicar com o software servidor dentro do mesmo computador. [2] A comunicação entre servidores, como para sincronizar dados, às vezes é chamada de comunicação entre servidores ou de servidor para servidor .
Comunicação cliente e servidor
Geralmente, um serviço é uma abstração de recursos do computador e um cliente não precisa se preocupar com o desempenho do servidor enquanto atende a solicitação e entrega a resposta. O cliente só precisa entender a resposta com base no protocolo de aplicação conhecido, ou seja, o conteúdo e a formatação dos dados para o serviço solicitado.
Clientes e servidores trocam mensagens em um padrão de mensagens de solicitação-resposta . O cliente envia uma solicitação e o servidor retorna uma resposta. Essa troca de mensagens é um exemplo de comunicação entre processos . Para se comunicar, os computadores devem ter uma linguagem comum e devem seguir regras para que tanto o cliente quanto o servidor saibam o que esperar. A linguagem e as regras de comunicação são definidas em um protocolo de comunicação . Todos os protocolos operam na camada de aplicação . O protocolo da camada de aplicação define os padrões básicos do diálogo. Para formalizar ainda mais a troca de dados, o servidor pode implementar uma interface de programação de aplicativos (API). [3]A API é uma camada de abstração para acessar um serviço. Ao restringir a comunicação a um formato de conteúdo específico , facilita a análise . Ao abstrair o acesso, facilita a troca de dados entre plataformas. [4]
Um servidor pode receber solicitações de vários clientes distintos em um curto período. Um computador só pode executar um número limitado de tarefas a qualquer momento e depende de um sistema de agendamento para priorizar as solicitações recebidas dos clientes para acomodá-las. Para evitar abusos e maximizar a disponibilidade , o software do servidor pode limitar a disponibilidade aos clientes. Os ataques de negação de serviço são projetados para explorar a obrigação de um servidor de processar solicitações, sobrecarregando-o com taxas de solicitação excessivas. A criptografia deve ser aplicada se informações confidenciais forem comunicadas entre o cliente e o servidor.
Exemplo
Quando um cliente do banco acessa os serviços bancários on-line com um navegador da Web (o cliente), o cliente inicia uma solicitação ao servidor da Web do banco. As credenciais de login do cliente podem ser armazenadas em um banco de dados e o servidor web acessa o servidor de banco de dados como cliente. Um servidor de aplicativos interpreta os dados retornados aplicando a lógica de negócios do banco e fornece a saída para o servidor web. Por fim, o servidor da Web retorna o resultado ao navegador da Web do cliente para exibição.
Em cada etapa dessa sequência de trocas de mensagens cliente-servidor, um computador processa uma solicitação e retorna os dados. Este é o padrão de mensagens de solicitação-resposta. Quando todas as solicitações são atendidas, a sequência é concluída e o navegador da web apresenta os dados ao cliente.
Este exemplo ilustra um padrão de projeto aplicável ao modelo cliente-servidor: separação de interesses .
História inicial
Uma forma inicial de arquitetura cliente-servidor é a entrada de tarefa remota , datando pelo menos do OS/360 (anunciado em 1964), em que a solicitação era para executar uma tarefa e a resposta era a saída.
Ao formular o modelo cliente-servidor nas décadas de 1960 e 1970, os cientistas da computação que construíram a ARPANET (no Stanford Research Institute ) usaram os termos servidor-host (ou servidor servidor ) e usuário-host (ou usando-host ), e estes aparecem em os primeiros documentos RFC 5 [5] e RFC 4. [6] Esse uso continuou na Xerox PARC em meados da década de 1970.
Um contexto em que os pesquisadores usaram esses termos foi no projeto de uma linguagem de programação de rede de computadores chamada Decode-Encode Language (DEL). [5] O objetivo dessa linguagem era aceitar comandos de um computador (o host do usuário), que retornaria relatórios de status para o usuário conforme codificasse os comandos em pacotes de rede. Outro computador com capacidade DEL, o host-servidor, recebeu os pacotes, decodificou-os e retornou os dados formatados ao host-usuário. Um programa DEL no host do usuário recebeu os resultados para apresentar ao usuário. Esta é uma transação cliente-servidor. O desenvolvimento do DEL estava apenas começando em 1969, ano em que o Departamento de Defesa dos Estados Unidos estabeleceu a ARPANET (predecessora da Internet ).
Cliente-host e servidor-host
Cliente-host e servidor-host têm significados sutilmente diferentes de cliente e servidor . Um host é qualquer computador conectado a uma rede. Enquanto as palavras servidor e cliente podem se referir a um computador ou a um programa de computador, servidor-host e usuário-host sempre se referem a computadores. O host é um computador multifuncional versátil; clientes e servidores são apenas programas executados em um host. No modelo cliente-servidor, é mais provável que um servidor se dedique à tarefa de servir.
Um uso inicial da palavra cliente ocorre em "Separating Data from Function in a Distributed File System", um artigo de 1978 dos cientistas da computação da Xerox PARC Howard Sturgis, James Mitchell e Jay Israel. Os autores têm o cuidado de definir o termo para os leitores e explicam que eles o utilizam para distinguir entre o usuário e o nó de rede do usuário (o cliente). [7] Em 1992, a palavra servidor entrou na linguagem geral. [8] [9]
Computação centralizada
O modelo cliente-servidor não determina que os hosts-servidor devam ter mais recursos do que os hosts-cliente. Em vez disso, ele permite que qualquer computador de uso geral estenda seus recursos usando os recursos compartilhados de outros hosts. A computação centralizada , no entanto, aloca especificamente um grande número de recursos para um pequeno número de computadores. Quanto mais computação é descarregada dos hosts-cliente para os computadores centrais, mais simples podem ser os hosts-cliente. [10] Depende muito de recursos de rede (servidores e infraestrutura) para computação e armazenamento. Um nó sem disco carrega até mesmo seu sistema operacional da rede e um terminal de computadornão tem nenhum sistema operacional; é apenas uma interface de entrada/saída para o servidor. Em contraste, um cliente gordo , como um computador pessoal , tem muitos recursos e não depende de um servidor para funções essenciais.
À medida que os microcomputadores diminuíram de preço e aumentaram em poder da década de 1980 até o final da década de 1990, muitas organizações migraram a computação de servidores centralizados, como mainframes e minicomputadores , para clientes gordos. [11] Isso proporcionou um domínio maior e mais individualizado sobre os recursos do computador, mas complicou o gerenciamento da tecnologia da informação . [10] [12] [13] Durante os anos 2000, os aplicativos da Web amadureceram o suficiente para rivalizar com os softwares desenvolvidos para uma microarquitetura específica . Esse amadurecimento, armazenamento em massa mais acessível e o advento daA arquitetura orientada a serviços estava entre os fatores que deram origem à tendência de computação em nuvem da década de 2010. [14]
Comparação com arquitetura ponto a ponto
Além do modelo cliente-servidor, os aplicativos de computação distribuída geralmente usam a arquitetura de aplicativo ponto a ponto (P2P).
No modelo cliente-servidor, o servidor geralmente é projetado para operar como um sistema centralizado que atende a muitos clientes. O poder de computação, memória e requisitos de armazenamento de um servidor devem ser dimensionados adequadamente para a carga de trabalho esperada. Os sistemas de balanceamento de carga e failover são frequentemente empregados para dimensionar o servidor além de uma única máquina física. [15] [16]
O balanceamento de carga é definido como a distribuição metódica e eficiente do tráfego de rede ou aplicativo em vários servidores em um farm de servidores. Cada balanceador de carga fica entre os dispositivos cliente e os servidores de back-end, recebendo e distribuindo as solicitações de entrada para qualquer servidor disponível capaz de atendê-las.
Em uma rede peer-to-peer , dois ou mais computadores ( peers ) reúnem seus recursos e se comunicam em um sistema descentralizado . Os pares são nós coiguais ou equipotentes em uma rede não hierárquica. Ao contrário dos clientes em uma rede cliente-servidor ou cliente-fila-cliente , os peers se comunicam diretamente. [ citação necessária ] Em redes peer-to-peer, e algoritmo no protocolo de comunicação peer-to-peer equilibra a carga , e até mesmo peers com recursos modestos podem ajudar a compartilhar a carga. [ citação necessária ]Se um nó ficar indisponível, seus recursos compartilhados permanecerão disponíveis enquanto outros pares o oferecerem. Idealmente, um peer não precisa alcançar alta disponibilidade porque outros peers redundantes compensam qualquer tempo de inatividade de recursos ; à medida que a disponibilidade e a capacidade de carga dos pares mudam, o protocolo redireciona as solicitações.
Tanto cliente-servidor quanto mestre-escravo são considerados subcategorias de sistemas distribuídos ponto a ponto. [17]
Veja também
Notas
- ^ "Arquitetura de aplicativos distribuídos" (PDF) . Microsistema Sol. Arquivado a partir do original (PDF) em 6 de abril de 2011 . Recuperado 2009-06-16 .
- ^ O X Window System é um exemplo.
- ^ Benatallah, B.; Casati, F.; Toumani, F. (2004). "Modelagem de conversação de serviço da Web: A pedra angular para automação de e-business". Computação da Internet IEEE . 8 : 46-54. doi : 10.1109/MIC.2004.1260703 . S2CID 8121624 .
- ^ Dustdar, S.; Schreiner, W. (2005). "Uma pesquisa sobre composição de serviços web" (PDF) . International Journal of Web and Grid Services . 1 : 1. CiteSeerX 10.1.1.139.4827 . doi : 10.1504/IJWGS.2005.007545 .
- ^ a b Rulifson, Jeff (junho de 1969). DEL . IETF . doi : 10.17487/RFC0005 . RFC 5 . Recuperado em 30 de novembro de 2013 .
- ^ Shapiro, Elmer B. (março de 1969). Horário da Rede . IETF . doi : 10.17487/RFC0004 . RFC 4 . Recuperado em 30 de novembro de 2013 .
- ^ Sturgis, Howard E.; Mitchell, James George; Israel, Jay E. (1978). "Separando Dados da Função em um Sistema de Arquivo Distribuído" . Xerox PARC .
{{cite journal}}
: Cite journal requires|journal=
(help) - ^ Harper, Douglas. "servidor" . Dicionário de Etimologia Online . Recuperado em 30 de novembro de 2013 .
- ^ "Separando dados da função em um sistema de arquivos distribuído" . GetInfo . Biblioteca Nacional Alemã de Ciência e Tecnologia . Arquivado a partir do original em 2 de dezembro de 2013 . Recuperado em 29 de novembro de 2013 .
- ^ a b Nieh, Jason; Yang, S. Jae; Novik, Naomi (2000). "Uma comparação de arquiteturas de computação Thin-Client" . Comuns Acadêmicos . doi : 10.7916/D8Z329VF . Recuperado em 28 de novembro de 2018 .
- ^ d'Amore, MJ; Oberst, DJ (1983). "Microcomputadores e mainframes". Anais da 11ª Conferência Anual da ACM SIGUCCS sobre Serviços ao Usuário - SIGUCCS '83 . pág. 7. doi : 10.1145/800041.801417 . ISBN 978-0897911160. S2CID 14248076 .
- ^ Tolia, Niraj; Andersen, David G.; Satyanarayanan, M. (março de 2006). "Quantificando a experiência interativa do usuário em Thin Clients" (PDF) . Computador . Sociedade de Computação IEEE . 39 (3): 46–52. doi : 10.1109/mc.2006.101 . S2CID 8399655 .
- ↑ Otey, Michael (22 de março de 2011). "A nuvem é realmente apenas o retorno da computação de mainframe?" . SQL ServerPro . Mídia Penton . Arquivado a partir do original em 3 de dezembro de 2013 . Recuperado em 1 de dezembro de 2013 .
- ^ Barros, AP; Dumas, M. (2006). "A Ascensão dos Ecossistemas de Serviços Web". Profissional de TI . 8 (5): 31. doi : 10.1109/MITP.2006.123 . S2CID 206469224 .
- ^ Cardellini, V.; Colajanni, M.; Yu, PS (1999). "Balanceamento de carga dinâmico em sistemas de servidor Web". Computação da Internet IEEE . Instituto de Engenheiros Elétricos e Eletrônicos (IEEE). 3 (3): 28–39. doi : 10.1109/4236.769420 . ISSN 1089-7801 .
- ^ "O que é balanceamento de carga? Como funcionam os balanceadores de carga" . NGINX . 1 de junho de 2014 . Recuperado em 21 de janeiro de 2020 .
- ^ Varma, Vasudeva (2009). "1: Introdução à Arquitetura de Software" . Arquitetura de software: uma abordagem baseada em casos . Delhi: Pearson Education India. pág. 29. ISBN
9788131707494. Recuperado 2017-07-04 .
Sistemas Distribuídos Peer-to-Peer [...] Este é um estilo genérico cujos estilos populares são os estilos cliente-servidor e mestre-escravo.