objetos distribuídos

Post on 13-Mar-2016

60 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

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

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? Referências, invocações de métodos, erros, ...

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

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

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

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

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

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

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

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

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 {...}

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 { ... }

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

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

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

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

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

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

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) { ... } }}

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; }

}

public class GraphicalObject implements Serializable{

…}

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?

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

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)

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

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?

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

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)

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!"; }

} }

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;

} }

top related