Un site web en p2p

a marqué ce sujet comme résolu.

Bonjour à tous,

J'ai eu une idée de projet complètement dingue, sauf que j'ignore si techniquement c'est réalisable ou non. Mon petit doigts me dit que oui, n'empêche qu'avant de me lancer dans un Proof of Concept j'aimerai avoir vos avis, voir même vos conseils sur les outils qui existerai déjà à ce sujet.

Mon idée est assez simple, un site web en p2p. Concrètement cela voudrai dire que le site ne devrai pas avoir besoin de serveur pour vivre, juste une page web en point d'entrée et c'est tout.

Cela veut dire que les fichiers composant le site devraient être distribué en p2p mais surtout… que la base de données le soie aussi.

Pour que cela soie possible il n'y a qu'une seule possibilité, que le site soie réalisé en javascript, avoir un script coté serveur rendraient le principe d'un tel site totalement caduque. Le partage des fichiers sources sa existe déjà, enfin… sa a existé à un moment mais sa a été racheté par yahoo (voir https://peercdn.com/ ). Si sa a existé même à l'état de prototype c'est qu'il y a moyen de reproduire l'effet désiré.

Là ou le problème devient plus corsé c'est au niveau de la base de données. Il faut qu'elle puisse être distribuée tout en restant intègre et sans pouvoir être corrompue par un utilisateur mal intentionné.

Concernant la corruption on pourrai imaginé qu'une modifications dans celle-ci doit être validée par un certain nombre de pair comme avec les Bitcoin, cependant il faut aussi réfléchir à la charge que représenterai un tel partage.

Imaginons que l'on veuille de cette manière partager un forum, au début il y a peu de messages, mais plus le temps passe, plus il y a des utilisateurs et des messages, donc plus la base de données devient volumineuse.

Après plusieurs années on pourrai sans trop de problème parlé en Go de données et si chaque utilisateur doit stocké de manière intégrale la base de données sa fait beaucoup quand même, surtout un nouvel arrivant qui devrai récupérer toutes ses données…

Cependant nul n'est obliger de stocker l'intégralité de la bdd, pour peu que l'ensemble des utilisateurs connecté possède ensemble l'intégralité (ratio de 1) sa suffit. Pour peu que le forum aurait en continu une centaine d'utilisateurs connecté théoriquement chaque utilisateur pourrai ne conservé que 1% de la base de données (en pratique on parlerai sans doute de quelque chose autour de 5%).

Bon tout sa c'est joli en théorie… mais en pratique, est-ce qu'un tel système peu tenir la route ? existerai t'il des outils qui fonctionne de cette manière ? (j'ai cherché mais j'ai rien trouvé).

Merci d'avance pour votre aide dans cette recherche de projet fou.

Cordialement, La source.

+2 -1

HTTP n'est pas un protocol P2P.

Donc soit tu distribues des trucs par P2P, soit tu fais un site web. Mais tu fais pas un site web en P2P.

C'est comme si tu proposes de faire un tricycle a 2 roues. C'est possible, mais c'est pas un tricycle.

+0 -1

Ben… moi je veux bien mais pourquoi il y a t'il toute cette hipe autour de webRTC dans ce cas ? où l'on peu faire des discutions audio/vidéo sans passé par des plugin tier et surtout sans serveur, (exemple Hello de Mozilla) ?

+1 -0

Reprenons car j'ai l'impression de ne pas avoir été assez clair.

Mon but est de créer un forum ayant la capacité de continuer de fonctionner même si on enlevait le serveur hébergeant ledit forum.

Pour se faire, il faut forcément que les utilisateurs jouent eux-même le rôle de serveur, d'où mon raisonnement p2p, un utilisateur visite le site, il reçoit le code js permettant de le faire fonctionner des autres utilisateurs ayant une page ouverte sur le site et partage lui-même les données qu'il aura reçu.

