Storacle – decentralizált fájltárolás

Storacle – decentralizált fájltárolás

Mielőtt elkezdeném, el kell mennem link az előző cikkhezhogy világos legyen, miről is beszélünk pontosan.

Ebben a cikkben azt a réteget szeretném megvizsgálni, amelyik a fájlok tárolásáért felelős, és hogyan használhatja bárki. A Storacle egy önálló könyvtár, nincs közvetlen kapcsolat a zenével. Bármilyen fájlok tárolását megszervezheti.

Az előző cikkben kicsit tovább „gurítottam a hordót”. ipfs, de ez pontosan az általam megoldandó probléma összefüggésében történt. Összességében szerintem ez a projekt menő. Én csak azt szeretem, ha különböző feladatokhoz különböző hálózatokat hozhatok létre. Ez lehetővé teszi a struktúra jobb megszervezését és az egyes csomópontok és a hálózat egészének terhelésének csökkentését. Egy projekt keretein belül is, ha szükséges, a hálózatot bizonyos kritériumok szerint darabokra bonthatja, csökkentve ezzel a teljes terhelést.

Tehát a Storacle a mechanizmust használja kenhető hálózat megszervezéséhez. Főbb jellemzők:

  • A fájlok bármely csomóponton keresztül hozzáadhatók a tárolóhoz.
  • A fájlok teljes egészében mentésre kerülnek, nem blokkokban.
  • Minden fájl saját egyedi tartalomkivonattal rendelkezik a további munkához.
  • A fájlok többszörözhetők a nagyobb megbízhatóság érdekében
  • Az egy csomóponton lévő fájlok számát csak a fájlrendszer korlátozza (van egy kivétel, erről bővebben alább)
  • A hálózatban lévő fájlok számát a hálózatban lévő érvényes csomópontok számának megfelelő terjeszthető képességek korlátozzák, amelyek a második verzióban végtelen számú csomóponttal tudnak majd működni (erről bővebben egy másik cikkben)

Egy egyszerű példa arra, hogyan működik ez általában a programból:

Szerver:

const  Node = require('storacle').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost'
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

Ügyfél:

const  Client = require('storacle').Client;

