Sistemas Distribuídos Modelo Cliente-Servidor: Introdução aos tipos de servidores e clientes Prof. MSc. Hugo Souza
Iniciando o módulo 03 da primeira unidade, iremos abordar sobre o Modelo Cliente-Servidor os seguintes assuntos: Modelo Cliente-Servidor: Clientes Clientes terminais; Clientes participativos; Modelo Cliente-Servidor: Servidores Servidor iterativo; Servidor concorrente; Servidor com estado; Servidor sem estado; Estudos de casos e exercícios; Atividades extras de avaliação;
Até agora vimos que os processos configuram os sistemas de computação que utilizam paralelismo; As threads gerenciam as atividades menores para balancear operações que podem ser inicializadas em um/mais dispositivos uni ou multiprocessados; A distribuição também releva rotinas e chamadas baseadas em instruções eomodocomoelaspodem ser distribuídas ou simuladas, com o uso da virtualização de aplicações; Tudo isso se comunica similarmente à uma rede de dados, dependo do modelo de comunicação utilizado pelos serviços com cliente e servidores;
Para os Sistemas Distribuídos, os fundamentos básicos da comunicação são similares aos das redes de acesso. Os Protocolos de comunicação das redes formam a base para qualquer sistema distribuído; A analogia em adotar os modelos de camadas é essencial durante o planejamento e o projeto utilizando recursos dos modelos OSI e TCP/IP; A orientação a conexão e não orientação a conexão também sintetizam o fluxo, gerenciamento, além de várias medidas que devem ser analisadas para o uso de um Sistema Distribuídos - segurança e disponibilidade;
Só que para isso é necessário definir a ordem dos processos para os componentes e o formato de envio/recebimento dos dados entre os dispositivos; Na disciplina de Redes de Computadores e em aulas anteriores, discutimos o modelo cliente-servidor, os papéis de clientes e servidores e a maneira como eles interagem; Agora vamos entender com mais detalhes as características desta infraestrutura de comunicação com a análise específica de cada lado nos questionando: O que na verdade é o modelo cliente-servidor?
Analisando o contexto cliente distribuído, o foco principal é voltado acerca de como deve ser provida a comunicação dos servidores com o usuário final; Há praticamente dois modos de clientes se levarmos em consideração o acesso e armazenamento dos dados em ambientes locais; O primeiro é que para cada cliente é instalada uma parte do software responsável por sincronizar as chamadas ou o serviço solicitado; O segundo é que o cliente torna-se isento de qualquer responsabilidade de execução do serviço ou do software obtendo acesso remoto pela rede;
Para o segundo caso, denota-se a chamada de interface com usuário em rede, conhecida como terminais de clientes minimizados(thin clients); As soluções clientes tendem a ser as mais populares pois os dados são manipulados e gerenciados por operações simples e sem processos de baixo nível; Podem ser exemplificadas em dispositivos móveis como PDAS e afins que utilizam sistemas finais controláveis mapeados com o uso de tecnologias de alta performance sobre o hardware; Um exemplo, é o sistema para gerenciamento de clientes X (pesquisar);
A comunicação entre os serviços é realizada através de drivers. O sistema-base é executado nos terminais através de um núcleo que contém bibliotecas que executam diferentes aplicações; As aplicações muitas vezes dependem do servidor, pois os clientes apenas obedecem os comandos que trafegam por protocolos de comunicação e chamada; Logicamente esses processos de interação sugerem que todo o processamento, armazenamento e memória sejam realizados pelos servidores, mas em alguns casos o esforço pode ser dividido;
Uma aplicação distribuída pode ser balanceada quando, a partir de uma invocação de um cliente, o mesmo desenvolve parte do funcionamento da mesma evitando a sobrecarga de transações; Esse termo é adotado quando o cliente participa ativamente e chama pra si a responsabilidade proporcionando uma sistematização composta; Esse fato é importantíssimo tanto para o gerenciamento de partes de um sistema como para a transparência e a organização da concorrência; Imaginem um sistema com paralelismo mal gerenciando ou sem o alinhamento de prioridades;
Em virtude de manter a transparência de saber em que componente a operação deve ser executada, surgiu o conceito de servir o contingente de tarefas; Um servidor para uma aplicação distribuída nada mais é do que um processo que implementa um serviço em nome de um conjunto de clientes; Cada servidor espera por uma requisição em forma de serviço e instruções de código localizados remotamente por redes locais e a longa distância; Há vários modos de discernir a organização das requisições e respostas que configuram um servidor:
O primeiro modo é conhecido como servidor iterativo, onde o próprio dispositivo manipula a requisição que vem de um cliente, e na sequência, assegura que ela seja atendida, após o que espera pela próxima requisição; Um servidor concorrente é diferente em certo ponto, por não manipular por si próprio a requisição, mas passa para uma thread separada ou para um outro processo, após o que imediatamente espera pela próxima requisição; Um exemplo de um servidor concorrente é um servidor multithread com bifurcação de processos;
Uma questão importante para os servidores e clientes é o tipo de contato efetuado por ambos. As requisições e respostas obedecem os soquetes; As portas tem um papel importante na associação dos processos e operações dos serviços. Em vez de ter que monitorar um número considerável de processos passivos, muitas vezes é mais eficiente a implementação de um superservidor; Mas para isso o estado do servidor deve ser observado para identificar se o mesmo possui condições de suportar interrupções, mudanças, além da alteração da malha distribuída;
Um servidor sem estado não mantém informações sobre o estado de seus clientes e pode mudar seu próprio estado sem informar a nenhum cliente; Ele se limita a responder requisições HTTP, por exemplo, que entram para transferir ou buscar um arquivo. Após a requisição ser processada, o servidor Web esquece o cliente completamente; Um modo particular de um projeto sem estado é aquele em que o servidor mantém o que é conhecido como estado flexível. Neste caso, o servidor mantém o estado do cliente, mas apenas por tempo limitado;
Ao contrário, um servidor com estado em geral mantém informações persistentes sobre seus clientes. Isso significa que as informações precisam ser explicitamente removidas pelo servidor; Um exemplo comum é um servidor de arquivos que permite a um cliente manter uma cópia local de um arquivo, mesmo após as operações de atualização; O servidor possui uma tabela de registros [cliente, arquivo] garantindo o monitoramento das permissões de acesso dos clientes nos serviços; Desempenho, confiabilidade, leitura e escrita garantidas;
Há autores, dentre eles Ling et. al. (2004), que sugerem um servidor com estado de sessão que media um pouco das características dos modelos apresentados anteriormente; Ao elaborar um schema cliente-servidor, a opção sem estado ou com estado não deve afetar os serviços oferecidos pelo servidor. As informações devem ser providas de maneira independente; De certa forma, os paradigmas de clientes e servidores formulam a base dos sistemas distribuídos com infraestruturas diferenciadas em relação ao funcionamento;
A comunicação distribuída [próxima aula] também contribui no entendimento dos processos, seja com threads e para a virtualização; O modelo cliente-servidor e suas diversificações são fundamentais também neste aspecto, considerando as necessidades de cada implementação e as respectivas características; Concluímos que os processos ditam as regras de tráfego para os Sistemas Distribuídos para compatibilizar as diferenças similarmente como nas arquiteturas apenas em maior âmbito;
Próxima aula continuaremos o Módulo 03; Baixem o material no Clube Nabuco; Também disponível no site: http://hugovlsouza.com Dúvidas entrem em contato: hvlsouza@gmail.com ou pelas redes sociais: Facebook: http://facebook.com/hugovlsouza1