Autant partager le fichiers sources sa ne pose pas trop de problème en soie, il faut juste garder un point d'entrée pour que les utilisateurs puisse commencer à demander aux autres le contenu. Enfin, de ce que j'ai lu webRTC demande quand même un serveur pour mettre en relation les clients entre eux, cependant quand on sais que le protocole bittorrent met en place la DHT on peu se demandé si un tel mécanisme ne pourrai être possible du coup, fin bref… à la limite, si c'est la seule chose à maintenir pour que cela fonctionne c'est déjà pas si mal.

Comme je l'ai dit, la difficulté vient de la base de données, j'ai beau faire des recherches visiblement rien n'existe dans ce domaine, à force de réfléchir à la question je me rend compte qu'il y a quand même beaucoup de contrainte pour que cela fonctionne, néanmoins le principe même de la DHT pourrai également s'appliquer à la bdd.

@Oprax j'allais poster quand tu as répondu, j'ai regardé ton lien et effectivement c'est ce que je souhaite obtenir, à la différence que je souhaite un site dynamique et non statique (enfin… c'est pour sa que je supprime la composante langage serveur sinon effectivement sa ne fonctionnerai pas) la difficulté étant au niveau de la base de données. Par ailleurs, l'idée serai dans la mesure du possible de pouvoir faire cela avec un simple navigateur sans avoir besoin pour l'utilisateur final de télécharger un logiciel spécifique.

Merci d'avoir partager ce lien, c'est quand même vachement intéressant :)

+1 -0

Par ailleurs, l'idée serai dans la mesure du possible de pouvoir faire cela avec un simple navigateur sans avoir besoin pour l'utilisateur final de télécharger un logiciel spécifique.

Tu te rends certainement compte à ce point que ton navigateur ne supporte qu'HTTP, HTTPS et éventuellement FTP, non ?

+0 -0

Certes, d'où mon raisonnement de l'utilisation de webRTC.

On est bien d'accord, pour que tout ceci fonctionne il faut un point d'entrée en http(s), une page basique permettant la mise en relation avec les autres utilisateurs. Cette page pouvant être n'importe quoi, un bête fichier html quoi.

Une fois cela fait, tout le reste se passerai entre les utilisateurs donc sans passé par un quelconque serveur central.

+0 -0

