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

in #ipfs7 years ago

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.
Sort:  

Moinsen,

leider gibt D.Tube selbst keine Auskunft, wie Videos behandelt werden. Im Subreddit von D.Tube hab ich mal die Frage gestellt und bin gespannt, was rauskommt.
Aber abgesehen davon, habe ich schon seit einiger Zeit überlegt, ob es Sinn macht, ein D-A-CH-IPFS-Node einzurichten, der guten Content aus diesen Ländern bereitstellt und archiviert. Ermöglicht werden könnte das über ein IPFS-Cluster, welches verschiedene Hashes bereitstellt (und somit auch die Geschwindigkeit erhöht wird).
Die Aussage, dass IPFS permanent/persistent sei, ist aktuell so gut wie gar nicht zu vertreten. Einer der Hintergrundgedanken von IPFS ist anscheinend auch die Selbstbereinigung. Content, den niemanden interessiert, wird irgendwann verloren gehen, interessanter Stuff bleibt aber auf dem lokalen Node und verbreitet sich immer weiter.
IPFS ist eh so ein Thema, welches von vielen Leuten verschieden aufgefasst ist. Dass es eine Art CDN ist, ist die falsche Auffassung. Das System kann nur funktionieren, wenn die User einen lokalen Node betreiben.
Und WTF ist der Kommentar lang 😨
BB,
JanSe

Wird beim Thema Recht auch noch interessant, weil es meines Wissens bis jetz noch keine Möglichkeit gibt Dateien gezielt aus dem IPFS Netzwerk zu löschen

Nuja, im Prinzip kannst du dich als Nutzer davor schützen, indem du einfach keinen rechtswidrigen Content ansurfst (und wenn dir das mal aus Versehen passieren sollte, einfach schnell den Garbage Collector ausführen).
Und als Nodebetreiber musst du dir im Klaren sein, dass man durch die DHT herausfinden kann, welche Peers z.B. eine Raubkopie anbieten. Dann ist das nur noch ein Befehl und du hast die IP-Adresse (änlich wie bei Torrents). Je nachdem, wie viele Nodes die Raubkopie bereitstellen, kann das für die Bürokratie natürlich ein Kraftakt werden.
Aber im Prinzip hast du Recht. Es ist auch meines Wissens nach nicht vorgesehen, eine Art Lösch- oder Zerstörmeschanismus einzubauen.

Jetzt dürfte die Datei ja nicht mehr gelöscht werden, richtig?

ru@x:~$ ipfs add Stupid.mp4
added QmRBYZhXGHNigrMvS74nCJ8mh6yK1kYzxeDyHY5yNrjUrK Stupid.mp4
ru@x:~$ ipfs pin add QmRBYZhXGHNigrMvS74nCJ8mh6yK1kYzxeDyHY5yNrjUrK
pinned QmRBYZhXGHNigrMvS74nCJ8mh6yK1kYzxeDyHY5yNrjUrK recursively

Schöner Beitrag übrigens. Der ganze Kanal ist genial :-)

Hallo @hellroute,

ja das ist richtig. Auf deiner Node bleibt die Datei. Das wäre auch schon so, wenn du den zweiten Command nicht ausgeführt hättest. Du kannst das auch prüfen mit:
ipfs pin ls | grep QmRBYZhXGHNigrMvS74nCJ8mh6yK1kYzxeDyHY5yNrjUrK
Da sollte dann als Antwort kommen:
QmRBYZhXGHNigrMvS74nCJ8mh6yK1kYzxeDyHY5yNrjUrK recursive

Ok, stimmt ja

Pin this object when adding. Default: true.

Ich lade momentan trotzdem über die dtube Maske hoch, weil ich keine Lust habe extra noch ne 480p Version zu erstellen.

Hallo zusammen,
ich hab gestern einen Node auf meinen Linux-Server aufgesetzt. Mit dem Plugin IPFS-Begleiter im Firefox werden alle IPFS-Anfragen auf meinen Server umgeleitet.
Der direkter Abruf über https://serverip/hash klappt, da kann ich alle Videos abrufen. Nur der Abruf über @d.tube klappt leider nicht. Es wird bei jeden Video angezeigt "The media could not be loaded, either because the server or network failed or because the format is not supported." Des Weiteren kann man zwar die WebUI der Node abrufen, allerdings werden keinerlei Daten angezeigt.
Update: Der direkte Abruf scheint wohl auch nicht immer zu funktioniert.

Das Problem hab ich mittlerweile gefixt bekommen mit ipfs desktop und eine Änderung in der config-Datei. Hierzu hab ich einen Beitrag geschrieben.

Toller Beitrag, danke.
Ich warte noch mit der Dtube Nutzung ab, erstens weil es noch dauert bis ich Video Content habe, und weil ich auch schon von dem im Artikel beschriebenen Problem gehört habe.
LG MJS

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.028
BTC 53801.93
ETH 2252.31
USDT 1.00
SBD 2.26