Busca em sistemas Peer-to-Peer
Este projeto foi inspirado em um artigo
publicado pelo Prof. Shivakant Mishra, da Universidade do
Colorado.
Introdução
Sistemas peer-to-peer são sistemas descentralizados e não
hierárquicos. Os membros de um sistema peer-to-peer não estão
divididos claramente entre clientes e servidores (podem ser vistos
como clientes e servidores ao mesmo tempo). Neste projeto, vamos ver
como estes sistemas podem ser utilizados para o compartilhamento de
informações. Exemplos práticos são o Gnutella e Napster.
Fase 1
Nesta fase, cada nó do sistema deverá ser capaz de armazenar um
conjunto de pares do tipo (chave, valor). Todas as chaves são
conhecidas no ínicio do sistema. Todas as ligações entre os nós são
estáticas e todos os nós se conhecem. Qualquer nó pode disparar uma
busca e obter o resultado. Não é necessário prever casos de falha.
Fase 2
Nesta fase, cada nó deverá conhecer apenas um sub-conjunto dos nós do
sistema. Se um nó quiser fazer uma busca por uma chave, esta busca
deverá ser propagada pelo sistema até ser encontrado o valor ou até se
concluir que este valor não está armazenado no sistema. Caberá a cada
grupo decidir sua estratégia de busca. Pode-se considerar que todas as
chaves são conhecidas no início do sistema.
Nós também podem falhar e, neste caso, as chaves armazenadas ficarão
inacessíveis (ainda que temporariamente). O sistema não deve deixar de
funcionar devido à falha de um nó.
Fase 3
Nesta fase, novos nós podem entrar ou sair do sistema e novas chaves
podem ser incluídas ou removidas. Um novo nó deve ser apresentado a um
conjunto de vizinhos e pode receber parte das chaves armazenadas. Um
nó que deseja sair do sistema deverá distribuir suas chaves pelos nós
vizinhos. Um nó com muitas chaves também pode distribuí-las pelos seus
vizinhos, bem como um nó com poucas chaves pode se oferecer para
armazenar um número maior de chaves.
Caso o grupo tenha quatro pessoas, um tópico adicional (veja lista
abaixo) já deve ser contemplado.
Sugestão de tópicos adicionais
- Estratégias avançada de busca: o algoritmo de busca
baseados em muitas requisições (flooding) podem não escalar bem e
novas estratégias podem ser pesquisadas e implementadas.
- Segurança: o acesso a algumas chaves pode ser feito
apenas mediante a apresentação de uma senha; os valores devem trafegar
criptografados pela rede.
- Replicação: para aumentar a disponibilidade e eficiência,
algumas ou todas as chaves podem estar replicadas no sistema. Neste
caso, deve-se estabelecer uma estratégia para replicação e também um
controle para atualização destas réplicas.
- Recuperação: o estado do nó deve ser gravado de tempos em tempos
em memória estável (disco) e após a falha de um nó, este pode ser
novamente incorporado ao sistema a partir deste estado gravado.