IPFS - #5 - Dateien verschwinden? Permanent, Persistent? Was bedeutet das bei d.tube?

Header

IPFS wird an manchen Stellen als "permanent Web" bezeichnet oder zumindest ist das Teil der Zielstellung.

Vielen ist in den letzten Wochen aufgefallen, dass nicht jede Datei, die er/sie ins IPFS geladen hat auch heute noch verfügbar ist.

Ich möchte heute 2 Fragen klären:

  • Wie kann das dann permanent Web heißen?
  • Warum sind Dateien nicht mehr verfügbar?

Beispiele für die "permanent Web" Aussage

Blockchains
IPFS and the Blockchain are a perfect match! You can address large amounts of data with IPFS, and place the immutable, permanent IPFS links into a blockchain transaction. This timestamps and secures your content, without having to put the data on the chain itself.

Quelle: https://ipfs.io

"The InterPlanetary File System Wants to Create a Permanent Web"

Quelle: Artikel

"IPFS and the Permanent Web"- Juan Benet of Protocol Labs

Quelle: YouTube Video

3.5.3 Object Pinning
Nodes who wish to ensure the survival of particular objects
can do so by pinning the objects. This ensures the
objects are kept in the node’s local storage. Pinning can be
done recursively, to pin down all linked descendent objects
as well. All objects pointed to are then stored locally. This
is particularly useful to persist files, including references.
This also makes IPFS a Web where links are permanent,
and Objects can ensure the survival of others they point to.

Quelle: IPFS Whitepaper

"Objects are permanent"
At its best, it
could push the web to new horizons, where publishing valuable
information does not impose hosting it on the publisher
but upon those interested, where users can trust the content
they receive without trusting the peers they receive it from,
and where old but important files do not go missing. IPFS
looks forward to bringing us toward the Permanent Web.

Quelle: IPFS Whitepaper, Seite 9, Punkt 3.7

Was sind Objekte bei IPFS?

Unveränderbare, durch ihren Inhalt direkt adressierte Teile eines Merkle DAGs.
Einfacher ausgedrückt sind das Teile von dem, was früher eine Datei war oder Verweise auf weitere Teile.


In zweiten Post dieses Beitrags wird die Aussage getroffen Permanence != Persistance.

Laut duden.de bedeutet permanent:

dauernd, anhaltend, ununterbrochen, ständig

Außerdem sagt duden.de persistent bedeutet:

anhaltend, dauernd
(Chemie, Biologie) schwer abbaubar
(EDV) dauerhaft (über eine Arbeitssitzung hinaus) speicher- und erneut abrufbar

Das sieht für mich ziemlich ähnlich aus. Mal schauen, ob uns englisch weiter hilft:
Quelle: https://wikidiff.com/persistent/permanent

As adjectives the difference between persistent and permanent is that persistent is obstinately refusing to give up or let go while permanent is without end, eternal.

Dazu 2 Beispiele:

There was a persistent knocking on the door.
Nothing in this world is truly permanent.

Meine Interpretation davon ist jetzt: Permanent ist zeitlos und persistent hat einen Zeitbezug. Ohne diesen Verwendungsunterschied ist damit das Gleiche gemeint.


Permanent und persistent kommen nun in vielen Quellen vor. Der Post mit der Aussage "permanent != persistent" klingt am Anfang einleuchtend. Und ja es gibt auch einen kleinen Unterschied: Links sind zeitlos immer gleich, also nennt man sie permanent. Dateien auf einem System können eine Zeit lang existieren und sind damit persistent. Auf das Problem bezogen, dass Dateien im IPFS nach einer Zeit nicht mehr erreichbar sind, ist das aber Krümelkackerei.

Also lieber weiter mit Frage 2:

Warum sind Dateien nicht mehr verfügbar?

Jede IPFS Node hat einen lokalen Speicher. Das heißt, alles was ihr aus dem IPFS ladet ist irgendwo auf einem lokalen Speicher vorhanden. Die Nodes unterhalten sich untereinander und tauschen "Dateien" aus. Das heißt meine Node hat am Ende des Tages einen Speicherplatz von X GB und der wird durch von mir hinzugefügten und mir völlig unbekannten Dateien belegt. Wenn meine X GB voll zu werden drohen, kann meine Node lokal schauen, welche Dateien ich nicht behalten möchte (welche nicht von mir sind) und diese einfach löschen.
So funktioniert stark vereinfacht das System mit den Nodes untereinander.

