Pesquisar este blog

sexta-feira, 11 de abril de 2014

Nomes em Sistemas Distribuídos

Nomes em Sistemas Distribuídos

Sabemos como a utilização de nomes é importante no mundo dos computadores, para os humanos é muito importante associar as máquinas a algum nome, afinal de contas fazemos isso com todas as coisas ao nosso redor. Para acessar um site, digitamos um nome ao invés do seu ip e aquele nome que digitamos no browser é apenas um identificador que direciona a nossa chamada para um endereço ip da página da web.

Para os sistemas esta associação se dá na forma de um endereço, de como identificar unicamente uma máquina, ou um serviço, como o endereço ip das máquinas conectadas a uma rede. O endereçamento das máquinas geralmente é feito através da utilização de hashs (alfanuméricos como no caso do ipv6) ou através de endereços numéricos (como no ipv4), porém isso é difícil de ser lembrado pelos humanos, pois ninguém deve saber o ip do seu site predileto. Entretanto as máquinas precisam de um endereçamento único, e esta foi a forma encontrada para identificar unicamente uma máquina em um sistema.

Existe um serviço que realiza o mapeamento entre um endereço e a localização física daquela máquina. Este serviço prove a localização física de uma máquina, através de um nome e através deste serviço é possível identificar qual é o endereço de uma máquina. Em um sistema distribuído a implementação de um sistema de nomeação também é feita em várias máquinas, o que faz com que o próprio sistema de nomeação das máquinas seja um sistema distribuído.

Pela definição um nome é um conjunto de caracteres ou uma sequência de bits que fazem referencia a uma entidade. Uma entidade pode se referenciar a praticamente qualquer coisa em um sistema distribuído, exemplos típicos são arquivos, impressoras, discos, locais, processos, usuários, grupos de mensagens, caixa de emails, páginas web, mensagens, conexões de rede e muito mais.

Entidades podem receber operações, como no caso de uma impressora que oferece uma interface de comunicação onde podemos ordenar uma impressão de um documento, ou uma entidade como uma conexão de rede a qual prove operações de envio e recebimento de dados.

Para operar uma entidade necessitamos acessá-la e para isso é necessário saber onde esta entidade está localizada.

Uma entidade pode trocar de endereço, assim como um computador móvel pode ter um endereço ip diferente em cada local onde ele se conecta, por exemplo quando você está se deslocando com o seu celular e conecta ele na internet através da tecnologia 4G, você recebe um endereço de IP. Esta conexão é feita através de uma torre de comunicação de celular, e esta torre tem uma área de abrangência. Caso este mesmo celular entre em uma área de cobertura de uma outra torre, ou mesmo de uma rede WiFi e se conecte através desta tecnologia, certamente ele receberá um novo endereço de IP, e apesar de ser a mesma entidade, neste caso um Smartphone, ela terá dois endereços diferentes. E mesmo um computador pessoal pode ter vários endereços ao mesmo tempo, como diversas conexões providas por mais de uma placa de rede ou uma placa wireless e Ethernet.

Além dos endereços existem outros tipos de nomes que precisam de um tratamento especial, como nomes que são utilizados para identificar unicamente uma entidade, e um identificador verdadeiro deverá ter estas propriedades.

Um identificador não pode referenciar mais que uma entidade, cada entidade é referenciada por pelo menos um identificador e um identificador sempre referencia a mesma entidade e nunca será reutilizado.

Ao usar identificadores a tarefa de se referenciar a uma identidade sem haver confusão fica bem mais fácil.

Broadcasting

O broadcasting pode ser utilizado para localizar uma entidade dentro de uma rede, geralmente uma rede local. Neste sistema assim que uma requisição chega a rede, uma mensagem contendo a entidade que será utilizada pela requisição é espalhada pela rede, e somente quem for o dono daquela entidade irá responder a esta requisição. Este princípio funciona muito bem em redes pequenas, e seu algoritmo é bem simples de se implementar, mas quando a rede começa a ficar grande, o custo de disparar uma mensagem para todas as máquinas a fim de localizar uma entidade torna-se muito elevado. 

Repasse de Ponteiros

