Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente)...

33
Chamada Remota de Procedimento (RPC) cont…

Transcript of Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente)...

Page 1: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

Chamada Remota de Procedimento (RPC) cont…

Page 2: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

semântica de chamadas

•  pelo menos uma vez •  no máximo uma vez •  exatamente uma vez

•  relação com protocolo subjacente •  falhas e reinicializações de servidores

–  funções idempotentes

Page 3: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

binding

•  amarração entre cliente e servidor reedita problema de localização de destinatário –  solução portmapper no Sun RPC

•  em geral: chamada a servidor que detém: –  nome –  localização (IP, porta) –  estado

•  e se… –  nenhum servidor for localizado –  vários servidores forem localizados

Page 4: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

críticas

•  sincronismo •  modelo um a um •  dificuldades de tratamento de falhas

•  dinamismo

Page 5: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

sincronismo

•  processo que faz a chamada permanece bloqueado –  falta de interatividade local –  desperdício de uso da CPU

•  processamento •  outras operações de comunicação

Page 6: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

RPC e multithreading (cliente)

•  combinação de RPC com multithreading –  sobreposição de computação

e comunicação –  disparo de várias chamadas

•  trocas de contexto preemptivas –  custo –  necessidade de sincronização

A1 B A2 C

Page 7: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

alternativas

•  cliente pode disparar threads apenas no momento de fazer chamadas remotas

•  uso de mecanismos como co-rotinas •  chamadas assíncronas

Page 8: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

tratamento de chamadas

•  concorrência no servidor B S A

como tratar???

Page 9: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

concorrência no servidor

•  opções análogas às vistas para servidores em geral

Page 10: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

RPC assíncrona

•  controle retorna imediatamente foo(a,b);

•  mas como tratar retorno? –  não tratar (funções oneway) –  handler para sincronização posterior (futuros) –  chamadas com callbacks

Page 11: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

futuros

•  promessas, chamadas adiadas, ... •  chamada retorna valor que pode ser usado

para sincronização ou consulta: fut = foo (a, b) ...

if rpc.isReady(fut) ... ou ... rpc.waitFor(fut)

Page 12: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

futuros

•  implementações em muitas linguagens/bibs •  ex:

% declaration - this is a comment statement objtype = promise returns (type) signals (...) % stream call operation objtype$operation_name(x, ...) % claim operation y: type = objtype$claim(x)

B. Liskov and Shrira, "Promises: Linguistic Support for Efficient Asynchronous Procedure Calls in Distributed Systems", in Proc. of the SIGPLAN'88 Conference on Programming Language Design and Implementation, Atlanta, Georgia, June 22-24, 1988, pp. 260-267.

Page 13: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

RPC assíncrona - callbacks

•  função de callback pode ser chamada qdo chamada se completa –  aderência ao modelo de programação

function funcb(v) globalVal = v end obtemNovoVal(args, funcb);

Page 14: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

programa como máquina de estado

function collect(val) acc = acc + val repl = repl + 1 if (repl==expected) then print ("Current Value: ", acc/repl) end end function askvals (peers) repl = 0; expected = 0; acc = 0 for p in pairs (peers) do expected = expected + 1 p:currValue{callback=collect} end end

Page 15: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

problema de perda de locais

Page 16: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

exemplo luarpc

function request(peers) local acc, repl = 0, 0 local expected = table.getn(peers) function avrg (val) repl = repl+1 acc = acc + val if (repl==expected) then print ("Current Value: ", acc/repl) end end for _,p in ipairs (peers) do rpc.async(p, "currValue", avrg)() end end

CLOSURE

Page 17: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

comunicação um a um

•  como pensar em canais ou mailboxes onde processos espalhados por várias máquinas podem recolher chamadas?

•  no caso de tolerância a falhas: às vezes desejável que os diversos processos recebam a mesma chamada –  replicação –  comunicação em grupo

Page 18: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

tratamento de falhas

•  como retornar informações sobre falhas no modelo de chamada remota? –  callbacks –  exceções

Page 19: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

dinamismo…

•  modelo apresentado exige conhecimento sobre interfaces antes da geração do programa cliente –  geração estática de stubs –  suficiente para maior parte das situações

•  adaptação dinâmica –  servidores com diferentes otimizações

•  cache –  otimização dependendo do estilo de uso do cliente

•  chamada dentro de loop –  descoberta dinâmica de servidores

