Shob Logo Última Atualização: 8 de dezembro de 2002 18:34 BRST

Arquitetura interna - Servidor de Nomes

Um sistema distribuído irá rodar em diversas máquinas. Neste texto, usamos o termo aplicação para um conjunto de processos Java que roda em uma máquina e sistema para o conjunto das aplicações no ambiente distribuído. Portanto, cada aplicação terá sua própria instância da classe SharedSpace, que abreviaremos para um SharedSpace. É importante não confundir um SharedSpace com a abstração de Shared Space, algumas vezes chamado de Global Space ou Espaço Global, em português.

A primeira operação necessária para entrar no espaço global é conectar o SharedSpace a um servidor:

 11:        //cria um SharedSpace
 12:        SharedSpace shob = new SharedSpace("localhost", 0);
 13:
 14:        //connecta o SharedSpace ao servidor de nomes
 15:        shob.connect("localhost", 5000);

Os parâmetros hostname e port são requeridos e servem para acessar o servidor de nomes shob. @link{visao_geral:servidor de nomes}. A partir deste momento, a aplicação terá acesso ao espaço global e pode compartilhar objetos, bem como acessar objetos compartilhados.

Cada SharedSpace é identificado no servidor de nomes por uma URL. O papel do servidor é:

  1. permitir que aplicações encontrem objetos pelo nome
  2. controlar o acesso de escrita aos objetos compartilhados
  3. garantir a identidade dos SharedSpaces envolvidos
  4. gerar timestamps para os objetos compartilhados

O primeiro trabalho é fácil de explicar: ao compartilhar um objeto, o servidor cria um mapeamento do nome do objeto (global name) com a URL que identifica seu dono. Quando um SharedSpace pede um objeto, primeiro encontra seu dono através do servidor de nomes; então comunica-se diretamente com ele para pedir uma cópia do objeto.

A segunda tarefa do servidor consiste em criar, para cada objeto em seu espaço global, um lock distribuído. Quando uma aplicação, através do SharedSpace, pede direito de escrita em um objeto, o servidor marca que aquela SharedSpace está escrevendo no objeto, e outras SharedSpaces só poderão escrever após a conclusão desta transação. As leituras são livres, cada SharedSpace usa sua cópia.

Terceiro: o servidor autentica os SharedSpaces envolvidos. Na verdade, o servidor de nomes apenas garante que os SharedSpaces não são substituídos sem que ele perceba. A autenticação é feita por meio de pares de chaves criptográficas geradas no momento em que o SharedSpace entra no espaço global. Veja mais em @link{segurança}.

Quarto: um sistema distribuído usando SharedObjects não precisa se preocupar com fusos horários nem com sincronização de relógios para o correto funcionamento, pois todos os timestamps usados no sistema são gerados pelo servidor. Timestamps marcam quando foi a última alteração feita num objeto compartilhado, e os SharedSpaces comparam seus valores com o atual para saber se o cache precisa ser atualizado.