Quand vous téléchargez quelque chose, le fichier est en morceaux par ipfs et stocké dans votre dossier cache (.ipfs).
Si vous vérifiez l'existence du fichier sur un autre pair du réseau (disons la passerelle principale, ipfs.io), ce pair vous demande le fichier et caches elle aussi.
Si plus tard vous éteignez votre démon et que vous pouvez toujours voir le fichier sur la passerelle, c'est probablement parce que la passerelle ou un autre pair sur le web l'a toujours mis en cache.
Lorsqu'un pair veut télécharger un fichier mais qu'il est à court de mémoire (il ne peut plus mettre en cache), il met à la poubelle les fichiers les plus anciens pour libérer de l'espace.
Si vous souhaitez vous plonger dans la technologie, consultez d'abord ces principes fondamentaux :
- comment fonctionne git
- tables de hachage décentralisées (DHT)
- kademlia
- arbres de merkle
Ce dernier devrait vous donner une idée du fonctionnement du mécanisme, plus ou moins.
Maintenant, répondons point par point
- Les blocs sont-ils également stockés localement sur mon système ?
Oui
- Où d'autre les données sont-elles stockées ? Sur d'autres pairs auxquels je suis connecté ? Parce que je suis toujours capable d'accéder au fichier si je ferme mon démon ipfs.
Tous les pairs qui demandent votre fichier le mettent en cache.
- Si cela est vrai, et que les données sont stockées à plusieurs endroits, la possibilité de perdre mes données est toujours présente, si tous les pairs se déconnectent du réseau ?
Vous perdez le fichier lorsqu'il n'est plus possible de reconstituer votre fichier à partir de tous les pairs qui en avaient une partie en cache (y compris vous-même).
- Est-ce que chaque pair sur le réseau stocke le fichier entier ou seulement une partie du fichier ?
On peut en obtenir juste une partie, imaginez que vous regardez un film et que vous vous arrêtez plus, ou moins, à la moitié... ça y est, vous avez mis en cache juste la moitié.
- Si une copie des données est distribuée sur le réseau p2p, cela signifie que les données sont dupliquées plusieurs fois ? Comment cela est-il efficace en termes de stockage ?
Lorsque vous regardez une vidéo sur YouTube, votre navigateur la met en cache (ce qui signifie une réplication !)... ipfs est plus efficace en termes de trafic, disons que vous éteignez le navigateur et que 2 minutes plus tard vous voulez la regarder à nouveau. Ipfs le récupère dans votre cache, YouTube vous oblige à le télécharger à nouveau. Il y a aussi un sujet intéressant sur le stockage delta (lié à git) et de l'endroit où vous l'obtenez (cela pourrait être dans votre réseau local... ce qui signifie une vitesse fulgurante) mais je veux m'en tenir aux questions.
- Nous stockons aussi les données téléchargées par d'autres pairs ?
Si vous obtenez des données, vous les mettez en cache pour...
- Configuration minimale requise pour exécuter IPFS ? Nous avons juste besoin d'un stockage abondant, pas nécessairement d'un système puissant ?
Le démon principal est écrit en go. Go est efficace mais pas autant que de l'écrire en C++, C, Rust... De plus, la technologie est assez jeune et elle s'améliorera avec le temps. Plus vous avez d'espace, plus vous pouvez mettre en cache, la puissance du CPU n'est pas si importante.
Si vous êtes intéressé par les moyens de stocker des données de manière p2p, voici quelques liens vers des projets intéressants.