•  relação com serviços de binding mais complexos

Page 20: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

objetos distribuídos

•  invocação remota de métodos –  objetos como unidades localizadas, argumentos, etc –  algumas facilidades para lidar com críticas anteriores

or1.mx

processo servidor

or2.my

o.main()

ol1.ma ()

ol1.mb () ol2.mn ()

ol2.mm ()

processo cliente

or1.mx(ol2) or1.mz

servant

callbacks ou upcalls

Page 21: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

sistemas de objetos distribuídos

•  sistemas acadêmicos –  Emerald, ORCA, …

•  sistemas largamente difundidos

–  CORBA - interoperabilidade –  Java RMI - integração com linguagem

•  JINI •  J2EE

Page 22: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

RMI

•  utilização de características da linguagem •  carga dinâmica (download) de stubs e de

implementações de argumentos –  interfaces x classes

•  interface Remote define propriedades comuns a todos os objetos remotos –  usada nas declarações do cliente –  exceção RemoteException

•  classe UnicastRemoteObject implementa funcionalidade básica de objeto remoto –  estendida pela implementação do objeto servidor

Page 23: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

Java RMI

•  stub implementa “falsa” chamada a método remoto –  empacota argumentos, realiza chamada, e retorna

resultados

Stub

RMI Client RMI Server

skeleton

return

call

Page 24: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

arquitetura RMI

RMI Server

skeleton

stub

RMI Client

Registry

bind

lookupreturn call

Local Machine

Remote Machine

•  servidor se registra em registry

•  cliente contacta registry com lookup

•  cliente pode baixar código de stub dinamicamente!

Localização: Product p = (Product) Naming.lookup(“rmi://fulano.com//sicrano”);

Page 25: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

servidor RMI

/* SampleServer.java */ import java.rmi.*; public interface SampleServer extends Remote { public int sum(int a,int b) throws RemoteException; }

/* SampleServerImpl.java */ ... public class SampleServerImpl extends

UnicastRemoteObject implements SampleServer { SampleServerImpl() throws RemoteException { super(); }

Page 26: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

cliente RMI

package client; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; ... public class ComputePi { public static void main(String args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "Compute"; Registry registry = LocateRegistry.getRegistry(args[0]); Compute comp = (Compute) registry.lookup(name); Pi task = new Pi(Integer.parseInt(args[1])); BigDecimal pi = comp.executeTask(task); System.out.println(pi); } catch (Exception e) { System.err.println("ComputePi exception:"); e.printStackTrace(); } } }

Page 27: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

propostas de extensão

•  ProActive: extensões para paralelismo –  sincronismo inerente a chamadas remotas

bloqueio

–  ausência de operações coletivas –  outras críticas:

•  obrigações com extensão de classe Remota e com sinalização de exceções

•  !!!!

Page 28: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

ProActive

•  exploração de modelo de programação assíncrono –  transparência de localização de objetos –  futuros e wait on necesssity

•  comunicação coletiva –  extensão de chamada de método

•  alocação de objetos em nós remotos •  integração com bibliotecas para grades

Baude F., Baduel L., Caromel D., Contes A., Huet F., Morel M. and Quilici R.,in "GRID COMPUTING: Software Environments and Tools”, Springer Verlag, January 2006.

Page 29: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

Java//

•  biblioteca para programação multithread e distribuída •  uso de reflexão computacional para interceptar

chamadas

Page 30: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

sincronização inter objetos

•  objetos ativos modelam concorrência e distribuição

•  chamadas a objetos ativos são sempre assíncronas

•  chamada retorna imediatamente um valor futuro –  instância de subclasse do retorno declarado –  tem todos os métodos do retorno esperado

•  quando algum método é chamado sobre esse valor retornado é que ocorre a sincronização –  wait-by-necessity

Page 31: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

futuros

Page 32: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

futuros como obj de 1a classe

•  objetos retornados por operações assíncronas podem ser passados como argumentos em novas operações

•  otimização da transferência de dados v1 = a.foo (...); // chamada assíncrona v2 = a.bar(...); // chamada assíncrona ... v1.f(v2)

Page 33: Chamada Remota de Procedimento (RPC) cont…noemi/sd-09/aula5.pdf · RPC e multithreading (cliente) • combinação de RPC com multithreading – sobreposição de computação e

CORBA

•  mais do que o modelo de chamadas remotas –  middleware

⇒ material introdutório do curso de componentes