next up previous contents
Next: Transferência de Arquivos Up: Arquitetura Previous: Arquitetura   Sumário

Buscando arquivos na rede

Cada usuário será considerado um nó do sistema, que, como já foi mencionado, pode atuar como um cliente e servidor. Cada nó $p$ mantém uma conexão com um número limitado de outros nós. Chamamos esses nós de nós amigos de $p$2. Para fazer a busca por um arquivo, o nó $p$ consulta seus amigos. Cada amigo de $p$, 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 $M$. 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., $M$) são executadas de modo assíncrono3.



Toda mensagem $M$ enviada por um nó contém as seguintes informações:

Com isso, o nó $p$ 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 $id$. Esse $id$ é 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.

  1. Não é necessário existir, um servidor central que armazena todas as informações disponíveis no sistema.
  2. Somente os amigos de $p$ sabem que ele realizou a busca pela informação. Os amigos dos amigos de $p$ desconhecem o autor original da busca. Ademais, nem mesmo os amigos de $p$ sabem se a busca foi de fato iniciada por $p$, pois $p$ poderia estar apenas repassando a busca.
  3. 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.
  4. 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:


next up previous contents
Next: Transferência de Arquivos Up: Arquitetura Previous: Arquitetura   Sumário