Sistemas Distribuídos - Comunicação e Coordenação Clientes...

Post on 20-Aug-2020

1 views 0 download

Transcript of Sistemas Distribuídos - Comunicação e Coordenação Clientes...

Sistemas DistribuıdosComunicacao e Coordenacao – Clientes e Servidores

marco de 2017

Sistemas Distribuıdos

Comunicacao entre Processos Distribuıdos

troca de mensagens exige coordenacao

receive?!?

...

...

...

...

send ......

Sistemas Distribuıdos

Padrao cliente-servidor

servidor sempre a espera de comunicacao

em programas sequenciais: bloqueado

cliente sempre inicia a comunicacao

assimetria: cliente deve saber localizar servidorenvio de requisicao associado a um ou mais recebimentos

pseudo-servidor

while (true) do {

aguarda requisic~ao de qualquer cliente C

processa requisic~ao

responde a cliente C

}

Sistemas Distribuıdos

Padrao cliente-servidor

nomenclatura fazsentido dentro deuma interacao

cs

c

c

ss

padrao de comunicacao mais difundido

servidores classicos (BD, autenticacao, hora certa, ...)

uso generico do padrao

Sistemas Distribuıdos

Arquiteturas de n camadas

hierarquia de clientes e servidores

bem difundidas em aplicacoes web

browserservidor web

base de dados

serv. dearquivos

Sistemas Distribuıdos

Modelos de servidores

servidores iterativos: processamento (completo) de um pedidopor vez

servidores concorrentes: simultaneo a varios clientesmultitarefa

multiprocessomultithread

monotarefa

atendimento a varios clientes “misturado” no codigousado em sistemas (1) com interacao entre clientes e (2) comrecursos limitadosrelacao com multi-tarefa cooperativo

Sistemas Distribuıdos

Servidores iterativos

em programas sequenciais: estrutura do “pseudo-servidor” jagarante um atendimento por vez

while (true) do {

aguarda requisic~ao de qualquer cliente C

processa requisic~ao

responde a cliente C

}

Sistemas Distribuıdos

Servidores iterativos – Lua e luasocket

-- load namespace

local socket = require("socket")

-- create a TCP socket and bind it to the local host, at any port

local server = assert(socket.bind("*", 0))

-- find out which port the OS chose for us

local ip, port = server:getsockname()

-- print a message informing what’s up

print("Please telnet to localhost on port " .. port)

print("After connecting, you have 10s to enter a line to be echoed")

-- loop forever waiting for clients

while 1 do

-- wait for a connection from any client

local client = server:accept()

-- make sure we don’t block waiting for this client’s line

client:settimeout(10)

-- receive the line

local line, err = client:receive()

-- if there was no error, send it back to the client

if not err then client:send(line .. "\n") end

-- done with client, close the object

client:close()

end

Sistemas Distribuıdos

Servidores iterativos com eventos

como postergar tratamento de novo cliente?1 servidor so volta a tratar eventos depois de tratamento do

cliente anterior totalmente finalizado2 servidor registra estado ocupado e pode responder a outros

clientes comunicando estado

Sistemas Distribuıdos

Servidores concorrentes multitarefa

threads x processos

escalabilidade

Sistemas Distribuıdos

Servidores multitarefa sob demanda

disparo de tarefas sob demanda, isto e, quando chega umarequisicao

uma tarefa para interacao com cada cliente

elasticidade no atendimento

sobrecarga de criacao e destruicao de tarefas

Sistemas Distribuıdos

Sockets: multitarefa sob demanda

sistema operacional sistema operacional

sistema operacional

cliente1servidor

porta

socket

cliente2

Sistemas Distribuıdos

Servidores multitarefa com pre-alocacao

unidades de execucao pre-existentes (pool de tarefas) prontaspara atender requisicoes

modelo iterativo em cada tarefaoutras estruturas mais complexas

atendimento imediato se tarefas disponıveis

maior dificuldade no ajuste do tamanho do pool

Sistemas Distribuıdos

Sockets: multitarefa com pre-alocacao

Sistemas Distribuıdos

Exemplo Andrews: servidor de arquivos

Sistemas Distribuıdos

Arquiteturas com pools de threads

uso de tarefas no nıvel de aplicacao e threads de sistemaoperacional

escalonamento cooperativo

threads SO

tarefas aplicação

Sistemas Distribuıdos

Servidores Monotarefa

integracao natural com modelo de eventos

“proxima interacao pode ser com qualquer um”

caso simples: atendimento completamente contido em umtratador de evento

event <Request | clid, rqid, rq>

res = handle (rq);

trigger <Reply | clid, rqid, res>

end

caso geral: atendimento requer “dialogo” entre cliente eservidor

estado do dialogo deve ser mantido em variaveis globais

Sistemas Distribuıdos

Sockets: monotarefa

Sistemas Distribuıdos

Servidores monotarefas — exemplo (bobo) com 2 clientesde uso de select

local client1 = server:accept()

client1:settimeout(0); client1:setoption(’tcp-nodelay’, true)

local client2 = server:accept()

client2:settimeout(0); client2:setoption(’tcp-nodelay’, true)

local obs = {}

table.insert(obs,client1); table.insert(obs,client2)

while 1 do

local clst1, clst2, err = socket.select(obs, {}, 1)

for _, clt in ipairs(clst1) do

local line, err = clt:receive(’*l’))

if line then

clt:send(line)

else

print("ERRO: ".. err)

end

end

end

Sistemas Distribuıdos

Servidores com e sem estado

servidor pode manter infos sobre clientes:

dentro de uma “requisicao”entre requisicoes

simplicidade X desempenho

Sistemas Distribuıdos

Clientes magros e gordos

controle da quantidade de processamento realizada porclientes e servidores

condicoes de processamento e de comunicacaovariacao dinamica de comportamento

Sistemas Distribuıdos