Cómo diseñar una aplicación P2P

8

[Movido aquí por sugerencia de usuarios de SO (10k SO +) ]

Me gustaría desarrollar una aplicación de igual a igual. Si bien tengo mucha experiencia en aplicaciones LOB, soy nuevo en el campo P2P.

Tengo una idea aproximada de cómo deberían funcionar las cosas, pero necesito algunos detalles más para completar mi comprensión.

Lo que sé (creo) que debo hacer:

  • Una proporción importante de clientes necesita habilitar conexiones entrantes (reglas de uPnP / NAT de ala)
  • Los nodos deben compartir otros nodos conocidos para proporcionar resistencia si algún nodo en particular se cae
  • Se requiere alguna forma de sincronización / búsqueda de ruta para enviar datos entre clientes arbitrarios
  • Posiblemente, algún rastreo de recursos para diferenciar entre clientes "tontos" y "supernodos" más potentes para manejar la sincronización / intercambio de listas de nodos y tal vez transmitir mensajes
  • Los clientes sin soporte entrante deben mantener abierta una conexión saliente a través de la cual pueden recibir información de nodos para conectarse

En resumen, espero ofrecer (al principio) un servicio de chat / mensajería que no dependa de una conexión a ningún servidor central en particular. Si bien imagino que tendré que suministrar una serie de "supernodos" centralizados para comenzar (o después de actualizaciones significativas), estos deberían ser opcionales una vez que se haya establecido una red P2P funcional.

Puedo ver una serie de problemas y no sé cómo abordarlos. Principalmente cómo ...

  • Autenticar usuarios a otros nodos sin una autoridad central para verificar
  • Coordine qué nodos saben sobre qué otros nodos (número mínimo-máximo / por latencia / ???)
  • Permitir que un usuario determinado determine si otro usuario (o nodo) está en línea
  • Lidiar con una situación en la que 2 grupos de nodos están físicamente desconectados (sin aire) y cómo volver a sincronizar la reconexión de los grupos
  • Etcétera etcétera

Sé que esta es una pregunta bastante abierta, por lo que si bien se agradecerían los patrones de diseño de alto nivel, lo que realmente estoy buscando es una guía decente sobre cómo otros han manejado estos problemas (y los que aún no he considerado )

Básico
fuente
¿La etiqueta de la aplicación web es intencional? Si es así, ¿qué, en su opinión, constituye una aplicación web p2p ?
svidgen
@svidgen: No es irrazonable, que el enjambre podría ser un servidor web agrupado.
Steven Evers
@svidgen Buena captura, iba a hacer la pregunta un poco más grande, pero cambié de opinión, así que debería eliminar esa etiqueta. Gracias
Básico
1
Eche un vistazo a BitTorrent y DHT y los principios y tecnologías que utilizan. Con decenas de años de experiencia, ambos han abordado la mayoría de los problemas que le gustaría abordar. Esto realmente es demasiado amplio.
CodeCaster
@CodeCaster Estoy empezando a pensar que me estás acosando;)
Básico

Respuestas:

5
  1. Diseñar un protocolo y construir una aplicación en él es un gran proyecto. Tome la mayor cantidad posible de los protocolos existentes.
  2. Los protocolos más relevantes (más allá de Skype, que es un mensaje de igual a igual, pero su protocolo es secreto) son aquellos que proporcionan recursos a través de la red de igual a igual, lo que significa especialmente la parte de TOR que proporciona el dominio .onion y la red libre .
  3. Freenet maneja la mayoría de las cosas que enumera en "necesidad de hacer" y muchas de ellas también en TOR.
  4. La identidad de los usuarios debe ser criptográfica. Asociar identidades de palabras reales con las claves criptográficas requiere algún tipo de red de confianza como en PGP / GPG .
  5. Una razón importante para usar la mensajería entre pares es la privacidad. La mensajería extraoficial es básicamente obligatoria (especifica cómo debe funcionar la autenticación).
  6. La presencia también debe estar fuera del registro, básicamente un tipo especial de mensaje.
  7. Las desconexiones no son un problema especial más allá de la tolerancia a fallas generales. Para cada lado, parece que los otros nodos fallan y se unen nuevamente.
  8. Es posible que desee utilizar el protocolo como señal para algún protocolo de transmisión, probablemente sRTP . Ese protocolo maneja el recorrido NAT, por lo que puede clonar el mecanismo para el protocolo p2p.
Jan Hudec
fuente