SISTEMAS DISTRIBUÍDOS Modelo cliente e servidor Slide 2 Nielsen C. Damasceno
Modelos Cliente - Servidor A principal diferença entre um sistema centralizado e um sistema distribuído está na comunicação entre processos. Um sistema centralizado utiliza a memória compartilhada para a sua comunicação, enquanto um sistema distribuído utiliza a troca de mensagens, já que não há uma memória compartilhada distribuída.
Modelos de comunicação Para permitir que os processos se comuniquem é necessária a definição de um protocolo. Eleéo responsável por definir o modelo de comunicação, a sequência de mensagens a serem enviadas/recebidas, o formato dos dados, etc., fazendo com que duas entidades geograficamente distintas se comuniquem. Um protocolo de comunicação em um ambiente distribuído segue o modelo OSI, no qual a comunicação é dividida em sete camadas.
Modelos de comunicação
Definição No modelo de comunicação Cliente-Servidor, os processos são agrupados em dois tipos: Servidores: Oferecem serviços aos usuários; Clientes: Usam os serviços providos pelos Servidores. As principais vantagens neste modelo são as seguintes: Simplicidade na estruturação do ambiente, pois há uma definição clara do papel que cada processo faz; Não há necessidade de estabelecer e finalizar a conexão explicitamente.
Definição
Definição No envio e recebimento das mensagens, duas primitivas são utilizadas: send (destino, &address): envia uma mensagem apontada por address (posição de memória que contém as informações a serem enviadas) para o processo identificado por destino, bloqueando o processo que executou o send até que a mensagem tenha sido enviada; receive (endereço, &address): bloqueia o processo que executou até que uma mensagem chegue. Quando ela chega, é copiada para o buffer apontado por address. O parâmetro address específica o endereço do qual o receptor está esperando uma mensagem, ou seja, o local que armazenará o conteúdo da mensagem
Endereçamento O endereçamento é a forma como o cliente descobre a localização do servidor. Há três possibilidades de endereçamento: Direto. Aleatório. Servidor de nomes.
Endereçamento direto No endereçamento direto, o cliente coloca no código da aplicação o IP do servidor. Esta é a forma mais fácil e rápida de endereçar um servidor. Porém, esta estratégia tem um problema. Caso o servidor saia do ar ou altere o seu número IP, o cliente terá que alterar o código e recompilar a sua aplicação, perdendo a transparência de localização do servidor.
Endereçamento direto
Endereçamento aleatório Para evitar o problema decorrente do endereçamento direto, esta estratégia não possui o endereço IP do servidor no código. Quando o cliente quer enviar uma mensagem ao servidor, ele dispara uma mensagem em broadcast aos computadores da rede perguntando a localização do servidor que ele deseja. Nesta estratégia, há a vantagem de não precisar saber o IP do servidor no momento da compilação, porém há a desvantagem de gerar um volume extra de comunicação para descobrir a localização do servidor.
Endereçamento aleatório
Servidor de nomes Além do cliente e do servidor, há um processo que é o servidor de nomes, sendo que ele é responsável por armazenar a localização de todos os servidores. Quando o cliente quer enviar uma mensagem a um servidor, ele pergunta ao servidor de nomes a localização do servidor. O único problema desta estratégia é se o servidor de nomes sair do ar.
Servidor de nomes
Envio Com relação ao envio da mensagem, há as possibilidades de envio: Bloqueante: enquanto a mensagem é enviada, o processo permanece bloqueado (suspenso). Quando o cliente envia uma requisição ao servidor, ele espera a resposta para poder continuar a sua execução. Não bloqueante: ele pode ser enviado com cópia e com interrupção. Isso é muito útil quando o cliente pode processar algo que não dependa diretamente da resposta do servidor.
Envio bloqueante
Envio não bloqueante
Recebimento Há as possibilidades de recebimento: Bufferizado: ele pode ser recebimento com armazenamento temporário. Não bufferizado: recebemos a mensagem somente se o receive tiver sido executado antes do envio da mensagem.
Recebimento não bufferizado
Recebimento bufferizado
Confiabilidade Duas possibilidades: Confiável: ack (confirma que a mensagem foi recebida) a cada mensagem ou com ack no final da comunicação entre cliente e servidor. Não confiável: a mensagem será descartada.
Confiabilidade Req-Ack-Resp-Ack.
Minimizar tempo de Req-Ack-Resp-Ack.