Processos, Threads e o Modelo Cliente/Servidor
Francisco Jos´e da Silva e Silva
Laborat´orio de Sistemas Distribu´ıdos (LSD) Departamento de Inform´atica / UFMA
http://www.lsd.deinf.ufma.br
29 de novembro de 2011
1 Threads em Sistemas Distribu´ıdos
2 Migra¸c˜ao de C´odigo
3 Modelo Cliente/Servidor
4 Distribui¸c˜ao Horizontal e Vertical do Modelo Cliente/Servidor
Threads em Sistemas Distribu´ıdos
Introdu¸c˜ao
Processos formam um importante bloco de constru¸c˜ao em sistemas
distribu´ıdos;
Defini¸c˜ao de Thread
Mecanismo que permite a um processo ter mais de um fluxo de controle;
Threads compartilham o mesmo espa¸co de endere¸camento.
Threads em Sistemas n˜ao Distribu´ıdos: Benef´ıcios
O processo inteiro n˜ao necessita ficar bloqueado ao realizar uma chamada bloqueante ao sistema;
Exemplo de uso: planilha de c´alculo
Pode-se explorar paralelismo em sistemas multiprocessados; Simplifica o desenvolvimento de aplica¸c˜oes inerentemente concorrentes;
Melhor desempenho para aplica¸c˜oes complexas que tradicionalmente
eram implementadas atrav´es de m´ultiplos processos comunicando-se
Threads em Sistemas Distribu´ıdos: Clientes multithreaded
Clientes multithreaded. Exemplo: Web Browsers:
Documento HTML consiste de um arquivo de texto e v´arios outros de
imagens, ´ıcones, etc...
Pode-se esconder a grande latˆencia na comunica¸c˜ao apresentando cada objeto assim que estiver dispon´ıvel: estabelecimento de m´ultiplas conex˜oes
Melhoria no desempenho geral pode ser obtido no caso de servidores Web replicados em v´arias m´aquinas.
Threads em Sistemas Distribu´ıdos: M´ultiplos RPCs
Considere um cliente que realiza diversos RPCs, cada um para uma thread diferente;
Ele deve esperar o retorno de cada resultado;
Alternativamente, poder-se-ia realizar as RPCs atrav´es de threads independentes;
Se as RPCs s˜ao destinadas a servidores diferentes, pode-se esperar um
Servidores multithreaded: Objetivos
Melhor desempenho:
Iniciar uma thread para tratar uma requisi¸c˜ao custa menos que iniciar um novo processo;
Servidores que possuem uma ´unica thread n˜ao s˜ao escal´aveis a sistemas multiprocessados;
Pode-se esconder a latˆencia da rede, reagindo a uma nova requisi¸c˜ao enquanto os resultados da anterior estiverem sendo entregues.
Melhor estrutura:
Muitos servidores demandam fortemente E/S. A utiliza¸c˜ao de chamadas bloqueantes simplifica a estrutura do c´odigo;
Programas multithreaded tendem a ser menores e mais f´aceis de entender, por possu´ırem um fluxo de controle simplificado.
Sincroniza¸c˜ao de Programas Concorrentes
Sem´aforos; Monitores.
Migra¸c˜ao de C´odigo
Carzaniga et al. define mobilidade de c´odigo como a capacidade de mudar
dinamicamente as liga¸c˜oes entre o c´odigo e a localiza¸c˜ao onde executa.
Migra¸c˜ao de C´odigo: Motiva¸c˜oes
Melhoria do desempenho global: processos podem ser movidos de m´aquinas muito carregadas para m´aquinas com cargas mais leves. Carga ´e usualmente expressa em termos do comprimento da fila de processos da CPU ou de sua utiliza¸c˜ao;
Diminui¸c˜ao da carga na rede: Exemplo: uma aplica¸c˜ao cliente que requeira muitas opera¸c˜oes em banco de dados ou valida¸c˜ao de formul´ario no cliente;
Explora¸c˜ao de processamento paralelo: Exemplo: busca de
informa¸c˜oes na Web atrav´es de v´arias instˆancias de um agente m´ovel;
Extens˜ao dinˆamica da funcionalidade de aplica¸c˜oes: Exemplo:
descoberta dinˆamica de recursos e vincula¸c˜ao do c´odigo cliente apenas quando for necess´ario o acesso ao servidor;
Migra¸c˜ao de C´odigo: Cuidados relacionados `a Seguran¸ca
Confiar cegamente em um c´odigo carregado dinamicamente nem
sempre ´e uma boa ideia...
Migra¸c˜ao de C´odigo: Necessidades
Para efetuar a migra¸c˜ao de um processo, algumas informa¸c˜oes de estado (tamb´em chamadas de contexto) devem ser salvas e transportadas para sua nova localiza¸c˜ao;
Fuggetta descreve que um processo consiste basicamente de trˆes
segmentos: segmento de c´odigo, segmento de recursos e segmento de
Alternativas para Migra¸c˜ao de C´odigo
Alternativas para Migra¸c˜ao de C´odigo
Migra¸c˜ao Forte: mecanismo que migre os trˆes segmentos e reinicia o
processo exatamente no mesmo estado e na mesma posi¸c˜ao de c´odigo
em que ele estava antes da migra¸c˜ao
Migra¸c˜ao Fraca: somente o segmento de c´odigo ´e transferido e talvez alguns dados de inicializa¸c˜ao. O programa transferido ´e sempre executado a partir de seu estado inicial;
Migra¸c˜ao ´e iniciada pelo emissor (proativa): a aplica¸c˜ao deixa o local onde est´a executando e migra para uma outra localidade na rede por iniciativa pr´opria (e.g. programas de busca em bases de dados na web);
Migra¸c˜ao iniciada pelo receptor (reativa): a iniciativa da
Migra¸c˜ao For¸cada
Expressa a habilidade do sistema em suportar a migra¸c˜ao de um processo
a qualquer momento, mediante a solicita¸c˜ao de uma entidade externa;
Etapas do processo de migra¸c˜ao
1 O fluxo de execu¸c˜ao ´e interrompido;
2 O estado da entidade a ser migrada ´e capturado;
3 O c´odigo e o estado da entidade migrada s˜ao transportados para a
m´aquina de destino;
4 O c´odigo e o estado da entidade migrada s˜ao restaurados; 5 A execu¸c˜ao ´e reiniciada.
Migra¸c˜ao de Recursos
1 Recurso compartilhado: ap´os o t´ermino do processo de migra¸c˜ao o
acesso ao recurso continua dispon´ıvel (e.g. uma impressora de rede);
2 Recurso j´a dispon´ıvel: Exemplo: uma aplica¸c˜ao gera uma s´erie de
arquivos de sa´ıda em uma unidade de fita. Ap´os a migra¸c˜ao, a nova m´aquina na qual a aplica¸c˜ao executa tamb´em tenha dispon´ıvel uma unidade de fita. A aplica¸c˜ao poder´a continuar a gerar os arquivos de sa´ıda no novo dispositivo;
3 Recurso referenciado: a referˆencia ao recurso utilizado ´e migrada
juntamente com o seu estado e seu c´odigo. Assim, ao chegar em seu
destino, ele deve tentar se reconectar atrav´es da rede ao recurso na
antiga m´aquina. Exemplo: uma base de dados;
4 Recurso despachado: o recurso dever´a ser migrado inteiramente
junto com o estado e o c´odigo da aplica¸c˜ao. Exemplo: arquivos utilizados pela aplica¸c˜ao.
Tipos de Recursos
Fixos: os recursos n˜ao podem ser migrados. Exemplo: hardware local;
Vinculados: os recursos podem, a princ´ıpio, serem migrados mas a um alto custo;
N˜ao vinculados: os recursos podem facilmente serem movidos junto
Vincula¸c˜ao Objeto-Recurso
Por identificador: o objeto requer uma instˆancia espec´ıfica do recurso. Exemplo: um banco de dados espec´ıfico;
Por valor: o objeto requer o valor de um recurso. Exemplo: entradas na cache;
Por tipo: o objeto requer somente que um dado tipo de objeto esteja dispon´ıvel. Exemplo: monitor colorido.
Migra¸c˜ao em Sistemas Heterogˆeneos
Principal problema:
A m´aquina alvo pode n˜ao ser adequada para execu¸c˜ao do c´odigo migrado;
O contexto do processo/thread ´e dependente do hardware local, sistema operacional e ambiente de execu¸c˜ao.
Solu¸c˜ao: utiliza¸c˜ao de uma m´aquina abstrata implementada em diferentes plataformas;
Solu¸c˜oes atuais:
Uso de linguagens interpretadas que executam em uma m´aquina virtual, como Java;
Uso de VMMs (Virtual Machine Monitors), o que permite a migra¸c˜ao completa do sistema operacional junto com as aplica¸c˜oes. Exemplo: substitui¸c˜ao de uma m´aquina em um cluster, um ambiente de computa¸c˜ao de longo tempo de execu¸c˜ao.
Introdu¸c˜ao ao Modelo Cliente/Servidor
Uma quest˜ao fundamental em sistemas distribu´ıdos ´e a defini¸c˜ao de como devemos organizar os processos;
Um modelo bastante popular organiza os processos em clientes que requisitam servi¸cos de servidores.
Comunica¸c˜ao Cliente Servidor
Atrav´es de um protocolo simples sem conex˜ao
Utilizado quando a rede ´e razoavelmente confi´avel, como a maioria das LANs;
Vantagem: eficiˆencia;
Desvantagem: dificuldades de tornar a aplica¸c˜ao resistente a falhas de transmiss˜ao;
Se o cliente n˜ao recebe resposta, ele n˜ao tem como detectar se a mensagem original foi perdida ou se isto ocorreu com a resposta; O cliente pode reenviar a requisi¸c˜ao;
Para requisi¸c˜oes como ”retorne o saldo da minha conta” isto n˜ao gera problemas mas para mensagens do tipo ”transfira 10.000,00 da minha conta” o reenvio da requisi¸c˜ao seria desastroso.
Atrav´es de protocolo confi´avel orientado a conex˜ao
Desvantagem: desempenho relativamente baixo; Funciona muito bem em WANs;
Exemplo CS: Arquivo de Cabe¸calho
Exemplo CS: um Cliente Simples
Camadas de uma Aplica¸c˜ao
Uma aplica¸c˜ao CS pode ser estruturada em trˆes n´ıveis:
1 Interface com o usu´ario
2 Processamento
3 Dados
Camada de Interface com o Usu´ario
Consiste dos programas que permitem a intera¸c˜ao dos usu´arios com a aplica¸c˜ao;
Pode ser muito simples, utilizando uma interface a caractere simples ou mais sofisticado utilizando interfaces gr´aficas;
Exemplo simples: interface de terminal onde o mainframe controla toda a intera¸c˜ao inclusive o monitor e teclado;
Camada de Processamento
Contˆem a funcionalidade principal da aplica¸c˜ao; Exemplo: uma ferramenta de busca na Internet;
Ela deve transformar a string que o usu´ario digitou em uma ou mais
consultas a um grande banco de dados e formatar os resultados
obtidos em p´aginas HTML a serem apresentadas para o usu´ario.
Camada de Dados
Na sua forma mais simples consiste de um sistema de arquivos mas ´e comum que sejam utilizados banco de dados;
Al´em de apenas armazenar dados pode tamb´em tamb´em tratar sua consistˆencia e realizar fun¸c˜oes como gerar uma notifica¸c˜ao quando uma dada condi¸c˜ao ocorrer;
Estas a¸c˜oes s˜ao muitas vezes implementadas atrav´es de stored procedures.
Um Segundo Exemplo
Considere um sistema de suporte `a decis˜ao para uma corretora de valores:
Uma camada frontal implementa a interface com o usu´ario;
Uma camada de dados armazena os dados financeiros;
Uma camada de processamento realiza a an´alise dos dados, o que
Arquiteturas Multi-divididas
A distin¸c˜ao entre os trˆes n´ıveis l´ogicos sugere v´arias possibilidades para a distribui¸c˜ao f´ısica de uma aplica¸c˜ao C/S;
A organiza¸c˜ao mais simples requer apenas dois tipos de m´aquinas:
1 Cliente: que executa os programas que compreendem a interface com o
usu´ario;
2 Servidor: que implementa as camadas de processamento e de dados.
Esta organiza¸c˜ao ´e conhecida como Cliente/Servidor em duas camadas;
No entanto, diversas outras arquiteturas podem ser utilizadas.
Alternativas de Organiza¸c˜ao Cliente/Servidor (a)
Na alternativa (a), executa-se no cliente s´o a parte da interface dependente do terminal;
Na alternativa (b), todo o software de interface com usu´ario executa no cliente;
Exemplo da alternativa (c): verifica¸c˜ao de consistˆencia do preenchimento de um formul´ario feito no cliente;
Na alternativa (d), a aplica¸c˜ao executa na m´aquina cliente, indo para o servidor somente as opera¸c˜oes sobre as base de dados. Exemplo: muitas aplica¸c˜oes banc´arias;
Na alternativa (e), o disco local no cliente mantˆem parte dos dados. Exemplo: browser web mantendo uma cache;
Recentemente tem-se evitado as alternativas (d) e (e) devido a problemas de gerenciamento e por tornar o sofware cliente dependente da plataforma subjacente do cliente;
Clientes gordos (abordagens (d) e (e));
Clientes magros (abordagens (a) a (c)): mais f´aceis de gerenciar.
Arquitetura em Trˆes Camadas
A divis˜ao vista anteriormente apresenta diversas possibilidades de distin¸c˜ao entre m´aquinas clientes e servidoras;
Arquitetura em Trˆes Camadas
Nesta arquitetura, programas que formam o n´ıvel de processamento residem em um servidor separado;
Um exemplo t´ıpico ´e o processamento de transa¸c˜oes, onde o monitor de transa¸c˜oes coordena as transa¸c˜oes em servidores de dados
possivelmente diferentes;
Outro exemplo ´e a organiza¸c˜ao usual de sites na Web, onde o servidor
Web age como ponto de entrada para um site, passando requisi¸c˜oes
para um servidor de aplica¸c˜ao no qual ocorre o processamento propriamente dito.
Servidores de Aplica¸c˜ao
S˜ao softwares que fornecem uma infraestrutura de servi¸cos para a execu¸c˜ao de aplica¸c˜oes distribu´ıdas;
S˜ao executados em servidores e s˜ao acessados pelos clientes atrav´es de uma conex˜ao de rede;
Vantagem: simplificam o desenvolvimento de aplica¸c˜oes atrav´es dos servi¸cos implementados, fazendo com que os desenvolvedores possam concentrar a maior parte do tempo na implementa¸c˜ao da l´ogica de neg´ocio;
Servi¸cos t´ıpicos: integra¸c˜ao com bancos de dados, seguran¸ca, garantia de disponibilidade, balanceamento de carga e tratamento de exce¸c˜oes; Exemplos: WebLogic Server (BEA), JBoss (Red Hat), WebSphere Application Server (IBM), JRun (Adobe), Apache Geronimo (Apache Software Foundation), Oracle OC4J (Oracle Corporation), Sun Java System Application Server (Sun Microsystems), Glassfish,
Distribui¸c˜ao Horizontal
A distribui¸c˜ao do modelo CS em m´ultiplas camadas vista anteriormente ´e conhecida por distribui¸c˜ao vertical;
O modelo CS pode tamb´em ser distribu´ıdo horizontalmente,
dividindo-se o cliente ou servidor em partes logicamente equivalentes; Um exemplo popular ´e um servidor Web replicado em v´arias m´aquinas de forma a prover um balanceamento da carga de trabalho.
Cluster de Servidores
Conjunto de m´aquinas conectadas por uma rede de alta largura e
baixa latˆencia onde cada m´aquina executa um ou mais servidores; Normalmente organizado logicamente em trˆes camadas:
1 Comutador: respons´avel pelo roteamento das requisi¸c˜oes de clientes; 2 Servidores de aplica¸c˜ao / computa¸c˜ao;
3 Sistema distribu´ıdo de arquivos / banco de dados.
Cluster de Servidores
Logical switch (possibly multiple)
Application/compute servers Distributed file/database
system
Client requests
Dispatched request
Comutadores de Camada de Transporte
O comutador aceita requisi¸c˜oes de conex˜ao TCP;
Ele identifica o melhor servidor para tratar a requisi¸c˜ao e repassa o pacote a ele;
O servidor enviar´a a resposta ao cliente requisitante, mas insere o endere¸co IP do comutador como endere¸co fonte no cabe¸calho do pacote IP, realizando uma falsifica¸c˜ao (spoofing ).
Comutadores de Camada de Transporte
Switch Client
Server
Server Request (handed off)Request
Response Logically a
Quest˜oes de Projeto de Aplica¸c˜oes
Servidoras
Organiza¸c˜ao de Servidores
Servidor interativo: o pr´oprio servidor manipula a requisi¸c˜ao e, se necess´ario, retorna uma resposta ao cliente;
Vincula¸c˜ao Cliente-Servidor
Atrav´es de portas conhecidas designadas pela Autoridade para
Atribui¸c˜ao de N´umeros na Internet (Iana). Ex: FTP-21, HTTP-80
Atrav´es de um daemon que registra os servidores em execu¸c˜ao; Atrav´es de um super-servidor, que escuta em v´arias portas e repassa a requisi¸c˜ao a um servidor espec´ıfico.
Interrup¸c˜ao do Servidor
Exemplo: usu´ario deseja interromper a transferˆencia de um enorme arquivo para o servidor FTP;
Uma abordagem ´e o usu´ario sair abruptamente da aplica¸c˜ao cliente, o que automaticamente interromper´a a conex˜ao com o servidor;
O servidor encerrar´a a conex˜ao antiga, entendendo que o cliente falhou;
Esta pr´atica ´e muito adotada na Internet atual...
Outra alternativa ´e permitir o envio de dados fora da banda; Neste caso o servidor pode escutar em uma porta de controle separada da qual passam os dados normais.
Servidores Com e Sem Estado
1 Sem Manter Estado:
N˜ao ´e mantida nenhuma informa¸c˜ao a respeito dos clientes e suas requisi¸c˜oes;
Exemplo: um servidor Web tipicamente n˜ao armazena estado. Ap´os a requisi¸c˜ao ser processada, o servidor Web esquece completamente do cliente;
Cada requisi¸c˜ao deve ser auto-contida; F´acil recupera¸c˜ao em caso de falha.
2 Mantendo Estado:
O servidor mantˆem informa¸c˜oes persistentes sobre seus clientes; Exemplo: um servidor de arquivo que sabe quais clientes possuem quais arquivos abertos;
Normalmente leva a um melhor desempenho na execu¸c˜ao das opera¸c˜oes disponibilizadas;