C'est réalisable (c'est même ce que je pense être la finalité d'internet, mais tout le monde n'est pas du même avis) : le protocole BitTorrent pour pages Web (bittorrent://) est apparu, actuellement utilisé par UN navigateur pour UNE page web : Maelstrom de… BitTorrent. Alors il va sûrement falloir attendre encore un peu pour que ce genre de projet soit réellement réalisable (le jour où la plupart des PC auront un uptime de disons… 80% minimum (bah ouais sinon certaines parties du site seront rarement accessible, et ça fout le bordel :D) ?).

+2 -0

Bonjour,

Alors après une nuit de sommeil pour décanté tout sa j'ai mieux ciblé les différentes contraintes auxquelles faire face.

Donc, pour qu'un tel système puisse fonctionner il faut un point d'entrée sur le réseau. Ce point d'entrée est une page html contenant du javascript, en théorie on peu même imaginer que cette page contienne tout le code de l'application. De cette manière, le simple fait de répliquer cette unique page réplique le point d'entrée, ainsi un utilisateur peu très bien décider de sauvegardé la page et il se retrouve avec son point d'accès.

Un premier soucis apparaît quant au besoin de pouvoir mettre à jour l'application, soit on met à jour cette page (mais du coup quid des utilisateurs qui ont justement sauvegarder cette page ailleurs) soit on donne la capacité au réseaux de pouvoir proposer des mise à jour.

Si on permet au réseau de diffuser ses mise à jour, il faut vérifier que c'est bel et bien une mise à jour légitime de l'application, pour se faire je pense qu'il faut faire appel à la cryptographie en signant les mise à jour avec une clé privée, ainsi lorsqu'un utilisateur se voie proposer une MaJ il lui suffit de vérifier que cela correspond bien à la clé publique et en avant.

Une fois sur le réseau… il faut communiquer avec les autres utilisateurs, c'est ce qui forme le réseau ^^ Après avoir fais des recherches j'ai trouvé plusieurs draft implémentant la DHT en javascript, je pense donc que c'est réalisable, donc pour le moment je ne vois pas de problème majeur.

Encore une fois, on arrive à la base de données, j'ai fais pas mal de recherches mais je n'ai encore rien trouvé de concluant jusqu'ici (ou alors je ne tape pas les bon mots clé). Mais sur le principe je pense que c'est réalisable. Concrètement il y a deux aspects, d'un coté la diffusion de celle-ci de l'autre son utilisation (recherche et modification).

Pour la diffusion je pense qu'il faut s'inspirer de Bittorrent, grâce à la DHT on sais quoi est où, les utilisateurs diffusant dans ce cas en priorité les éléments les plus rare, pour peu qu'il y aie toujours un minimum d'utilisateurs connecté simultanément et que la base de données ne prend pas des proportion dantesque celle-ci devrait toujours être au moins disponible dans son intégralité sur le réseau. Concernant la recherche dans la base de données on reste avec le Bittorent et la DHT.

Pour les modifications il faut s'inspirer des Bitcoins, un utilisateur (identifier grâce à une paire de clé publique/privée) veut réaliser une modification, pour que celle-ci puisse avoir lieu elle doit être validée par le réseau.

D'ailleurs (arrêté moi si je me trompe) mais avec un tel système pour identifier les utilisateurs vient les droits. Pour peu qu'on puisse identifier un utilisateur on peu à partir de ce moment lui attribuer des droits et donc permettre à des utilisateur de devenir modérateur par exemple (et ainsi éviter que cela devienne l'anarchie).

Donc finalement sauf si j'ai fait une grosse erreur de raisonnement rien techniquement s'oppose à la mise en place d'un site dynamique qui existerai grâce à un réseau p2p. Le tout c'est soit trouvé une base de données fonctionnant comme je l'ai décrit… ou de devoir la créé moi même (sa va pas être de la tarte :D )

+1 -0

Si tu souhaites faire du p2p, sauf erreur de ma part à un moment ou à un autre, tu vas fatalement avoir besoin d'un serveur de tracking et/ou hébergeant des clés de hashage pour la vérification des contenus servis. Donc à quoi bon ?

Par ailleurs, admettons que le partage de data via webRTC soit réalisable simplement. Là encore, il va te falloir un genre d'annuaire pour pouvoir lister qui dispose de quoi. Donc un serveur.

Toujours par ailleurs, admettons que tout ça fonctionne bien. Comment comptes-tu gérer la BDD ? Tu comptes l'héberger elle aussi dans le navigateur du client ?

+0 -0

Merci pour ta réaction Coyote

J'ai néanmoins l'impression de ne pas me faire comprendre, Le serveur de tracking… il y a quelques années j'aurai dis oui, si on reprend le protocole BitTorrent, la première utilisation possible était le besoin de récupérer un fichier .torrent, ce fichier détenait un tas d'informations entre autres le serveur de tracking. Mais depuis les choses ont évoluer et sont apparut les liens magnet, le fonctionnement diffère de par l'absence de serveur central à un moment ou à un autre. Je revoie sur le principe de la DHT (wikipedia) pour en savoir plus.

Concernant la base de données, c'est effectivement toute la question ^^ je crois que l'on peu concevoir une base de données distribuée (p2p) en assemblant ce qui se fait pour le protocole bitTorrent pour la diffusion de celle-ci et ce qui se fait en BitCoin pour que n'importe qui ne fasse pas n'importe quoi avec les bouts de bases de données qu'il possède. Je crois aussi qu'un tel moteur de base de données n'existe pas encore, va falloir l'inventer :D

+0 -0

Je suis vraiment curieux de savoir comment, en Javascript, deux nœuds d'un même réseau vont pouvoir communiquer. (je dis pas que c'est pas possible, mais ça aiguise ma curiosité).

A mon avis si tu dois commencer quelque part (proof of concept) y'a un vrai verrou technique là.

Pis en plus, académiquement parlant, c'est intéressant.

(implémentation alakon : deux serveurs node qui dialoguent par websockets, mais ça veut dire "installer" quelque chose)

+1 -0

@Javier: C'est possible grâce à webRTC, les navigateurs moderne le supporte via leurs préfixe (moz-*) mais c'est un standard à en devenir (ou qui l'est déjà, je sais pas trop :D ).

Exemple avec une lib: http://peerjs.com/examples (une démo parlante est celle du chat en ouvrant deux onglets). A noté que dans cet exemple, c'est le serveur qui permet la mise en relation entre deux clients, mais une fois cette relation effectuée le serveur ne sert plus à rien.

@rom1504: Effectivement c'est extrêmement intéressant, ce que j'ai pas compris c'est qu'il dit utiliser son tracker… donc qui dit tracker dit serveur et donc que c'est pas encore totalement sa, d'autant que j'ai parcouru un peu les sources sur github et c'est très con… mais je ne vois pas où est-ce qu'il paramètre la liste de ses tracker justement.

+0 -0

Bonsoir,

J?ai pas tout lu et tout compris. Mais du côté de la base de donnée, la seule vraie base de donnée distribuée qui fonctionne à ce jour, c'est DNS. Par contre comme tu le sais, la distribution est hiérarchisée et bien organisée, mais chacun est maître absolu d'un bout de la base, il n'y a pas de vérification centrale.

+0 -0

Bonjour QuentinC,

Mouai… d'accord sur le fait que chacun gère son bout comme il l'entends, mais l'architecture de DNS n'est clairement pas décentralisée, lorsqu'un client demande à accédé à un domaine dont il ne connait pas l'ip, il va d'abord interroger le DNS gérant le .com qui lui le redirigera vers un autre DNS et ainsi de suite, si les serveur gérant le .com deviennent inaccessible même s'il y a une certaines mise en cache, tôt ou tard tous les nom de domaines en .com deviendront inaccessible.

Durant mes recherches je suis tombé sur Yacy, c'est un moteur de recherche décentralisé, je n'ai pas vraiment creusé le fonctionnement encore, n'empêche que si sa fonctionne ils utilise une base de données distribuée de pair en pair (probablement un SGDB maison car je n'ai pas trouvé de référence à un SGDB justement)

Durant mes recherche je suis tombé sur un article (dont je ne retrouve plus le lien) parlant d'un problème rarement mis en avant, on présente le webRTC comme un nouveau protocole de communication p2p, il n'empêche que webRTC à tout de même toujours besoin de serveurs, en gros il faut un serveur signaling, un serveur STUN et TURN (tout est expliqué ici).

Donc malheureusement aujourd'hui en javascript il n'est pas possible de faire un système 100% décentralisé, c'est fort dommage car je rejoins Breizh, la finalité d'internet est un système qui devrait être complètement décentralisé.

Je vais tout de même tenter d'écrire un document formalisant un peu mieux comment une tel base de données devrait fonctionner, mais je crains que l'idée d'un site web totalement décentralisé ne soie pour le moment en tout cas encore qu'un doux rêve

+1 -0

il n'empêche que webRTC à tout de même toujours besoin de serveurs, en gros il faut un serveur signaling, un serveur STUN et TURN (tout est expliqué ici).

C'est bien ce qui me semblait avoir lu, d'où mon interrogation plus haut.

Je comprends pas comment techniquement deux browsers peuvent communiquer sans passer par l'intermédiaire d'un serveur, même s'il ne joue que le simple rôle de proxy, ou de routage des messages.

Ca m'intéresse (sur le plan curiosité) de voir si c'est possible, mais techniquement je ne vois pas de solutions :\

Pour les BDD distribuées, je n'ai pas du bien comprendre le sens de la question et surtout la réponse "y'a que DNS qui fonctionne". En pratique y'a plein d'implémentations de BDD distribuées non ? Cassandra etc. ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte