|
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 é:
- permitir que aplicações encontrem objetos pelo
nome
- controlar o acesso de escrita aos objetos compartilhados
- garantir a identidade dos SharedSpaces envolvidos
- 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.
|