Objetos Distribuídos Nazareno Andrade. O Problema Orientação a objetos é um paradigma poderoso...

30
Objetos Distribuídos Nazareno Andrade

Transcript of Objetos Distribuídos Nazareno Andrade. O Problema Orientação a objetos é um paradigma poderoso...

Page 1: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

Objetos Distribuídos

Nazareno Andrade

Page 2: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

O Modelo

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

invocation invocationremote

invocationremote

locallocal

local

invocation

invocationA B

C

D

E

F

Page 4: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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

m2

m1

m3

Interface remota

A

C

L

Page 5: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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ãoRe-execução do método

Sim SimRetransmissão

do reply

Page 7: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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ãoRe-execução do método

No mínimo uma vez

Sim SimRetransmissão

do replyNo máximo

uma vez

Page 8: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Ref

Object2 refToObj2

Nome Ref

DrawingBd refToDrBd

Object2 redToObj2

Page 17: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

public class GraphicalObject implements Serializable{

…}

Page 22: Objetos Distribuídos Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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 Nazareno Andrade. O Problema  Orientação a objetos é um paradigma poderoso Modularidade, extensibilidade, manutenibilidade  Porque.

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;

} }