Sistemas Distribuídos
Controle do Ciclo de Vida de
Objetos
Especialização em Redes de
Computadores
Prof. Fábio M. Costa
Instituto de Informática - UFG
Visão Geral
• Ciclo de vida de objetos simples
– Criação de objetos distribuídos
– Migração de objetos distribuídos
– “Deleção” de objetos distribuídos
• Aspectos avançados:
– Objetos compostos
– Ciclo de vida de objetos compostos
• Visão do projetista do cliente
• Visão do projetista do servidor
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
2
Ciclo de Vida de Objetos Simples
Motivação
• Ciclo de vida de objetos distribuídos é diferente do
ciclo de vida de objetos locais
• Criação
– Onde criar o objeto?
• Migração
– Para onde copiar/mover um objeto?
– Como resolver a heterogeneidade na representação dos
dados e código do objeto?
• Deleção:
– Coleta de lixo não funciona
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
4
O Ciclo de Vida
copy
move
available
create
Original: Wolfgang Emmerich, 2000
delete
unavailable
Prof. Fábio M. Costa - Instituto de Informática / UFG
5
Criação: Visão do Programador
do Cliente
• Clientes podem desejar criar objetos em máquinas
remotas
• Isto pode ser feito através de fábricas
• Fábrica: um objeto que cria outros objetos
• Fábrica abstrata: oculta detalhes de criação
• Máquinas remotas (e suas respectivas fábricas)
devem ser identificadas de maneira transparente
de localização
• Isto é feito através de “buscadores de fábricas”
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
6
Fábricas
LeagueMgmnt
AbstractFactory
CreateTeam()
CreatePlayer()
CricketFactory
CreateTeam()
CreatePlayer()
Team
SoccerFactory
CreateTeam()
CreatePlayer()
SoccerTeam
Player
SoccerPlayer
Original: Wolfgang Emmerich, 2000
CricketTeam
CricketPlayer
Prof. Fábio M. Costa - Instituto de Informática / UFG
7
Fábricas para Objetos
Distribuídos
• Exemplo: Administração de Futebol
– Times e Jogadores podem precisar ser criados
em máquinas diferentes
– Deve-se instalar uma Fábrica em cada máquina
– Requisitar a criação de objetos na forma de uma
requisição de objetos normal (à Fábrica)
– Objetos são criados de maneira transparente de
localização
• Problema: Como encontrar fábricas?
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
8
Buscadores de Fábricas
• Localização não deve ser transparente para
todos!
• Administradores devem ser capazes de
decidir onde criar novos objetos
• Políticas são implementadas usando objetos
do tipo FactoryFinder (buscador)
• Um FactoryFinder exporta uma operação
find_factories que retorna uma fábrica
apropriada
– portanto implementando a política de localização
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
9
Criando Objetos Distribuídos
:Client
:Factory
Finder
f:Team
Factory
f=find_factories(“Team”)
newteam=create_team()
newteam:
Team
• O novo objeto time será criado na máquina que
hospeda a fábrica TeamFactory f
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
10
Criação: Visão do Programador
do Servidor
• O programador do servidor deve implementar as
fábricas
• Fábricas precisam registrar os objetos criados
através da interface do middleware
– CORBA ORB Interface
– Java RMI/Registry
• Fábricas genéricas: para qualquer tipo de objeto
• Fábricas específicas para cada tipo de objeto:
– Determinam a política de ativação de objetos
– Pode englobar uma fábrica genérica
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
11
Uso de Fábricas Genéricas
:Client
f:Team
Factory
:Generic
Factory
create_team(“BvB”)
t=create_object(“Team”)
t:Team
set_name(“BvB”)
• Uma fábrica genérica cria objetos “brutos” e então
uma fábrica específica realiza as inicializações
necessárias
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
12
Criação: Visão do Administrador
• Administradores precisam prover buscadores de
fábricas que implementam as políticas de criação
definidas
• Buscadores de fábricas precisam ser localizáveis
através de
– Serviço de nomes
– Trading
• As implementações de fábricas e buscadores de
fábricas precisam ser registradas no middleware
– Repositório de implementações de CORBA
– Java/RMI Registry
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
13
Migração
• Objetos podem ter que ser movidos ou
copiados para outras máquinas devido a
– Descontinuação de máquinas
– Balanceamento de carga
• Operações de cópia e movimentação de
objetos fazem parte do serviço de migração
• Diferentes perspectivas:
– Programador do cliente, do servidor e
administrador
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
14
Migração: Visão do Programador
do Cliente
:Client
:Naming
Context
ff:Factory
Finder
:Player
ff=resolve(“Hosts”,”BvB”)
move(ff)
• Move objeto jogador (player) para a nova
localização, a ser decidida pelo objeto
FactoryFinder ff
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
15
Exemplo: Interface de Migração
de CORBA
module CosLifeCycle{
interface LifeCycleObject {
LifeCycleObject copy(in FactoryFinder there,
in Criteria the_criteria)
raises(...);
void move(in FactoryFinder there,
in Criteria the_criteria)
raises(...);
...
};
• Objetos migráveis precisam ser sub-tipos da
interface LifeCycleObject
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
16
Movendo Objetos: Visão do
Programador de Servidor
p:Player
move(ff)
ff:Factory
Finder
f:Player
Factory
np:
:Object
Player Adapter
f=find_factories(crit)
np=create_player()
transfer_values(...)
transfer_obj_ref(p)
• Heterogeneidade de dados é resolvida durante a
transferência de valores dos atributos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
17
Cópia: Visão do Programador de
Servidor
p:Player
copy(ff)
:ff:Factory
Finder
f:Player
Factory
np:
Player
f=find_factories(crit)
np=create_player()
transfer_values(...)
• Em essência, uma operação de movimentação
simplificada
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
18
Migração: Visão do
Administrador
• Operações de migração são freqüentemente
iniciadas por administradores
• Requisição de operações de cópia / movimentação
feita através de alguma ferramenta de
administração do sistema
• O administrador deve assumir as mesmas
responsabilidades da criação de objetos:
– Prover um buscador de fábrica
– Tornar o buscador localizável
– Registrar as fábricas e buscadores junto ao middleware
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
19
Migração: Uma Avaliação da
Transparência
• Criação de objetos transparente de localização:
através dos buscadores de fábricas
• Migração transparente para o programador do
cliente
• Migração não transparente para o programador do
servidor, dada a necessidade de:
– Herdar da interface LifeCycleObject
– Implementar as operações copy / move
• Transparência de replicação não é contemplada
pelos serviços de controle de ciclo de vida
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
20
Deleção de Objetos:
Integridade Referencial
• Integridade referencial: garantia de que
referências de objetos permanecem válidas
• Em particular, objetos servidores não serão
deletados enquanto algum cliente possuir
referências para os mesmos
• Quase impossível garantir completa
integridade referencial para objetos
distribuídos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
21
Deleção: Visão do Programador
do Cliente
• Deleção implícita
• Deleção explícita
– Realizada através de
coleta de lixo quando o
objeto não é mais
referenciado
– Mais cara devido à
contagem de refs.
– Não pode ser usada se
contagem de refs. for
impossível
– Garante integridade
referencial até certo ponto
Original: Wolfgang Emmerich, 2000
– Deleção é requisitada
por algum cliente ao
assumir que o objeto
ficou obsoleto
– Sem o overhead de
contagem de refs.
– Pode ser usado quando
contagem de refs. não
puder ser realizada
– Sem garantias de
integridade referencial
Prof. Fábio M. Costa - Instituto de Informática / UFG
22
Deleção: Interfaces CORBA
module CosLifeCycle{
exception NotRemovable { string reason; };
interface LifeCycleObject {
...
void remove() raises {NotRemovable};
}
...
};
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
23
Deleção: Visão do Programador
do Cliente
• Deleção Explícita
:Client
t:
Team
remove()
• Deleção Implícita
:Garbage
Collector
t:
Team
remove()
• Deleção explícita não é transparente para o
programador do cliente!
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
24
Deleção: Visão do Programador
do Servidor
• O programador do servidor precisa
determinar como deletar um objeto
– Liberar os recursos usados pelo objeto
– Manter a integridade de objetos relacionados
• Implementar um destrutor
• Em CORBA: implementar a operação
remove( ) da interface LifeCycleObject
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
25
Deleção: Visão do Programador
do Servidor
t:Team
remove()
:Player
:Player
:Player
release()
release()
release()
...
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
26
Deleção: Visão do Administrador
• Deleção de instâncias versus deleção de tipos
• Instâncias:
– Remover, do serviço de nomes, a referência ao objeto
deletado
– Pode causar a coleta de lixo se esta for a última referência
ao objeto no serviço de nomes
• Tipos: Remover:
– Do serviço de nomes: buscador de fábrica
– Do repositório de implementações: objetos, fábricas e
buscador de fábrica
– Do repositório de interfaces: definições de tipos do objeto
e da fábrica
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
27
O Que Está Faltando: Replicação
• Cópias feitas pelo serviço de ciclo de vida são
separadas e não evoluem juntos
• O serviço de ciclo de vida não pode ser usado para
replicação de objetos servidores “com estado”
(statefull)
• Objetos replicados refletem as mudanças de estado
uns dos outros e, portanto, evoluem juntos
• Replicação é tipicamente usada para
– Balanceamento de carga
– Tolerância a falhas
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
28
Objetos Compostos
Objetos Compostos: Projeto
• Consiste de objetos atômicos
• Controla o ciclo de vida dos objetos atômicos
• Uso de diagramas de classe UML para modelar os
objetos compostos:
Club
1
1
*
*
Team
Player
1 consists of >
has > 1
Game
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
30
Validação de um Modelo de
Composição
• As seguintes perguntas podem ser usadas para
validar um modelo de composição de objetos:
– Se um objeto composto migra, podem todos os seus
componentes migrarem também?
– Se um objeto composto é deletado, está ok remover
todos os seus componentes?
– Pode um objeto componente migrar sem deletar a
relação de composição?
• Se a resposta para alguma destas perguntas é
NÃO, então o modelo de composição é falho
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
31
Objetos Compostos:
Implementação
• A implementação de composição de objetos pode
ser delegada para um serviço de Relacionamentos
– Ex.: CORBA Relationship Service
• Relacionamentos devem ser implementados como
objetos
– Objetos não devem estar cientes de que estão
relacionados
– Relacionamentos devem ser navegáveis em ambas as
direções
– Pode-se associar comportamento aos relacionamentos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
32
CORBA Relationship Service
• Relacionamentos em CORBA são providos por
meio de um serviço em camadas
Reference and Containment
Graphs of Related Objects
Base Relationships
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
33
Relacionamentos Base
• Definidos por um conjunto de papéis que dois ou
mais objetos desempenham (propriedade, “está
contido”, referenciação, etc.)
• Objetos podem desempenhar vários papéis
• A cardinalidade define o número máximo de
relacionamentos em que um papel pode estar
envolvido
• O grau define o número de papéis de um
relacionamento (ex.: binário, ternário)
• Relacionamentos podem ter atributos
• Objetos relacionados formam um grafo de nodos
(objetos) e arestas (relacionamentos)
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
34
CORBA Relationship Service
RelationshipFactory
relationship_type
degree
named_role_types
RelationshipIterator
Relationship
creates
named_roles
destroy()
create()
iterates
next_one()
next_n()
destroy()
creates
Role
related_object
RoleFactory
role_type
max_cardinality
min_cardinality
related_object_types
create_role()
Original: Wolfgang Emmerich, 2000
creates
get_other_related_object()
get_other_role()
get_relationships()
destroy_relationships()
destroy()
check_minimum_cardinality()
link()
Prof. Fábio M. Costa - Instituto de Informática / UFG
unlink()
35
Exemplos de Relacionamentos e
Papéis
Relationship
Role
Contains
ContainedIn Home
Original: Wolfgang Emmerich, 2000
Away
Has
Game
Prof. Fábio M. Costa - Instituto de Informática / UFG
36
Uso do Serviço de
Relacionamento
• Relacionando objetos usando papéis e
relacionamentos
<<object>>
Spurs:Club
<<role>>
:Contains
<<object>>
klinsi:Player
<<rel>>
:Containment
Original: Wolfgang Emmerich, 2000
<<role>>
:ContainedIn
<<object>>
Spurs1:Team
<<role>>
:Contains
<<rel>>
:Containment
<<role>>
:ContainedIn
<<role>>
:Home
<<rel>>
:Reference
<<role>>
:Away
<<object>>
ManU1:Team
Prof. Fábio M. Costa - Instituto de Informática / UFG
37
Grafos de Objetos Relacionados
• A segunda camada implementa a travessia do
grafo de objetos relacionados, usando
– Busca em profundidade
– Busca em largura
– Melhor-primeiro
• Interface básica: Node
– Serve como um proxy para objetos relacionados
– Conhece os relacionamentos dos quais o objeto
participa
• Interface Traversal oferece suporte para visitar os
próximos n nodos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
38
Exemplo de Grafo de Objetos
Relacionados
<<object>>
Spurs:Club
<<node>>
:Node
<<object>>
Spurs1:Team
<<role>>
:Contains
<<rel>>
:Containment
Original: Wolfgang Emmerich, 2000
<<role>>
:ContainedIn
<<object>>
klinsi:Player
<<node>>
:Node
<<role>>
:Contains
<<role>>
:Home
<<rel>>
:Reference
<<rel>>
:Containment
<<role>>
:Away
<<role>>
:ContainedIn
<<node>>
:Node
Prof. Fábio M. Costa - Instituto de Informática / UFG
<<node>>
:Node
<<object>>
ManU1:Team
39
Relacionamentos de Referência
e de Conteúdo
• O Serviço de Relacionamento pode prover
uma implementação direta da semântica de
composição em UML
• Separação entre relacionamentos de
referência e de conteúdo
• Provisão destes dois relacionamentos como
subtipos de papéis e relacionamentos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
40
Referência e Conteúdo
CosRelationships
CosContainment
CosRelationships::Relationship CosRelationships::Role
Relationship
ContainsRole ContainedInRole
CosReference
CosRelationships::Relationship CosRelationships::Role
Relationship ReferencesRole ReferencedByRole
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
41
Ciclo de Vida de Objetos
Compostos
Ciclo de Vida de Objetos
Compostos
• Aplica-se as operações de ciclo de vida para os
objetos raiz
• Todos os nodos que estão no fecho transitivo do
relacionamento de conteúdo serão
copiados/movidos/deletados
• Todos os relacionamentos internos àquele fecho
serão copiados/movidos/deletados
• Todos os objetos que são conectados àqueles
nodos serão copiados/movidos/deletados
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
43
Exemplo: Cópia de um Objeto
Composto
:Client
copy
:Node
Spurs:Club
:Role
:Rel.
:Role
:Node
copy
copy
Original: Wolfgang Emmerich, 2000
copy
copy
copy
Prof. Fábio M. Costa - Instituto de Informática / UFG
44
Objeto Composto Copiado
<<object>>
Spurs:Club
<<node>>
:Node
<<object>>
Spurs1:Team
<<role>>
:Contains
<<rel>>
:Containment
<<role>>
:ContainedIn
<<object>>
klinsi:Player
<<node>>
:Node
<<role>>
:Contains
<<role>>
:Home
<<rel>>
:Reference
<<rel>>
:Containment
<<role>>
:Away
<<node>>
:Node
<<role>>
:Contains
<<rel>>
:Containment
<<object>>
Spurs:Club
Original: Wolfgang Emmerich, 2000
<<role>>
:ContainedIn
<<role>>
:Home
<<rel>>
:Reference
<<node>>
:Node
<<role>>
:Contains
<<rel>>
:Containment
<<role>>
:ContainedIn
<<node>>
:Node
<<role>>
:ContainedIn
<<object>>
Spurs1:Team
Prof. Fábio M. Costa - Instituto de Informática / UFG
<<node>>
:Node
<<object>>
ManU1:Team
<<node>>
:Node
<<object>>
klinsi:Player
45
Pontos-Chave
• O controle do ciclo de vida de objetos distribuídos
é mais complicado do que no caso de objetos
locais
• Criação de objetos em máquinas remotas é obtida
através de fábricas
• Transparência de localização é obtida através de
buscadores de fábricas, os quais são proxies paras
as máquinas remotas
• Deleção de objetos pode ser implícita ou explícita
• Integridade referencial não pode ser garantida em
geral
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
46
Pontos-Chave
• Freqüentemente, vários objetos distribuídos tem o
mesmo ciclo de vida
• Composição de objetos pode ser usada para
agrupar estes objetos através de relacionamentos
• A implementação de objetos compostos pode ser
suportada por um serviço de Relacionamento
• A integração dos serviços de Relacionamento e
Ciclo de Vida permite a implementação de
controle de ciclo de vida para objetos compostos
Original: Wolfgang Emmerich, 2000
Prof. Fábio M. Costa - Instituto de Informática / UFG
47
Download

Sistemas Distribuídos Controle do Ciclo de Vida de Objetos