350 likes | 453 Views
Serviço de Nome. Sistemas Distribuídos Coulouris (Capitulo 9) Tanenbaum (Capitulo 4). Introdução. Nomes exercem importante papel em todos os sistemas computacionais. São usados: Compartilhamento de recursos Identificação única de entidades Para referenciar locais, ...
E N D
Serviço de Nome Sistemas Distribuídos Coulouris (Capitulo 9) Tanenbaum (Capitulo 4)
Introdução • Nomes exercem importante papel em todos os sistemas computacionais. • São usados: • Compartilhamento de recursos • Identificação única de entidades • Para referenciar locais, ... • A diferença entre serviço de nome em sistemas distribuídos e não distribuídos consiste na forma em que o mesmo é implementado
Funções de Serviço de Nome • A principal função de um serviço de nomes é permitir a associação de um nome (ou uma outra representação alternativa mais simples) a recursos computacionais como: • endereços de memória, de rede, de serviços • objetos e referências • códigos em geral • Suas duas funções básicas são: • Associar (mapear) um nome a um recurso • Localizar um recurso a partir de seu nome • Exemplos: • Sistema de arquivos: liga caminho a bloco(s) de memória • Sistema DNS: liga nome de domínio a endereço IP
Namespaces • Nomes em sistemas distribuídos são organizados em namespace, que são grafos direcionados cujos nós são nomeados. • Implementado em sistemas de arquivos • O nome de uma entidade inclui o caminho no grafo (path) que identifica sua localização • Nomes em XML • Usados na estruturação de documentos • Referências globais (URI – Uniform resource identifier) • Tipo especial de URI (URL – Uniforme resource locator)
URL http://www.cdk3.net:8888/WebExamples/earth.html DNS lookup Resource ID (IP number, port number, pathname) 55.55.55.55 8888 WebExamples/earth.html Web server Network address file 2:60:8c:2:b0:5a Socket Nomes e Recursos
Resolução de Nomes • Namespaces oferecem um mecanismo conveniente para armazenar e recuperar informações sobre entidades através de nomes • Resolução de nomes é o processo de busca de um nome • Exige o conhecimento preliminar sobre onde e como começar a busca • É possível definir diversos nomes a uma mesma entidade (alias)
NS2 2 Name 1 NS1 servers Client 3 NS3 Resolução de NomesInteração direta do Cliente
NS2 NS2 2 2 4 3 1 1 NS1 NS1 client client 3 5 4 NS3 NS3 Non-recursive Recursive server-controlled server-controlled Resolução de NomesInteração indireta
Implementação de Namespace estabilidade
Montagem • Em sistemas distribuídos é possível mesclar diferentes namespaces de forma transparente. • Para tal é necessário: • Nome do protocolo de acesso • Nome do servidor • Nome do ponto de montagem
Serviço de nome usado na Internet Consiste em uma base de dados hierárquica e distribuída Usado principalmente para resolução de host name e mail host a.root-servers.net (root) uk ns1.nic.uk purdue.edu (uk) yahoo.com ns.purdue.edu (purdue.edu) co.uk ns0.ja.net ac.uk (ac.uk) * .purdue.edu ic.ac.uk qmw.ac.uk *.dcs.qmw.ac.uk dcs.qmw.ac.uk *.ic.ac.uk *.qmw.ac.uk alpha.qmw.ac.uk dns0.dcs.qmw.ac.uk dns0-doc.ic.ac.uk (qmw.ac.uk) (dcs.qmw.ac.uk) (ic.ac.uk) Exemplo de Serviço de NomeDNS - Domain Name System
API para Serviço de NomeJNDI – Java Naming and Directory Interface • É uma ponte sobre os diversos serviços de nomes e diretórios diferentes • Vantagens • Só é preciso aprender uma única API para acessar vários tipos de informação de serviços de diretório • Isola a aplicação dos detalhes específicos do protocolo • Pode ser usada para ler objetos Java (serializados) que estejam armazenados em um diretório • Pode combinar diferentes tipos de diretório (federação) e tratá-los como um diretório único • Componentes • API - Application Programming Interface • SPI - Service Provider Interface que permite que novos serviços sejam plugados transparentemente
Principais Classes JNDI • A API JNDI consiste de cinco pacotes • O principal pacote é javax.naming que contém as principais classes e interfaces • Context: interface onde se pode recuperar, ligar, desligar e renomear objetos, e criar e destruir contextos • InitialContext: ponto de partida (raiz) para todas as operações • Name: abstração de um nome. Contém geralmente um String de texto que corresponde ao nome do objeto ou contexto • NameClassPair: contém nome do objeto e de sua classe • Binding: contém nome do objeto ligado, nome da classe do objeto e o próprio objeto • Reference: abstração de uma referência para um objeto • NamingEnumeration: um tipo de java.util.Enumeration usado para colecionar componentes de um contexto • NamingException: principal exceção do JNDI
Recuperação de Objetos JNDI • Para obter a referência para um objeto de um contexto usa-se o método lookup() • Para usar o objeto retornado é preciso conhecer o seu tipo e fazer o cast (ou narrow, se objeto remoto) para promover a referência • Se o objeto for um contexto, lookup() age como um método para mudar de contexto (como o chdir, em Unix)
Serviço de Diretório • Também chamadas páginas amarelas • Retorna atributos de qualquer objeto que corresponde ao atributo especificado • Atributos são mais poderosos que nomes como designadores de objetos • Programas podem ser escritos para selecionar objetos de acordo com especificações precisas de atributos, onde nomes podem não ser conhecidos • Outra vantagem de atributos é que não expõem a estrutura das organizações • Contudo, serviços de nomes (páginas brancas) são mais simples que serviços de diretórios
Descoberta de Serviço • Serviço de diretório facilita o registro de serviços fornecidos em um ambiente de rede espontâneas (Ad hoc) • Fundamental em ambientes onde clientes e serviços mudam dinamicamente mas devem ser integrados sem intervenção do usuário • Fornece interface para registro e desligamento automático de serviços • Fornece interface para localização (lookup) de serviços pelos usuários • Ex: localização e uso de serviço de impressão (com determinada qualidade) por um usuário eventual de um hotel • Um URL especifica a localização da impressora na rede • http://www.hotelX.com/services/printer57 • O contexto de descoberta (scope) é definido pela alcançabilidade da rede
Localização de Entidades Móveis • Por sua natureza, serviços de nome tradicionais não são convenientes para mapeamento (nome-endereço) que mudam com regularidade • Cada vez que a entidade se move, uma operação de busca não-local é necessária • Características essenciais: • Tolerância a falhas • Escalabilidade • Resolução eficiente de nomes (ênfase)
Abordagens de Mapeamento (a) Mapeamento direto, em serviços de nome tradicionais. (b) Mapeamento indireto, para entidades móveis: serviço de nome + serviço de localização.
Mecanismos para Localização de entidade móvel • Localizar entidades móveis pode ser feito mais eficientemente usando identificadores independente de localização • Existem basicamente 4 abordagens para localização de entidades móveis: • Broadcasting e Multicasting • Forwarding Pointers • Home-Based Approach • Hierarchical Approach
Broadcasting e Multicasting • O identificador da entidade a ser localizada é anunciada para todo processo no sistema distribuído • O processo que oferece access point para a entidade, responde fornecendo um endereço para o ponto de acesso • Essa abordagem tem escalabilidade limitada
Forwarding Pointers • Quando uma entidade se muda de A para B, deixa um ponteiro em A para a sua nova localização • Mobilidade totalmente transparente para o cliente • Problema de performance em cadeia longa
Otimização para Forwarding Pointers • (a) Para reduzir a cadeia de busca (proxy, skeleton), uma invocação traz a identificação do proxy de onde a chamada foi iniciada. • (b) A resposta com a localização atual do objeto é registrada e usada diretamente pelo cliente nas invocações posteriores • Apesar do ganho em performance, somente o proxy inicial é ajustado, introduzindo ponto de falha
Home-Based Approach • Usado em IP Móvel • Cada host móvel recebe um IP fixo. Toda comunicação é inicialmente direcionada para o home agent (localizado na LAN do host) • Sempre que se move, o host solicita um IP temporário e o registra no home agent
Hierarchical Approach • A localização é feita por proximidade de domínios • A busca tem início no local de origem, caso a entidade tenha se movido a busca continua seguindo trilha ascendente na hierarquia de domínios
Remoção de entidades não referenciadas • Entidades que não podem ser localizadas devem ser removidas • Uma importante uso de nomes em sistemas distribuídos é organizar referências às entidades, de forma que entidades não referenciadas possam ser automaticamente removidas • Esse GC requer suporte de mecanismos específicos (counting e tracing)
Técnica para GCD:Reference Counting • Uma entidade conta o número de referências externas a ela • Quando o contador chega em zero, a entidade pode ser removida • Ao invés de contagem de referências, é possível manter uma lista de processos (reference listing) que fazem referência a entidade (usado em Java RMI) • Lista de referência é um mecanismo mais robusto do que a contagem, mas possui problemas de escalabilidade
Problema Uma das soluções possíveis Problemas com passagem de referência entre objetos • É necessária a introdução de mais uma mensagem na comunicação (ACK) • Pode ter problemas de desempenho em sistemas distribuídos em larga-escala • Impõe condições de corrida para incremento/decremento do contador
Advanced Reference Counting Qdo nova referência remota é criada, metade do peso armazenado no skeleton é associado ao novo proxy Cada objeto tem um peso inicial fixo Passagem de referência entre processos
Técnica para GCD: Reference Tracing • Com método baseados em trace, todas as entidades que são direta ou indiretamente referenciadas em um dado conjunto de entidades raiz são marcadas como alcançáveis • Trace distribuído é difícil de ser implementado, pois requer que todas as entidades no sistema possam ser inspecionadas • Soluções variam, mas em geral são baseadas em coletores de lixo tradicionais usados em sistemas monoprocessados
atingível inatingível Objetos para GC