Sistemas de Nomes Planos November 2, 2009 Sumário Sistemas de Nomes Planos e DHTs Chord
Sistemas de Nomes Planos Tipicamente, sistemas de nomes à escala da Internet usam nomes estruturados hierarquicamente. Até há bem pouco tempo desconhecia-se como resolver de forma eficiente nomes não estruturados em sistemas de nomes de grande escala. O aparecimento de sistemas peer-to-peer foi o catalizador de investigação nesta área tendo conduzido à invenção de algoritmos para a resolução de nomes planos Um problema chave na maioria dos sistemas P2P é localizar um objecto a partir do seu nome. Muitos sistemas baseiam-se no conceito de Distributed Hash Table (DHT). Distributed Hash Table (DHT) Uma DHT é muito semelhante a uma hash-table: Cada objecto está associado a uma chave única. De facto, uma DHT implementa uma única operação: lookup(key) que retorna o endereço de rede do nó associado à chave key. O endereço é depois usado quer para inserir o objecto quer para aceder ao objecto. Em geral, os nós da rede P2P e as chaves são identificados por um identificador do mesmo domínio, p.ex. são um número com m bits; O nó associado a uma dada chave é aquele cujo identificador é o mais próximo dessa chave. A definição de distância é um aspecto fundamental na concepção de DHTs.
Exemplo de DHT: Chord Chord usa identificadores com m-bits ordenados circularmente em aritmética mod 2 m. Cada nó tem um identificador com m-bits gerado aleatoriamente; Cada objecto está associado a um identificador também com m-bits; A chave k está associada ao nó succ(k) succ(k) é o nó com o menor id entre todos os nós cujo id é igual ou maior do que k. Resolução duma Chave em Chord (1/2) Problema Dada uma chave k, como se pode determinar succ(k)? Não Solução Cada nó n mantém informação sobre o seu sucessor (succ(n + 1)). A resolução pode ser feita seguindo qualquer estratégia (iterativa, transitiva, recursiva). Solução não escalável.
Resolução duma Chave em Chord (2/2) Solução Além de informação sobre o seu sucessor, cada nó mantém apontadores que lhe permitem reduzir pelo menos em metade a distância à chave. Como os nós à distância 2 i podem não existir, cada nó n mantém referência para succ(n + 2 i ) n + 2 m 1 n n + 2 0 n + 2 1 n + 2 m 3 n + 2 m 2 Este esquema tem 2 propriedades importantes: 1. Cada nó precisa armazenar informação relativa a apenas um pequeno número de nós, e sabe mais sobre nós na vizinhança do que sobre nós mais remotos; 2. A tabela não contém informação suficiente para determinar o sucessor duma chave k arbitrária. Chord: Finger Table (1/2) A (Finger table) FT n [] é o vector com as m referências: FT n [i] = succ(n + 2 i 1 )mod2 m FTn [1] é o sucessor de n na circunferência. Para localizar (lookup) uma chave k o nó n reenvia o pedido para: O seu sucessor, i.e. FT n [1], se n < k < FT n [1] O nó n de indice j tal que n = FT n [j] k < FT n [j + 1] (De facto, devia usar-se aritmética módulo 2 m ) Chord funciona correctamente desde que FT n [1] seja mantido correctamente: Inconsistências temporárias noutros elementos de FT n [] podem ser toleradas tentando a resolução após um intervalo. No artigo original, é descrita uma estratégia iterativa. Permite actualizar os elementos da Finger Table.
Chord: Finger Table (2/2) 1 1 2 1 3 1 4 4 5 14 Actual node 26 27 28 29 30 31 Resolve k = 12 from node 28 0 1 1 4 2 4 3 9 4 9 5 18 2 3 Finger table 4 5 6 i 1 9 2 9 3 9 4 14 5 20 i-1 succ(p + 2 ) 25 7 1 28 2 28 3 28 4 1 5 9 24 23 22 21 1 21 2 28 3 28 4 28 5 4 20 19 Resolve k = 26 from node 1 18 1 20 2 20 3 28 4 28 5 4 17 16 15 14 13 12 1 18 2 18 3 18 4 28 5 1 11 10 8 9 1 14 2 14 3 18 4 20 5 28 1 11 2 11 3 14 4 18 5 28 Chord: Problemas Adicionais Associação dum nó n O nó pode pedir a um nó arbitrário para localizar succ(n) O importante é actualizar FT n [1]; O processo pode ser simplificado se cada nó mantiver também informação sobre o seu predecessor. Periodicamente, um nó envia uma mensagem ao seu sucessor, e actualiza os elementos de FT n [] Avaria dum nó Em vez de manter um único sucessor, cada nó mantém uma lista de r sucessores. Se o sucessor falhar, o nó poderá tentar encontrar um sucessor alternativo. Geração de identificadores Pode ser realizada usando funções de hashing criptográficas, o que fornece algumas garantias de resiliência contra ataques de denial-of-service.
Problema com Topologias Virtuais (1/2) Problema Chord, e muitos outros sistemas peer-to-peer, usam uma rede virtual (overlay network) construída sem ter em conta a rede física sobre a qual é construída, i.e. a Internet. As mensagens podem seguir um caminho errático e pouco eficiente. Sol. 1: Atribuição de identificadores dependente da topologia Nós topologicamente próximos são atribuídos identificadores próximos. Nem sempre é possível, p.ex. Chord. Problema com Topologias Virtuais (2/2) Sol. 2: Encaminhamento baseado na proximidade Por exemplo, em Chord, cada nó poderia manter não um nó mas vários nós para cada intervalo [n + 2 i 1, n + 2 i ], e poderia encaminhar o seu pedido a um nó próximo. O nó escolhido poderá não ser aquele cujo identificador é o mais próximo da chave. Sol. 3: Selecção de vizinhos baseada na proximidade Em alguns algoritmos, os nós podem seleccionar os seus vizinhos, i.e. estabelecer as ligações na rede virtual. De novo, isto não é possível em Chord.
Leitura Adicional Subsecção 5.2.3 de Tanenbaum e van Steen, Distributed Systems, 2nd Ed.