objetos distribuídos

30
Objetos Distribuídos Nazareno Andrade

Upload: castor-barron

Post on 13-Mar-2016

60 views

Category:

Documents


6 download

DESCRIPTION

Objetos Distribuídos. Nazareno Andrade. O Problema. Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade Porque distribuir os objetos: Localidade dos objetos Tolerância a falhas Performance Como estender o modelo OO para sistemas distribuídos? - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Objetos Distribuídos

Objetos Distribuídos

Nazareno Andrade

Page 2: Objetos Distribuídos

O Problema

Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade

Porque distribuir os objetos: Localidade dos objetos Tolerância a falhas Performance

Como estender o modelo OO para sistemas distribuídos? Referências, invocações de métodos, erros, ...

Page 3: Objetos Distribuídos

O Modelo

Um Objeto Remoto é aquele que pode receber uma invocação remota (RMI) Referências remotas Interfaces remotas

invocation invocationremote

invocationremote

locallocal

localinvocation

invocationA B

C

D

E

F

Page 4: Objetos Distribuídos

Referências e Interfaces Remotas

Referências remotas Identificador único para um

objeto no sistema distribuído

Transparência de localidade para o cliente

Interfaces remotas Definem os métodos de um

objeto que podem receber invocações remotas

Linguagem de definição de interface (IDL)

m2

m1

m2m1

m3

Interface remota

A

C

L

Page 5: Objetos Distribuídos

Semântica de Invocações remotas

Invocações locais são executadas exatamente uma vez

Isso não é possível em Objetos Distribuídos Falhas

Outras semânticas: talvez, pelo menos uma vez, no máximo uma vez

Page 6: Objetos Distribuídos

Mais sobre semânticas

Mecanismo de tolerância a falhas

SemânticaRetransmissão

de requestFiltro de

duplicatas

Re-execução do método ou retransmissão

do reply

Não --- ---

Sim Não Re-execução do método

Sim Sim Retransmissão do reply

Page 7: Objetos Distribuídos

Mais sobre semânticas

Mecanismo de tolerância a falhas

SemânticaRetransmissão

de requestFiltro de

duplicatas

Re-execução do método ou retransmissão

do reply

Não --- --- Talvez

Sim Não Re-execução do método

No mínimo uma vez

Sim Sim Retransmissão do reply

No máximo uma vez

Page 8: Objetos Distribuídos

RMI e transparência

100% de transparência é impossível Falhas de comunicação RMIs possuem exceções intrínsecas

Transparência pode não ser desejada Explorar diferentes semânticas Cancelamento de requisições

Page 9: Objetos Distribuídos

Um exemplo: Quadro negro distribuído

Clientes compartilham um quadro negro Todos podem adicionar e modificar figuras Todos se mantém atualizados via polling

DrawingBoard, Shape e GraphicalObject

DrBd

shapeshape

Cliente

getState, setState

createShape, getAllShapes

Page 10: Objetos Distribuídos

Tecnologias

Java RMI Java apenas Integração com a linguagem

.Net remoting Solução proprietária da Microsoft Integrada com a linguagem

CORBA Independente de linguagem Diferentes implementações

Page 11: Objetos Distribuídos

Exemplo: Java RMIimport java.rmi.*;

public interface DrawingBoard extends Remote {Shape createShape(GraphicalObject g) throws RemoteException;

List getAllShapes() throws RemoteException;}

public interface Shape extends Remote {GraphicalObject getState() throws RemoteException;

void setState(GraphicalObject g) throws RemoteException}

public class DrawingBoardServer extends UnicastRemoteObject implements DrawingBoard {...}

Page 12: Objetos Distribuídos

Exemplo: CORBA

interface DrawingBoard {Shape createShape(in GraphicalObject g);All getAllShapes();

}

Typedef sequence<Shape, 100> All;

interface Shape {GraphicalObject getState();void setState(in GraphicalObject g)

}

struct GraphicalObject { ... }

Page 13: Objetos Distribuídos

Serialização x Referência Remota

Objetos não-remotos são passados por cópia

Objetos remotos têm uma referência remota passada

shape

ClienteDrBd

getAllShapes

referência remota

GraphicalObject

setState

cópia serializada

Ref remotapara shape

Page 14: Objetos Distribuídos

Até agora...

Porque Objetos Distribuídos Conceitos Básicos Tecnologia Exemplo

Arquitetura de um sistema de Objetos Distribuídos

Limitações e alternativas Conclusões

Page 15: Objetos Distribuídos

Request

Reply

cliente servidor

CS

Módulo decomunicação

Módulo decomunicação

Módulo de Ref. remota

Módulo de Ref. remota

Skeleton eDispatcher da

classe de B

Arquitetura de um Sistema de Objetos Distribuídos

Proxy p/ B

B

• Implementa o protocolo de reply response

Skeleton:• Implementa métodos da interface remota• Desserializa requests e serializa replysDispatcher:

• Recebe msgs do módulo de comunicação e invoca o skeleton apropriado

• Cria referências remotas e locais envolvidas no RMI

• Implementa interface remota • Torna o RMI transparente• Serializa requests e desserializa replys

