Como arquitetar um aplicativo P2P


8

[Movido aqui por sugestão de usuários de SO (10k SO +) ]

Eu gostaria de desenvolver um aplicativo ponto a ponto. Embora tenha muita experiência em aplicativos LOB, sou novo na arena P2P.

Tenho uma ideia aproximada de como as coisas devem funcionar, mas preciso de mais alguns detalhes para preencher meu entendimento.

O que eu sei (acredito) eu preciso fazer:

  • Uma proporção significativa de clientes precisa habilitar conexões de entrada (regras ala uPnP / NAT)
  • Os nós devem compartilhar outros nós conhecidos para fornecer resiliência se algum nó em particular for desativado
  • É necessária alguma forma de sincronização / localização de rota para enviar dados entre clientes arbitrários
  • Possivelmente algum recurso sniffing para diferenciar entre clientes "burros" e "supernós" mais poderosos para lidar com sincronização / compartilhamento de listas de nós e talvez retransmitir mensagens
  • Clientes sem suporte de entrada devem manter aberta uma conexão de saída através da qual podem receber informações de nós aos quais se conectar

Em resumo, espero oferecer (a princípio) um serviço de chat / messenger que não dependa de uma conexão com nenhum servidor central em particular. Embora eu imagine que precise fornecer vários "supernós" centralizados para iniciar as coisas (ou após atualizações significativas), eles devem ser opcionais quando uma rede P2P funcional for estabelecida.

Vejo uma série de problemas e não sei como resolvê-los. Principalmente como ...

  • Autentique usuários em outros nós sem uma autoridade central para verificar
  • Coordenar quais nós sabem sobre quais outros nós (número mínimo-máximo / por latência / ???)
  • Permitir que um determinado usuário determine se outro usuário (ou nó) está online
  • Lidar com uma situação em que 2 grupos de nós estão fisicamente desconectados (com espaço aéreo) e como ressincronizar na reconexão dos grupos
  • Etc etc

Sei que essa é uma pergunta bastante aberta, portanto, embora os padrões de design de alto nível sejam apreciados, o que realmente estou procurando é um guia decente sobre como os outros lidaram com esses problemas (e os que ainda não considerei ainda) )


A tag do aplicativo Web é intencional? Se sim, o que, em sua opinião, constitui um aplicativo da web p2p ?
svidgen

@svidgen: Não é irracional, que o enxame possa ser um host em cluster.
Steven Evers

@svidgen Boa captura, eu ia tornar a pergunta um pouco maior, mas mudei de idéia, então devo remover essa tag. Obrigado
Básico

1
Dê uma olhada no BitTorrent e DHT e nos princípios e tecnologias que eles usam. Com dezenas de anos de experiência, ambos resolveram a maioria dos problemas que você gostaria de resolver. Isso realmente é muito amplo.
CodeCaster

@CodeCaster Estou começando a pensar que você está me perseguindo;)
Básico

Respostas:


5
  1. Projetar um protocolo e criar um aplicativo nele é um projeto enorme. Tire o máximo possível dos protocolos existentes.
  2. Os protocolos mais relevantes (além do skype, que é um sistema de mensagens ponto a ponto, mas é secreto) são aqueles que fornecem recursos através da rede ponto a ponto, o que significa especialmente a parte do TOR que fornece o domínio .onion e o freenet .
  3. A maioria das coisas que você lista em "precisa fazer" é gerenciada pela freenet e muitas delas também no TOR.
  4. A identidade dos usuários deve ser criptográfica. A associação de identidades de palavras reais com as chaves criptográficas requer alguma forma de confiança na Web, como no PGP / GPG .
  5. Razão importante para o uso de mensagens ponto a ponto é a privacidade. As mensagens não registradas são basicamente obrigatórias (especifica como a autenticação deve funcionar).
  6. A presença também deve estar fora do registro, basicamente um tipo especial de mensagem.
  7. As desconexões não são um problema especial além da tolerância geral a falhas. Para cada lado, parece que os outros nós estão falhando e se unindo novamente.
  8. Você pode querer usar o protocolo como sinalização para algum protocolo de streaming, provavelmente sRTP . Esse protocolo lida com a passagem de NAT, para que você possa clonar o mecanismo do próprio protocolo p2p.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.