Sistemas Distribuídos Localização de Objetos Distribuídos Especialização em Redes de Computadores Prof. Fábio M. Costa Instituto de Informática - UFG Motivação • Evitar o uso de endereços físicos para a localização de componentes • Nomeação – Localização de componentes por meio de nomes externos – Similar às páginas brancas de um catálogo telefônico • Trading – Localização de componentes por meio de características de serviço – Similar às páginas amarelas Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 2 Visão Geral • Nomeação de Objetos – – – – Princípios Serviço de Nomes de CORBA COM Monikers Java/RMI Registry • Trading de Objetos – Princípios – Serviço de Trading de CORBA Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 3 Nomeação Princípios Básicos • Plataformas de middleware orientadas a objetos utilizam-se de referências de objetos para endereçar objetos servidores • É necessária uma forma de obter tais referências de objetos sem a necessidade de suposições sobre localização física • Um nome é uma seqüência de cadeias de caracteres que pode ser “ligada” a uma referência de objeto (name binding) • Um nome pode ser resolvido para se obter a referência de objeto correspondente Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 5 Princípios Básicos (cont.) • Pode haver muitos objetos servidores em um sistema de objetos distribuídos • Objetos servidores podem ter vários nomes • Isto leva a um grande número de “ligações de nomes” • O espaço de nomes deve ser organizado em uma hierarquia para evitar – conflitos de nomes – baixo desempenho na resolução de nomes • Esta hierarquia pode ser obtida através de contextos de nomes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 6 Princípios Básicos: Contextos de Nomes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 7 Princípios Básicos: Nomes Compostos • Nomes são compostos por possivelmente mais do que um componente (string) • A seqüência de componentes de um nome descreve uma caminho através do grafo de contextos de nomes • Exemplo: – (“UEFA”, “England”, “Premier”, “Chelsea”) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 8 Princípios Básicos: Servidor de Nomes • “Ligações” de nomes (a referências de objetos) são administradas por servidores de nomes • Nem todo objeto servidor precisa de um nome • Alguns objetos servidores podem ter vários nomes • Os servidores de nomes devem armazenar as amarrações de nomes persistentemente • Os servidores de nomes devem ser “calibrados” com vistas à eficiência na resolução de nomes • O próprio servidor de nomes pode ser distribuído Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 9 O Serviço de Nomes de CORBA • Suporta a ligação (binding) de nomes a referências de objetos CORBA • Escopo de um nome: contexto de nomes • Múltiplos nomes podem ser definidos para uma mesma referência de objeto • Nem todas as referências de objetos precisam de nomes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 10 Nomes em CORBA • Nomes são compostos por nomes simples • Nomes simples: pares valor-tipo • O atributo valor é usado para resolução de nomes • O atributo tipo é usado para fornecer informação a respeito do papel do objeto Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 11 Tipos IDL para Nomes module CosNaming { typedef string Istring; struct NameComponent { Istring id; Istring kind; }; typedef sequence <NameComponent> Name; ... }; Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 12 Interfaces IDL do Serviço de Nomes • O Serviço de Nomes é especificado através de duas interfaces – NamingContext define operações para ligar objetos a nomes e para a resolução de nomes – BindingIterator define operações para iterar em um conjunto de nomes definido em um dado contexto de nomes Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 13 Interface NamingContext interface NamingContext { void bind(in Name n, in Object obj) raises (NotFound, ...); Object resolve(in Name n) raises (NotFound,CannotProceed,...); void unbind (in Name n) raises (NotFound, CannotProceed...); NamingContext new_context(); NamingContext bind_new_context(in Name n) raises (NotFound, ...) void list(in unsigned long how_many, out BindingList bl, out BindingIterator bi); }; Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 14 Interface BindingIterator interface BindingIterator { boolean next_one(out Binding b); boolean next_n(in unsigned long how_many, out BindingList bl); void destroy(); } Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 15 Um Cenário para o Serviço de Nomes: Ligação • Exemplo: Promover um time para a 1a. Divisão e rebaixar outro root: Naming Context c:Client 1L:Naming Context 1L=resolve("UEFA","Germany","1. Liga") bind("Arm. Bielefeld", bielefeld) unbind("Eintr. Frankfurt") Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 16 Inicialização do Serviço de Nomes – Como obter o Contexto de Nomes Raiz? – Através da Interface do ORB module CORBA { interface ORB { typedef string ObjectId; typedef sequence <ObjectId> ObjectIdList; exception InvalidName{}; ObjectIdList list_initial_services(); Object resolve_initial_references (in ObjectId identifier) raises(InvalidName); } } Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 17 Um Cenário para o Serviço de Nomes: Resolução • Exemplo: Imprimir o elenco de um time root: Naming Context c:Client D:Naming do:Team Context D=resolve("UEFA","Germany") do=resolve("1. Liga","BVB") print() Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 18 Cenário para o Serviço de Nomes: Iteração • Imprimir os nomes de todos os times do campeonato c:Client 1.Liga:Naming bi:Binding Context Iterator t:Team list(0,bl,bi) t=next_one().value name() t=next_one().value name() t=next_one().value name() ... Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 19 O Serviço de Nomes em COM: Monikers • Em COM, monikers são usados para “desacoplar os clientes dos algoritmos e da informação que são necessários para encontrar objetos servidores” [Don Box, 98] • Suporta a ligação e resolução de nomes • O espaço de nomes pode ser estruturado hierarquicamente Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 20 O Serviço de Nomes em COM: Interface IMoniker interface IMoniker : IPersistStream { HRESULT BindToObject([in] IBindCtx *pbc, [in, unique] IMoniker *pmkToLeft, [in] REFIID riid, [out, iid_is(riid)] void **ppv); ... } Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 21 Criação de Monikers: Interface IParseDisplayName • Para ser nomeável, objetos servidores precisam implementar esta interface • Cria-se um objeto moniker a partir de um nome textual externo, chamado de display name interface IParseDisplayName { HRESULT MkParseDisplayName([in] IBindCtx *pbc, [in,string] const OLECHAR *pwszName, [out] ULONG *ppchEaten [out] IMoniker **ppmk); } Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 22 Avaliação • COM suporta nomes internos (monikers) e nomes externos (display names) – Isto complica o esquema de nomes • O Serviço de Nomes de COM é estreitamente ligado a outras partes da especificação de COM (containers) • O Serviço de Nomes de COM não é transparente para os designers de objetos servidores, que precisam implementar a interface IParseDisplayName Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 23 O Serviço de Nomes em RMI: RMI Registry • Versão simplificada do Serviço de Nomes de CORBA • Sem suporte para nomes compostos • Restrição de segurança: ligações de nomes não podem ser criadas a partir de máquinas remotas • Deve haver um registry em cada máquina • Diferentes registries devem estar integrados dentro de um espaço de nomes federado Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 24 RMI Registry package java.rmi.registry; public interface Registry extends java.rmi.Remote { public static final int REGISTRY_PORT = 1099; public java.rmi.Remote lookup(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public void bind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AlreadyBoundException, java.rmi.AccessException; public void rebind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AccessException; public void unbind(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public String[] list() throws java.rmi.RemoteException, java.rmi.AccessException; Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 25 Usando o RMI Registry :Locate Registry root=getRegistry(“ns.fifa.org”) c:Client root: 1L: BVB: E: do:Team Registry Registry Registry Registry E=lookup("UEFA") D=lookup(“Germany”) 1L=lookup(“1. Liga”) BVB=lookup(“BVB”) print() Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 26 Avaliação • A ausência de nomes hierárquicos aumenta o número de operações remotas necessárias para a resolução de nomes • A descoberta do registry raiz não é necessariamente transparente de localização • A restrição de segurança quebra o conceito de transparência de localização Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 27 Limitações de Serviços de Nomes • Em todas as abordagens mencionadas: – Os clientes sempre devem identificar o servidor específico por meio de um nome • Inapropriado se o cliente apenas deseja usar um serviço com certas características e qualidade, mas não sabe em que servidor: – Comércio eletrônico – Vídeo sob demanda – Venda automática de bilhetes de cinema Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 28 Trading Motivação • Localização de objetos de maneira transparente de localização • O uso de um serviço de nomes é simples, mas pode não ser apropriado quando: – clientes não conhecem os servidores – há múltiplos servidores para o mesmo serviço • Trading oferece suporte para a localização de servidores com base na funcionalidade e qualidade de serviço • Serviço de Nomes ↔ Páginas brancas • Trading ↔ Páginas Amarelas Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 30 Características de um Serviço de Trading • O Trader opera como um intermediador entre clientes e servidores (mas não no mesmo sentido que o ORB!) • Permite ao cliente mudar de perspectiva – de “quem” para “o que” Trader 3:invoke Exporter Importer • Análogo à idéia de um corretor de seguros Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 31 Características de um Serviço de Trading (cont.) • Linguagem comum entre cliente e servidor – Tipos de serviço – Qualidades de serviço • Servidor se registra junto ao trader • Servidor define uma qualidade de serviço (QoS) garantida – Definição estática de QoS – Definição dinâmica de QoS Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 32 Características de um Serviço de Trading (cont.) • Clientes consultam o trader para obter – um serviço de um certo tipo – com um certo nível de qualidade • O trader oferece suporte para – comparação de tipos de serviço com as propriedades especificadas – pesquisa por serviços Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 33 Exemplo • Serviço de vídeo-sob-demanda da Hongkong Telecom: Server MGM Warner Video-ondemand provider User Trader Independent Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 34 O Processo de Trading • Exemplo: servidor de vídeo-sob-demanda :Client :Trader MGM:VoDS Warner:VoDS export() export() query() modify() download() Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 35 Definição de Tipos de Serviço • Um tipo de serviço define: – A funcionalidade provida por um serviço – As qualidades desta do serviço provido • A funcionalidade é definida por meio de um tipo de objeto (interface) • QoS é definida com base em propriedades – – – – nome da propriedade tipo da propriedade valor da propriedade modo da propriedade • obrigatório / opcional • leitura apenas / modificável Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 36 Exemplo de Tipo de Serviço typedef enum {VGA,SVGA,XGA} Resolution; service video_on_demand { interface VideoServer; readonly mandatory property float fee; readonly mandatory property Resolution res; modifiable optional property float bandwidth; } Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 37 Hierarquia de Tipos de Serviço • Um tipo de objeto pode ter várias implementações com diferentes QoS • O mesmo tipo de objeto pode ser usado em diferentes tipos de serviço • Tipo de serviço S é um subtipo do tipo de serviço S´ sse – o tipo de objeto de S é idêntico ou é um subtipo do tipo de objeto de S´ – S tem pelo menos todas as propriedades definidas para S´ • Relação de sub-tipagem pode ser explorada pelo trader na busca por serviços de um determinado tipo Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 38 Definição de Restrições • O importador (cliente) define, como parte da consulta ao trader, as qualidades de serviço desejáveis • Exemplo: – custo<10 AND res>=SVGA AND bandewidth>=256 • Em uma consulta, o trader considera apenas aquelas ofertas de serviço que obedeçam à restrição Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 39 Políticas de Trading • Dependendo das restrições e dos serviços disponíveis, um grande conjunto de ofertas pode ser retornado por uma consulta • Políticas de trading são usadas para restringir o tamanho da lista de ofertas de serviço retornadas – Especificação de um limite máximo – Restrição sobre a substituição de serviço (por subtipos) – Restrição sobre as propriedades modificáveis (as quais podem ser alteradas no período entre a busca do serviço e seu efetivo uso através de requisições do cliente) Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 40 Federação de Traders • Demanda por escalabilidade • Um trader participando de uma federação: – oferece para os demais traders os serviços sobre os quais ele tem conhecimento – encaminha para outros traders consultas para serviços sobre os quais não tem conhecimento • Problemas – importações de serviços podem não terminar – duplicação de ofertas Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 41 Grafo de Trading T1 query.hop_count=4 def_follow_policy=always max_hop_count=5 T2 Service Offer T4 Trader Attribute Link Original: Wolfgang Emmerich, 2000 max_hop_count=1 T3 query.hop_count=0 Prof. Fábio M. Costa - Instituto de Informática / UFG 42 O Serviço de Trading de CORBA Application Objects Domain Interfaces CORBA facilities Object Request Broker Object Trader CORBAservices Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 43 Interfaces do Serviço de Trading de CORBA Admin list_offers() … LinkAttributes TraderComponents Link add_link() remove_link() describe_link() modify_link() Original: Wolfgang Emmerich, 2000 Support Attributes Lookup query() ImportAttributes Register export() withdraw() modify() Prof. Fábio M. Costa - Instituto de Informática / UFG 44 Definindo Qualidade de Serviço typedef Istring PropertyName; typedef sequence<PropertyName> PropertyNameSeq; typedef any PropertyValue; struct Property { PropertyName name; PropertyValue value; }; typedef sequence<Property> PropertySeq; enum HowManyProps {none, some, all} union SpecifiedProps switch (HowManyProps) { case some : PropertyNameSeq prop_names; }; Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 45 Interface do Trader para Exportadores de Serviços interface Register { OfferId export(in Object reference, in ServiceTypeName type, in PropertySeq properties) raises(...); OfferId withdraw(in OfferId id) raises(...); void modify(in OfferId id, in PropertyNameSeq del_list, in PropertySeq modify_list) raises (...); Original: Wolfgang Emmerich, 2000 }; Prof. Fábio M. Costa - Instituto de Informática / UFG 46 Interface do Trader para Importadores de Serviços interface Lookup { void query(in ServiceTypeName type, in Constraint const, in Preference pref, in PolicySeq policies, in SpecifiedProps desired_props, in unsigned long how_many, out OfferSeq offers, out OfferIterator offer_itr, out PolicyNameSeq Limits_applied) raises (...); Original: Wolfgang Emmerich, 2000 }; Prof. Fábio M. Costa - Instituto de Informática / UFG 47 Pontos-Chave • Objetos distribuídos podem ser localizados por meio de um serviço de nomes ou de trading • Um serviço de nomes liga nomes (conhecidos externamente) a referências de objetos oferece suporte para resolução de nomes para revelar a referência de objeto ligada • Trading oferece suporte para a localização de objetos com base na funcionalidade que os mesmos oferecem, bem como na qualidade que garantem Original: Wolfgang Emmerich, 2000 Prof. Fábio M. Costa - Instituto de Informática / UFG 48