Uma maneira popular de se localizar dispositivos móveis é utilizando-se do repasse de ponteiros. Este princípio é simples, assim que uma máquina parte de um ponto A para um ponto B, ele deixa no ponto A uma referencia para a sua nova localidade B. A grande vantagem deste princípio é a sua simplicidade, já que assim que a entidade for localizada por um serviço de nomes comum, ela poderá ser encontrada seguindo-se a rota dos ponteiros criada pela máquina.

Porém muitas desvantagens existem neste princípio, a começar pela quantidade de ponteiros que a mensagem terá que percorrer até encontrar a entidade, caso tenhamos um dispositivo que muda de endereço muitas vezes, este caminho será muito longo.

Um outro problema é que caso algum ponto intermediário, entre a sua localização atual e a sua primeira localização, caia o endereço daquela entidade será perdido.

Localização de entidades por hierarquia

Na localização de entidades por hierarquia em uma rede local, há uma organização das máquinas em em vários níveis, partindo de um nível raiz, contendo apenas uma máquina, a qual possui uma lista de todos os identificadores de entidades que estão nos níveis inferiores. Neste sistema, cada entidade possui uma lista de todas as entidades que estão abaixo dela, criando algo como o mostrado na figura abaixo:
Figura 1: Exemplo de sistema de nomes or hierarquia (imagem original em http://www.ai.sri.com/dgeo/images/geoweb-small.gif)

Para buscar uma entidade neste sistema, primeiro é realizado uma busca local. Por exemplo se você estiver dentro de um diretório, representado pelo quadrado inferior da Figura1 caso o conteúdo buscado não esteja naquele nó, ele irá ao nó superior e tentará buscar as informações lá. Caso não ache ele irá subindo até chegar ao nó raiz, o qual contem endereço de todas as máquinas da rede e saberá direcionar a requisição para o local onde se encontra aquela entidade.

Cada nó contém as informações de todas as entidades que estão nas hierarquias inferiores e portanto, quanto mais alto na hierarquia a busca tem que ir, mais lenta ela se torna.

Nos serviços de localização de entidade por hierarquia, uma operação de inserção, assim como uma operação de remoção acontece de baixo para cima, ou seja, a entidade é inserida no nó onde ela fica e o endereço desta entidade será repassado para o seu pai e isso se repete até que o endereço da entidade inserida seja repassado para o nó raiz.

Nomeação estruturada

As estruturas de nomeação apresentadas até agora são muito interessantes para as máquinas, já que os nomes são todos em array de bytes, a nomeação estruturada é utilizada para definir nomes compreensíveis por nós humanos. Neste tipo de nomeação os nomes são armazenados como strings e eles são utilizados em arquivos, nome de máquinas e até na internet, para dar nome aos sites.

Existe um pedaço do sistema onde são armazenados os nomes das entidades que é chamado de namespace, ou espaço dos nomes.

Considere como exemplo a maneira como os arquivos do sistemas UNIX são nomeados, os dados referentes aos nomes são armazenados em quatro áreas, Boot block, Superblock, inodes e datablocks.

Nos boot blocks ficam armazenados as informações referentes ao boot do sistema, o superblock contem informações referentes a todo o sistema de arquivo, como o seu tamanho, quais blocos do disco não estão alocados, quais inodes ainda não foram utilizados. Os inodes contem informações de onde os arquivos estão armazenados, quem é o dono, quais são as permissões de cada arquivo, data de criação e data de atualização. Os datablocks são onde os dados dos arquivos ficam armazenados.

Exemplos

Como exemplos de sistemas de nomenclatora temos o DNS e o LDAP.

O DNS é responsável por traduzir os nomes dos websites da internet em endereços de localização, ele funciona como um mapeamento, e ele funciona de uma maneira distribuída.

Por exemplo quando digitamos o endereço do estado de São Paulo em nossos browsers www.sp.gov.br a primeira parte deste endereço a ser identificada é o .br, que diz que o site é armazenado no Brasil, com isso a requisição é transferida para um servidor da Fapesp, orgão responsável pelos domínios no Brasil, lá ele irá analisar a segunda parte do endereço .gov o que fará que a requisição passe pelo servidor que armazena os nomes dos sites de governos (.gov.br), ali ele achará o endereço do servidor que contém o site do governo do estado. Mesmo depois de achar este endereço, a requisição ainda pode ser redirecionada para uma ou um conjunto de máquinas dentro de um cluster, que irá atender a sua requisição.


Apresentação

 

Nenhum comentário:

Postar um comentário