Escolar Documentos
Profissional Documentos
Cultura Documentos
Distribuídos
O Modelo Cliente-Servidor
Autor 1ª versão
Cristiano A. Costa
Local
II - UFRGS
Revisões
V10.4
2013-2
C. Geyer
Roteiro
Conceitos de modelos, camada e middleware
Modelo cliente/servidor (C/S)
Conceito, características, ...
Roteiro
Endereçamento
Outros modelos e questões de sw
Primitivas bloqueantes e não-bloqueantes
Bufferização
Confiabilidade
Questões de Implementação
P2P
Uso de cache
Confiabilidade
Gerenciabilidade
Adaptabilidade
Relação custo/desempenho
Ou enfim
Camadas de software
Conceito que define como o sw é estruturado
organizado
Modelo básico de camadas
Aplicações
Middleware
Hardware
Camadas de software
Middleware
Objetivos
Camadas de software
Middleware
Conceito
Comunicação
Compartilhamento de recursos
CORBA
Java RMI
WS
DCOM
.Net Remoting
Middleware
Limitações
Frequentemente é difícil adicionar (melhorar)
requisitos de dependabilidade somente com o
mw
Isto pode exigir suporte em nível da aplicação
Exemplo clássico
Um aplicativo de transferência de
arquivos (ftp) na internet não pode
depender somente dos recursos do TCP
Middleware
Limitações
Referência
O Modelo OSI
Modelo padrão para Redes
Não é perfeito para Sistemas Distribuídos
Overhead causado por vários protocolos
O Modelo OSI
Observação
Modelo OSI:
Modelo Cliente-Servidor
Modelo Cliente/Servidor
Um dos modelos mais citados e usados
Prós
Simplicidade
Contras
Perde em escalabilidade
Perde em TF
Modelo Cliente/Servidor
Possui 2 grandes componentes
clientes
servidor
Modelo Cliente/Servidor
Partes (componentes)
Clientes
Modelo Cliente/Servidor
Partes (componentes)
Clientes
Conhece o servidor
Indeterminado, variável
Modelo Cliente/Servidor
Partes
Servidor
Frequentemente um programa
concorrente
Multithreaded
Argumentos
Resultados
Modelo Cliente/Servidor
Partes
Servidor
Argumentos de entrada
Servidor
Verifica a operação
Envia a resposta
Modelo Cliente/Servidor
Variações
Um servidor pode ser cliente de outros
servidores
Um cliente pode acessar vários servidores
Modelo Cliente/Servidor
Grupo de processos que cooperam entre si:
(Servidores) oferecem serviços para usuários
(Clientes)
Protocolo normalmente utilizado: Exemplo: UDP
Request/Reply
Sem Conexão
Simples
Modelo Cliente/Servidor
Grupo de processos ...
Request
Cliente Servidor
Reply
Kernel Kernel
Rede
5 Request/Reply
2 Enlace de dados
1 Física
Modelo Cliente/Servidor
A pilha de
Camada
2 Enlace de dados
implementadas em hardware
1 Física
Modelo Cliente/Servidor
As camadas física e de enlace de dados são
responsáveis por enviar e receber pacotes entre
cliente e servidor (redes)
A camada 5 define um
conjunto de respostas e
requisições permitidas
Os serviços de comunicação
são implementados através
de chamadas do sistema
(system calls)
Servidor de aplicações
Camada de processamento
Camada de dados
um servidor de arquivos em C
exemplo de servidor
procedure.c:
Cliente:
Copia arquivo 1 para arquivo 2
Usando
Receive
2º arg: mensagem
Mensagem
Arquivos
Header.c
Define formatos (dados, ...) e constantes
comuns ao programa servidor e aos
programas clientes
Por exemplo:
...
Loop infinito
Processa pedido
Responde ao cliente
Procedure.c
Código do cliente
Le pedaço do arquivo 1
header.h
/*Definições necessárias pelos clientes e servidores */
#define MAX_PATH 255 /*tamanho maximo de
nome_arq*/
#define BUF_SIZE 1024 /*dados transferidos*/
#define FILE_SERVER 243 /* endereço do servidor*/
header.h (continuação)
/*Códigos de erro*/
#define OK 0 /*operação feita corretamente*/
#define E_BAD_OPCODE -1 /*operação inexistente*/
#define E_BAD_PARAM -2 /*erro em algum parâmentro*/
#define E_IO -3 /*erro de E/S*/
header.h (continuação)
long opcoe; /*qual operação*/
long count; /*quantidade de bytes*/
long offset; /*onde no arq. começa a oper.*/
long extra1; /*campo extra*/
long extra2; /*campo extra*/
long result; /*resultado da operação*/
/* valor depende da op. */
char name[MAX_PATH]; /*nome do arquivo*/
char data[BUF_SIZE]; /*dados lidos ou p/ escrever*/
};
sample.c (servidor)
#include <header.h>
void main(void)
{
struct message m1,m2; /* áreas p/mensagens */
int r; /* área p/respostas */
procedure.c (cliente)
#include <header.h>
int copy(char *src, char *dst)
{
struct message m1; /* mensagem ao/de servidor */
long position; /* posição de leitura */
long client = 110; /* quem envia */
initialize();
position = 0; /* inicia leitura no 1o byte */
procedure.c (continuação)
do {
/*Lê um bloco de dados do arquivo origem*/
m1.opcode = READ; /* prepara mensagem */
m1.offset = position; /* 1o byte:
ajustado por read */
m1.count = BUf_SIZE; /* quantos bytes */
strcpy (&m1.name, src); /* nome arq. */
send(FILE_SERVER, &m1); /* envia req. */
receive(client, &m1); /* recebe resp. */
Endereçamento de servidores
Obs.: revisão ou extensão de conceitos de
nomeação em troca de mensagens
Um cliente para mandar uma mensagem a um
servidor precisa saber o endereço
Ou nomeação
Endereçamento de servidores
Principais destacados:
Endereçamento por número de máquina
2
1. Request para 243 Kernel Kernel
2. Reply para 199
Rede
Curso de Sistemas Operacionais Distribuídos O Modelo Cliente Servidor 57
Endereçamento por número de máquina
não é transparente
simplicidade
mais de um processo por máquina
não precisa de coordenação global
(não há ambigüidade entre processos)
1. Request para 243.0
2. Replay para 199.4
3
Cliente Servidor
1. Broadcast
4
2. Here I am
Kernel Kernel
3. Request
1 2
4. Replay
Rede
3 1
1. Lookup Server Client Name
Server
2. NS Reply 4 2
3. Request Kernel Kernel Kernel
4. Replay
Rede
Resumo Cliente/Servidor
Conceitos de modelos, camadas, middleware
Conceito de C/S
Prós e contras
Características do cliente
Características do servidor
Exemplo
Servidor de arquivos
Resumo Cliente/Servidor
Endereçamento
Conceito, e prós e contras de:
Revisão de Cliente/Servidor
No final dos slides
Súmula Primitivas
Bloqueantes (síncronas)
Assincronas
Bloqueantes
Não bloqueantes
Cópia de dados
Buffer
Acks
Primitivas Não-Bloqueantes
(assíncronas)
o send retorna o controle imediatamente, antes
da mensagem ser realmente enviada
o receive passa para o kernel o ponteiro para o
buffer e retorna imediatamente, antes de receber
a mensagem
em algumas abordagens o receive não-bloqueante
é aquele que só recebe quando já existem
mensagens e fica bloqueado até completar a
recepção, se não retorna
Primitivas bloqueantes
O processo fica bloqueado durante a
transferência de mensagem
Melhor opção para envio de mensagens em
condições normais
Simples de entender
Simples de implementar
Performance para envio de mensagem
CPU fica ociosa durante a transmissão
Curso de Sistemas Operacionais Distribuídos O Modelo Cliente Servidor 73
Primitivas não-bloqueantes
Andrews
Uma primitiva síncrona é aquela em que o
processo que envia fica bloqueado até que o
receptor aceite a mensagem e
mande um ack. Qualquer outra
alternativa é considerada
assíncrona
preferida por projetistas de
linguagens de programação
Primitivas não-bufferizadas
O buffer para armazenar a mensagem deve ser
especificado pelo programador
Existem duas estratégias a serem empregadas no
caso de um send do cliente, sem um receive do
servidor:
discartar mensagens inesperadas
Primitivas bufferizadas
Existe um buffer para armazenar mensagens
inesperadas
A primitiva de bufferização mais empregada
define estruturas de dados chamadas mailbox
Rede
Primitivas não-bufferizadas
temporariamente mantendo mensagens
reduz a chance da mensagem ser descartada
introduz problema de gerenciamento e
armazenamento de mensagens inesperadas
Cliente Servidor
A
Kernel Kernel
Rede
Rede
Rede
3
Kernel Kernel
1. Request
2. Reply
3. Ack
Alternativas de projeto:
por nomes ASCII
Endereçamento por número de por processo obtidos de um name
máquina server
primitivas não- primitivas não-
Bloqueante primitivas bloqueantes bloqueantes com cópia bloqueantes por
interrupção
não-bufferizado, não-bufferizado,
Bufferização discartando temporariamente mailboxes
mensagens mantendo mensagens
Total de 81 combinações
Curso de Sistemas Operacionais Distribuídos O Modelo Cliente Servidor 88
Questões de Implementação
(a) (b)
REQ >
REQ > < ACK
< REP AYA >
Cliente Servidor Cliente Servidor
ACK > < IAA
< REP
ACK >
(c) (d)
Conclusões
O Modelo cliente-servidor utiliza um protocolo
simples e de fácil implementação
Por ser simples e sem conexão, o protocolo é
também eficiente
Várias alternativas de projeto para primitivas de
comunicação podem ser utilizadas
Todas as comunicações no modelo são construídas
através de primitivas de E/S
Revisão
Para que servem modelos de arquiteturas de
SDs?
O que é especificado?
defina modelo C/S
O que é? Para que serve?
Interface do servidor?
vantagens e desvantagens?