Next: Transferência de Arquivos
Up: Arquitetura
Previous: Arquitetura
  Sumário
Cada usuário será considerado um nó do sistema, que, como já foi mencionado,
pode atuar como um cliente e servidor.
Cada nó
mantém uma conexão com um número
limitado de outros nós.
Chamamos esses nós de nós amigos de
2.
Para fazer a busca por um arquivo, o nó
consulta seus amigos.
Cada amigo de
, por sua vez,
repassa a consulta para os seus nós amigos.
E assim repetidamente.
Cada nó consultado que possuir o arquivo procurado responde devolvendo
uma mensagem
.
Essas mensagens percorrem o caminho inverso ao da busca, ou seja, elas
trafegam pela rede em direção ao nó que originou a busca.
Observe que todas as consultas e as
respostas das consultas (i.e.,
) são executadas
de modo assíncrono3.
Toda mensagem
enviada por um nó contém as seguintes informações:
- uma lista dos arquivos desse nó que possuem
o mesmo nome do arquivo procurado,
incluindo o tamanho dos arquivos.
- uma referência para esse nó, de forma que o nó que iniciou a
busca (
) possa requisitar a tranferência de algum arquivo.
Com isso, o nó
deverá receber várias listas
de servidores que possuem a arquivo
desejado, e poderá escolher se conectar
a um ou mais desses servidores para receber
o arquivo.
Como a nossa rede de nós forma um grafo,
é possível que o mesmo nó receba duas consultas
de mesma origem.
Desse modo, cada mensagem de consulta terá um
.
Esse
é
utilizado para que cada nó identifique se já retransmitiu
ou não a consulta recebida.
Caso já tenha retransmitido, a consulta é ignorada.
A partir dessa descrição simplificada, observe
as seguintes características.
- Não é necessário existir,
um servidor central que armazena todas as informações
disponíveis no sistema.
- Somente os amigos de
sabem que ele realizou a busca
pela informação. Os amigos dos amigos de
desconhecem o
autor original da busca.
Ademais, nem mesmo os amigos de
sabem se a busca foi
de fato
iniciada por
, pois
poderia estar apenas repassando
a busca.
- O tempo de execução de uma busca e o número
de respostas obtidas são indeterminados.
Portanto, como utilizaremos um sistema de objetos distribuídos
(isto é, com chamadas a objetos remotos),
foi necessário realizar chamadas assíncronas.
Ou seja, a operação de busca oferecida pelo servidor não deve de
fato devolver a resposta.
Isso é feito posteriormente através de uma operação oferecida
pelo cliente, que é chamada pelo servidor.
- Para entrar no sistema,
um usuário precisa conhecer apenas
um outro usuário que já esteja dentro.
A partir desse outro usuário, é possível realizar uma operação
semelhante à busca por informação, mas neste caso a busca é
por outros nós do sistema.
Em relação ao item 3, o protocolo Gnutella
define medidas para controlar a abrangência da propagação
da busca e o número de respostas repetidas.
Essas medidas estão implementadas em nosso sistema,
e estão descritas em [1].
A saber, são as seguintes:
- TTL (Time To Live) ou TDV (Tempo De Vida)
Um contador agregado a cada mensagem, que é
decrementado a cada vez que a mensagem é repassada para outro nó. Há
também um contador para o número de nós pelos quais a mensagem
já passou (TTL-reverse).
Note que o nó que recebe a mensagem não é obrigado a simplesmente
decrementar o TDV.
- Tabela de mensagens recebidas Relaciona um identificador de mensagem
(único no sistema) com o cliente que enviou a mensagem.
Next: Transferência de Arquivos
Up: Arquitetura
Previous: Arquitetura
  Sumário