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. Freqüentemente, clientes e servidores se comunicam em uma rede de computadores em hardware separado, 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 os 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.
Papel de cliente e servidor
A interface "cliente-servidor" A característica descreve a relação de programas cooperantes em um aplicativo. O componente do servidor fornece uma função ou serviço para um ou muitos clientes, que iniciam solicitações para tais serviços. Os servidores são classificados pelos serviços que fornecem. Por exemplo, um servidor web serve páginas 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.
O fato de um computador ser um cliente, um servidor ou ambos é determinado pela natureza do aplicativo que requer as funções do serviço. Por exemplo, um único computador pode executar um servidor 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 no mesmo computador. A comunicação entre servidores, como para sincronizar dados, às vezes é chamada de comunicação entre servidores ou servidor para servidor.
Comunicação cliente e servidor
Geralmente, um serviço é uma abstração dos recursos do computador e um cliente não precisa se preocupar com o desempenho do servidor enquanto atende à solicitação e entrega a resposta. O cliente apenas tem de compreender a resposta com base no conhecido protocolo de aplicação, 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 mensagem 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). 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.
Um servidor pode receber requisições de muitos clientes distintos em um curto período. Um computador pode executar apenas 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 serviços bancários online 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 da web acessa o servidor de banco de dados como um 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 da 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 dados. Este é o padrão de mensagens de solicitação-resposta. Quando todas as solicitações forem atendidas, a sequência é concluída e o navegador da Web apresenta os dados ao cliente.
Este exemplo ilustra um padrão de design aplicável ao modelo cliente-servidor: separação de preocupações.
História inicial
Uma forma inicial de arquitetura cliente-servidor é a entrada remota de tarefas, que data pelo menos do OS/360 (anunciada 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 de host) e user-host (ou using-host), e estes aparecem nos primeiros documentos RFC 5 e RFC 4. Esse uso continuou no Xerox PARC em meados -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). O objetivo dessa linguagem era aceitar comandos de um computador (o host do usuário), que retornaria relatórios de status ao usuário, pois codificava os comandos em pacotes de rede. Outro computador habilitado para DEL, o host do servidor, recebeu os pacotes, decodificou-os e devolveu os dados formatados ao host do usuário. Um programa DEL no host do usuário recebia 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).
Host-cliente e host-servidor
Host-cliente e host-servidor têm significados sutilmente diferentes de cliente e servidor. Um host é qualquer computador conectado a uma rede. Considerando que as palavras servidor e cliente podem se referir a um computador ou a um programa de computador, servidor-host e cliente-host sempre se refere a computadores. O host é um computador versátil e multifuncional; 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 dos primeiros usos da palavra cliente ocorre em "Separating Data from Function in a Distributed File System", um artigo de 1978 dos cientistas da computação do 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 o usam para distinguir entre o usuário e o nó de rede do usuário (o cliente). Em 1992, a palavra servidor entrou na linguagem geral.
Computação centralizada
O modelo cliente-servidor não determina que os servidores-hosts devam ter mais recursos do que os clientes-hosts. 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 clientes para os computadores centrais, mais simples os hosts clientes podem ser. Ele depende fortemente 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 computador não possui nenhum sistema operacional; é apenas uma interface de entrada/saída para o servidor. Em contraste, um cliente rico, como um computador pessoal, possui muitos recursos e não depende de um servidor para funções essenciais.
À medida que os preços dos microcomputadores diminuíam e aumentavam a potência entre os anos 80 e o final dos anos 90, muitas organizações fizeram a transição da computação de servidores centralizados, como mainframes e minicomputadores, para clientes avançados. Isso permitia um domínio maior e mais individualizado sobre os recursos do computador, mas complicava o gerenciamento da tecnologia da informação. Durante os anos 2000, os aplicativos da web amadureceram o suficiente para rivalizar com o software de aplicativo desenvolvido para uma microarquitetura específica. Esse amadurecimento, o armazenamento em massa mais acessível e o advento da arquitetura orientada a serviços foram alguns dos fatores que deram origem à tendência de computação em nuvem da década de 2010.
Comparação com a arquitetura ponto a ponto
Além do modelo cliente-servidor, os aplicativos de computação distribuída geralmente usam a arquitetura de aplicativos ponto a ponto (P2P).
No modelo cliente-servidor, o servidor geralmente é projetado para operar como um sistema centralizado que atende a muitos clientes. Os requisitos de capacidade de computação, memória e armazenamento de um servidor devem ser dimensionados adequadamente para a carga de trabalho esperada. Os sistemas de balanceamento de carga e failover costumam ser empregados para dimensionar o servidor além de uma única máquina física.
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 recebidas para qualquer servidor disponível capaz de atendê-las.
Em uma rede peer-to-peer, dois ou mais computadores (peers) agrupam seus recursos e se comunicam em um sistema descentralizado. Peers 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 pares se comunicam diretamente. Na rede ponto a ponto, um algoritmo no protocolo de comunicação ponto a ponto equilibra a carga e até mesmo pontos com recursos modestos podem ajudar a compartilhar a carga. Se um nó ficar indisponível, seus recursos compartilhados permanecerão disponíveis enquanto outros pares o oferecerem. Idealmente, um par não precisa atingir alta disponibilidade porque outros pares redundantes compensam qualquer tempo de inatividade do recurso; à 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 como subcategorias de sistemas peer-to-peer distribuídos.
Contenido relacionado
Northrop F-5
Active Directory
Docklands Light Railway