Page 16: Objetos Distribuídos

Binder

Objetos precisam descobrir referências remotas

O binder mapeia nomes para referências remotas bind(), rebind(), unbind()

O binder precisa rodar em um nome bem conhecido

CORBA Naming Service e RMIregistry

Binder

C

DrBd

bind

lookup

Proxy

Nome RefObject2 refToObj2Nome RefDrawingBd refToDrBdObject2 redToObj2

Page 17: Objetos Distribuídos

Um exemplo funcional, clientepublic class Client {

public void main(String args[]){DrawingBoard db = null;try{// o servidor se registrou com WELLKNOWN_NAMEdb = (DrawingBoard) Naming.lookup(WELLKNOWN_NAME);

}catch(Exception e){// Esta exceção pode ser Remote, Malformed ou // NotBoundExceptionSystem.err.println(“Could not lookup server. Reason: ” + e.getMessage());System.exit(1);}

…//continua

Page 18: Objetos Distribuídos

Exemplo funcional, cliente…

// ainda dentro do main()try{

List allShapes = db.getAllShapes();Iterator it = allShapes.iterator();while(it.hasNext()){

Shape s = (Shape) it.next();display(s.getState());

}}catch(RemoteException e){

System.err.println(“comm. error:” + e.getMessage());

}} // main

} // class

Page 19: Objetos Distribuídos

public class DrawingBoardServer {public static void main(String args[]){

System.setSecurityManager(new RMISecurityManager());

try{

DrawingBoard db = new DrawingBoard(); Naming.rebind(“Drawing Board XPTO", db);

System.out.println(“DB server ready");

}catch(Exception e) { ... } }}

Page 20: Objetos Distribuídos

public class DrawingBoardImpl extends UnicastRemoteObject implements DrawingBoard{

private List<Shape> theList;

public Shape newShape(GraphicalObject g) throws RemoteException{

version++; Shape s = new ShapeImpl(g); theList.addElement(s); return s; }

public Vector getAllShapes()throws RemoteException{ return theList; }

}

Page 21: Objetos Distribuídos

public class GraphicalObject implements Serializable{

…}

Page 22: Objetos Distribuídos

Mais questões práticas

E se queremos adicionar novas classes que implementam Shape no sistema?

Como os objetos não-remotos são passados?

E se queremos adicionar novas classes que extendem GraphicalObject? De onde os clientes obterão o código? E se o código não for em apenas uma

linguagem?

Page 23: Objetos Distribuídos

Outras questões

Garbage collection distribuído Coordenação entre cliente e servidor, detecção

de falhas Uma alternativa são leases

Threads no servidor Multithreading precisa ser tratado pelo

programador

Activation service Redução do custo de manter serviços rodando

Page 24: Objetos Distribuídos

Limitações de Objetos Distribuídos

Invocações de métodos são síncronas Escalabilidade Conexão intermitente

Componentes são fortemente acoplados Extensibilidade

Alternativas: RMI assíncrono (conexão intermitente) Sistemas baseados em eventos

(escalabilidade, extensibilidade) Arquiteturas orientadas a serviços (todos os

pontos)

Page 25: Objetos Distribuídos

RMI assíncrono

A partir de CORBA 2.3 Implementado no lado cliente

Callback Cliente informa objeto que receberá

resposta Polling

Cliente recebe um handle para requisitar resposta mais tarde

Page 26: Objetos Distribuídos

RMI vs. Mensagens

RMI é uma boa idéia para um cliente-servidor simples?

E em um sistema de transferência de arquivos?

E em um sistema onde posso ter milhões de clientes?

E quando quero desempenho? E quando quero desenvolver rápido?

Page 27: Objetos Distribuídos

Sumário

Objetos distribuídos oferecem abstrações poderosas para o programador

Transparência total é impossível Falhas

O programador pode ou deve lidar com outros serviços Ex.: descoberta e ativação

Limitações do paradigma e alternativas

Page 28: Objetos Distribuídos

Para mais Sobre objetos distribuídos

Distributed Systems Concepts and Design, Coulouris, Dollimore e Kindberg

Estudos de caso com Java RMI e Corba Mais sobre Sistemas baseados em eventos

Objetos Distribuídos x Serviços Web Services are not Distributed Objects, Vogel,

IEEE Computing ou no blog dele

.Net Remoting .Net Remoting, Strawmyer

(http://www.developer.com/net/cplus/article.php/1479761)

Page 29: Objetos Distribuídos

Exemplo .Net Remoting: 1

using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp;

namespace CodeGuru.Remoting { public class SampleObject : MarshalByRefObject{

public SampleObject() { } public string HelloWorld() {

return "Hello World!"; }

} }

Page 30: Objetos Distribuídos

Exemplo .Net Remoting: 2

public class SampleServer { public static int Main(string [] args) {

TcpChannel channel = new TcpChannel(8080); ChannelServices.RegisterChannel(channel); RemotingConfiguration.RegisterWellKnownServiceType( typeof(SampleObject), "HelloWorld",

WellKnownObjectMode.SingleCall ); System.Console.WriteLine("Press the enter key to exit...");

System.Console.ReadLine(); return 0;

} }