Nomes November 2, 2009 Sumário O Problema Conceitos Fundamentais Espaço de Nomes Rsolução de Nomes
Localização do Servidor/Objectos Problema: Como é que um cliente sabe onde se encontra o servidor? Solução: Não há uma, mas várias respostas: hard coded, raramente; argumentos do programa: mais flexível, mas...; ficheiro de configuração; usando broadcast ou multicast; serviço de localização/nomes: local, p.ex. rmiregistry. global. Nomes Nomes são sequências de bits ou carácteres que designam objectos/entidades: Ficheiros. Computadores Páginas da Web. Caixas de correio. Objectos Java.... Idealmente nomes seriam facilmente memorizáveis (user-friendly), mas tal nem sempre é possível. Endereços IPv4 têm 32 bits, e os IPv6 128.
Pontos de Acesso e Endereços Objectos/entidades suportam um conjunto de operações, que podem ser invocadas através de pontos de acesso (access points). Uma entidade/objecto pode ter mais do que um ponto de acesso. Endereços são nomes de pontos de acesso: Endereço IP + número do porto. Número de telefone. Um nome independente da localização é um nome que não depende dos endereços dos pontos de acesso da entidade. Uma outra definição (por Shoch): The name of a resource indicates what we seek, an address indicates where it is, (and a route tells us how to get there.) Endereços e Identificadores Endereços têm algumas limitações: Pontos de acesso mudam frequentemente, e com eles os endereços: Transferência dum serviço para outro computador. Implicam uma dependência em relação ao ponto de acesso, dificultando, p.ex., a distribuição de carga por vários servidores. Identificadores são nomes com as seguintes propriedades: um identificador refere-se no máximo a uma entidade; uma entidade é referida no máximo por um identificador; um identificador refere-se sempre à mesma entidade (nunca é reusado). Identificadores permitem referir entidades duma forma precisa e independente dos pontos de acesso.
Espaço de Nomes (Name Space) Define a sintaxe e a estrutura (plano vs. hierárquico) do conjunto de nomes possíveis; Consiste num conjunto de associações (bindings) dum nome a um objecto/entidade (ou a um seu endereço). Resolução dum Nome (Name Resolution) É o processo para determinar o objecto/entidade associado a esse nome. Faz-se sempre no contexto dum espaço de nomes: O nome dum ficheiro num SO é resolvido no contexto do sistema de ficheiros desse SO. O nome duma variável num programa em Java é resolvido no contexto da JVM em que executa. O código ISBN (International Standard Book Number) duma publicação é resolvido no contexto do ISBN System. As matrículas automóveis são resolvidas noutro contexto. Estrutura de Espaços de Nomes Espaços de nomes têm tipicamente uma estrutura hierárquica: Sistema de ficheiros dum SO. O Domain Name System (DNS). O sistema de endereços postais. As matrículas automóveis são resolvidas noutro contexto por país, por região, etc. O uso duma estrutura hierárquica, simplifica: a atribuição; a resolução; de nomes. Até recentemente (aprox. o ano 2000) não se sabia como implementar de forma escalável a resolução num espaço de nomes plano.
Representação dum Espaço de Nomes por Grafos Tipicamente espaços de nomes são representados por DAGs (Direct Acyclic Graphs): Data stored in n1 n2: "elke" n3: "max" n4: "steen" elke max n1 steen n0 n5 "/" "//steen/" Leaf node Directory node n2 n3.twmrc n4 "//steen/" Nós internos do grafo dum sistema de nomes são objectos do próprio sistema de nomes: Frequentemente, são designados por directories. Cada directório mantém uma tabela cujos elementos são pares (label, identificador): label é uma string usada como componente dum nome do nó com identificador identificador. Nomes Absolutos vs. Relativos Um nó N i num espaço de nomes pode ser designado por um pathname em relação a outro nó N j : Esse pathname consiste na concatenação dos labels dos arcos do caminho de N i até N j, p.ex.: N i :< label 1, label 2,..., label n > Se N i é o nó raiz, o pathname ( ou nome, apenas) diz-se absoluto, senão diz-se relativo. No caso de DNS usa-se a expressão fully qualified name (FQN) em vez de nome absoluto. Cada sistema de nomes usa a sua convenção para separar os componentes dum nome: Unix/Linux usam /; DNS usa. (i.e., um ponto).
Aliases ou Sinónimos Um alias é um sinónimo que pode ser usado para referir um determinado nó num espaço de nomes: Em Unix/Linux, usa-se o termo link. Um alias pode ser implementado sem criar arcos no DAG que representa o espaço de nomes. Data stored in n1 n2: "elke" n3: "max" n4: "steen" n1 n0 n5 "/" elke max steen Leaf node Directory node n2 n3.twmrc n4 n6 Data stored in n6 "/" "//steen/" Em Unix/Linux, usa-se o termo symbolic link. Aliases têm pelo menos 2 usos: Permitem o uso de nomes mais curtos. Permitem isolar o uso de nomes de certos pormenores de operação: Por exemplo, paginas.fe.up.pt é um alias de web.fe.up.pt. Composição de Espaços de Nomes (Mounting) (1/3) Mounting é um mecanismo que permite fundir vários espaços de nomes num único: Em Unix, foi introduzido para permitir acesso a suportes removíveis (p.ex. floppies e tapes). Hard disk / Diskette / Hard disk / x y z a b a b x y z c d c d p q r q q r Em termos lógicos, é como se o mount point passasse a ser um link para a raiz do espaço de nomes enxertado. De facto, pode enxertar-se só parte dum espaço de nomes.
Composição de Espaços de Nomes (Mounting) (2/3) Em Network File System (NFS) é usado para aceder a systemas de ficheiros remotos. Name server Machine A Name server for foreign name space Machine B remote vu "nfs://flits.cs.vu.nl///steen" steen OS Reference to foreign name space Network Mounting requer suporte por parte dos sistemas de nomes: P.ex., a resolução de nomes pode diferir nos vários espaços de nomes. Composição de Espaços de Nomes (Mounting) (3/3) Uma alternativa é criar um novo nó raíz que será o pai das raízes dos espaços de nomes a fundir: NS1 m0 n0 vu vu oxford NS2 n0 m0 "m0:/" elke max steen.twmrc "n0://steen/" Esta técnica é bastante usada, nomeadamente na Web. Note-se que a resolução: do hostname num URL é diferente da resolução do pathname; do pathname pode diferir entre URLs.
Resolução de Nomes e Closure Mechanism A resolução dum nome faz-se sempre no contexto dum espaço de nomes (name space). Problema Como se obtém um nó do espaço de nomes a partir do qual o nome possa ser resolvido? Como obter uma referência remota para o rmiregistry? Como iniciar a resolução dum nome num sistema de ficheiros: i.e. onde está o directório raiz? Como obter o endereço IP dum servidor DNS para resolver um nome DNS? Closure Mechanism Mecanismo que permite obter um contexto para a resolução dum nome. Tipicamente é uma solução ad-hoc. Resolução de Nomes Em Sistemas Distribuídos Em sistemas distribuídos de menor escala a resolução de nomes envolve apenas um servidor: P.ex., o rmiregistry ou o portmap. Em sistemas de maior dimensão a resolução de nomes pode envolver mais do que um servidor. Neste caso, usa-se uma de três estratégias de resolução de nomes: 1. Iterativa. 2. Recursiva. 3. Transitiva.
Resolução de Nomes: Estratégias 1 Srv1 1 Srv1 1 Srv1 Clnt 2 Srv2 Clnt Srv2 2 Clnt Srv2 2 3 3 3 Srv3 Srv3 Srv3 Iterativa Recursiva Transitiva Leitura Adicional Capítulo 5 de Tanenbaum e van Steen, Distributed Systems, 2nd Ed. Secção 5.1: Names, Identifiers and Addresses Secção 5.3: Structured Naming