(async () => {
  try {
    const client = new  Client({
      address: 'localhost:4000'
    });
    await client.init();
    const hash = await client.storeFile('./my-file');
    const link = await client.getFileLink(hash); 
    await client.removeFile(hash);
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

Belülnézet

Nincs semmi elegáns a motorháztető alatt. A fájlok számával, teljes méretével és egyéb pontjaival kapcsolatos információk egy memórián belüli adatbázisban tárolódnak, és a fájlok törlésekor és hozzáadásakor frissülnek, így nincs szükség a fájlrendszer gyakori elérésére. Kivételt képez a szemétgyűjtő engedélyezése, amikor egy bizonyos tárhelyméret elérésekor a fájlokat köröztetni kell, és nem tiltja meg az újak hozzáadását. Ilyenkor ki kell kerülni a tárhelyet, és a nagyszámú (> mondjuk millió) fájllal való munka jelentős terhelésekhez vezethet. És jobb, ha kevesebb fájlt tárol, és több csomópontot futtat. Ha a "tisztító" le van tiltva, akkor nincs ilyen probléma.

A fájltároló 256 mappából és 2 beágyazási szintből áll. A fájlok a második szintű mappákban tárolódnak. Vagyis ha van 1 millió. Minden ilyen mappában körülbelül 62500 1000000 fájl lesz (256 XNUMX XNUMX / négyzetméter (XNUMX)).

A mappanevek a fájlkivonatból jönnek létre, így gyorsan hozzáférhet, ha ismeri a hash-t.

Ezt a struktúrát számos különféle tárolási követelmény alapján választottuk: gyenge fájlrendszerek támogatása, ahol nem kívánatos sok fájl egy mappában, szükség esetén az összes mappa gyors bejárása stb. Valamiféle arany középút.

gyorsítótárazás

Fájlok hozzáadásakor, valamint fogadásakor a fájlokra mutató hivatkozások a gyorsítótárba kerülnek.
Ennek köszönhetően nagyon gyakran nincs szükség a teljes hálózat bejárására egy fájl kereséséhez. Ez felgyorsítja a hivatkozások fogadását és csökkenti a hálózat terhelését. A gyorsítótárazás a http fejléceken keresztül is megtörténik.

Izomorfia

A kliens javascript nyelven íródott és izomorf, közvetlenül a böngészőből használható. 
Feltöltheti a fájlt https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js szkriptként és hozzáférésként ablak.ClientStoracle vagy importálás a build rendszeren keresztül stb.

Halasztott linkek

Érdekes funkció a „halasztott hivatkozás” is. Ez egy hivatkozás egy fájlra, amely szinkronban, itt és most beszerezhető, és a fájl akkor húzódik fel, amikor már megtalálható a tárolóban. Ez nagyon kényelmes, ha például meg kell mutatnia néhány képet az oldalon. Csak egy késleltetett hivatkozást tettünk az src-be, és ennyi. Sok esetet kitalálhatsz.

Kliens API

  • aszinkron Client.prototype.storeFile() - a fájl mentése
  • aszinkron Client.prototype.getFileLink() — közvetlen hivatkozás beszerzése a fájlhoz
  • aszinkron Client.prototype.getFileLinks() — egy fájlra mutató közvetlen hivatkozások listája az összes csomópontból, ahol az létezik
  • aszinkron Client.prototype.getFileToBuffer() - vigye be a fájlt a pufferbe
  • aszinkron Client.prototype.getFileToPath() — egy fájl bevitele a fájlrendszerbe
  • aszinkron Client.prototype.getFileToBlob() - töltse le a fájlt blob-ban (böngésző verzióhoz)
  • aszinkron Client.prototype.removeFile() - fájl törlése
  • Client.prototype.createRequestedFileLink() — késleltetett hivatkozás létrehozása

Fájlok exportálása másik szerverre

Ha fájlokat szeretne átvinni egy másik csomópontra, a következőket teheti:

  • Csak másolja a teljes tárolómappát a beállításokkal együtt. (lehet, hogy ez a jövőben nem fog működni)
  • Csak a fájlokat tartalmazó mappát másolja. De ebben az esetben egyszer le kell futtatnia a funkciót node.normalizeFilesInfo()az összes adat újraszámítására és az adatbázisba való beírására.
  • funkció használata node.exportFiles()amely megkezdi a fájlok másolását.

Alapvető csomópont-beállítások
A tárolási csomópont indításakor minden szükséges beállítást megadhat.
A legalapvetőbbeket leírom, a többi megtalálható a Githubon.

  • storage.dataSize — a fájlokat tartalmazó mappa mérete
  • tárolás.tempSize — ideiglenes mappaméret
  • storage.autoCleanSize — a minimális tárolási méret, amelyet el kell helyezni. Ha megadja ezt a paramétert, akkor amint a hely kezd kifogyni, a legkevésbé használt fájlok törlődnek.
  • file.maxSize - maximális fájlméret
  • fájl.minSize - minimális fájlméret
  • file.preferredDuplicates — a fájl ismétlődéseinek preferált száma a hálózaton
  • file.mimeWhitelist - érvényes fájltípusok
  • file.mimeBlacklist - érvénytelen fájltípusok
  • file.extWhitelist - érvényes fájlkiterjesztések
  • file.extBlacklist - érvénytelen fájlkiterjesztések
  • file.linkCache - Különféle link-gyorsítótárazási beállítások

Szinte minden méretekkel kapcsolatos paraméter megadható abszolút és relatív értékben is.

Munkavégzés a parancssoron keresztül
A könyvtár a parancssoron keresztül használható. Ehhez globálisan kell telepítenie: npm i -g Storacle. Ezt követően elindíthatja a szükséges műveleteket abból a projektkönyvtárból, ahol a csomópont található. Például, Storacle -a storeFile -f ./file.txt -c ./config.jsa fájl hozzáadásához. Minden művelet megtalálható a https://github.com/ortexx/storacle/blob/master/bin/actions.js

Miért lehet erre szükséged?

  • Ha valamilyen decentralizált projektet szeretne létrehozni, amelyben kényelmes módszerekkel kívánja tárolni és dolgozni a fájlokkal. Például a cikk elején található linken leírt zenei projekt használ tárház.
  • Ha bármilyen más projekten dolgozik, ahol elosztott módon kell fájlokat tárolnia. Könnyedén felépítheti zárt hálózatát, rugalmasan konfigurálhatja a csomópontokat, és szükség esetén újakat is hozzáadhat.
  • Ha csak el kell tárolnia a webhely fájljait valahol, és túl sok mindent maga ír meg. Talán ez a könyvtár jobban megfelel az Ön esetében, mint a többi.
  • Ha van egy projektje, amelyben fájlokkal dolgozik, de minden manipulációt a böngészőből szeretne végrehajtani. Elkerülheti a szerverkód írását.

Kapcsolattartóim:

Forrás: will.com

Hozzászólás