Das heißt ein Grund, warum mein Video nicht mehr geht könnte sein:

  • Ich habe es auf meiner Node geadded und meine Node ist nicht mehr im IPFS Netzwerk.
  • Jeder andere hält die Datei im Standardfall nur "temporär".

Um das technisch noch etwas zu belegen hier die Quellen:

Im Whitepaper findet ihr die Aussage:
Damit ein Objekt überlebt, kann man es anpinnen. Durch das Anpinnen bleibt es auf dem lokalen Speicher der Node.

Jetzt folgt die Frage: Was gibt es zu überleben?
Antwort: Den Garbage Collector.

Wenn der Speicher zur Neige geht, kann man in der Config der Node einstellen, wie der "Müllsammler" arbeiten soll.
Details findet ihr auf github.
Ein kurzer Ausschnitt:

KeyDescriptionDefaultwert
StorageMaxA soft upper limit for the size of the ipfs repository's datastore. With StorageGCWatermark, is used to calculate whether to trigger a gc run (only if --enable-gc flag is set).10GB
StorageGCWatermarkThe percentage of the StorageMax value at which a garbage collection will be triggered automatically if the daemon was run with automatic gc enabled (that option defaults to false currently).90
GCPeriodA time duration specifying how frequently to run a garbage collection. Only used if automatic gc is enabled.1h

Im Prinzip kann man einstellen, wann der GC seine Arbeit starten soll.

Jetzt folgt die Frage: Was macht der GC dann?
Antwort: Er wirft alles weg, was nicht angepinnt ist.

Beleg dazu: https://ipfs.io/docs/commands/#ipfs-repo-gc

ipfs repo   -   gc is a plumbing command that will sweep the local
set of stored objects and remove ones that are not pinned in
order to reclaim hard disk space.

Vielleicht fragt ihr euch jetzt: "Wie kann ich etwas anpinnen auf meiner Node?"
Antwort: Das passiert automatisch beim add. Oder ihr nehmt einen extra Befehl für Dateien, die nicht von euch sind.

Beleg für Aussage 1 - passiert automatisch: https://ipfs.io/docs/commands/#ipfs-add

--pin    bool - Pin this object when adding. Default: true.

Hinweis für Aussage 2 - manuell machen
https://ipfs.io/docs/commands/#ipfs-pin-add

ipfs pin add <ipfs-path>... - Pin objects to local storage.

Das heißt der Standardwert ist einfach, dass eure "eigenen Dateien" auf euren Nodes angepinnt werden. Dafür müsst ihr nichts extra tun.
Dieses Setting ist aber nur bei euch lokal. Jede einfache andere Node bekommt davon nichts mit (Ich rede nicht von Clustern...).

Warum scheint es dann den Effekt zu geben, dass d.tube Videos nach einer Weile ohne Zugriff einfach nicht mehr aufrufbar sind?

Die Frage kann ich noch nicht einfach beantworten. d.tube ist nur ein Frontend und benutzt IPFS nur. Ihr habt selbst bei d.tube 2 Möglichkeiten:

  • Ihr könnt direkt einen IPFS-Link angeben.
    • Dann habt ihr das Video selbst auf eine IPFS Node gepackt.
    • Solange diese läuft, sollte auch das Video laufen.
  • Ihr wollt von IPFS nichts wissen und nutzt d.tube auch für den Upload (das sind wohl die meisten Leute)
    • Dann wisst ihr nicht, wohin d.tube das Video übergibt. Es wird schon auf irgendeiner Node landen. Was dort damit passiert, wisst ihr nicht.
    • Theoretisch müsste eine Node die Daten lokal halten. Aber wenn ich die Infrastruktur bezahlen müsste, würde ich mir vermutlich ein System überlegen, dass inaktive Sachen löscht, damit ich nicht X TB an "Müll" vorhalten und bezahlen muss.
    • Die Annahme, dass d.tube für euch die Daten kostenfrei für immer hält ist vermutlich falsch. Auch das müsste refinanziert werden. d.tube an sich ist kein Infrastrukturbetreiber, sondern einfach nur ein Frontend.
H2
H3
H4
3 columns
2 columns
1 column
10 Comments