Storacle - fitxategien biltegiratze deszentralizatua

Storacle - fitxategien biltegiratze deszentralizatua

Hasi baino lehen, alde egin behar dut aurreko artikulurako estekaargi izan dadin zertaz ari garen zehazki.

Artikulu honetan fitxategiak gordetzeaz arduratzen den geruza eta edonork nola erabil dezakeen aztertu nahiko nuke. Storacle liburutegi autonomo bat da, ez dago musikarekin lotura zuzenik. Edozein fitxategiren biltegiratzea antola dezakezu.

Aurreko artikuluan apur bat "boildu" nuen ipfs, baina hori konpontzen ari nintzen arazoaren testuinguruan gertatu zen. Orokorrean, proiektu hau polita iruditzen zait. Nahiago dut zeregin ezberdinetarako sare desberdinak sortzeko gaitasuna. Horrek egitura hobeto antolatzeko eta nodo indibidualetan eta sare osoan karga murrizteko aukera ematen du. Proiektu baten esparruan ere, beharrezkoa bada, sarea zatitan zati dezakezu irizpide batzuen arabera, karga orokorra murriztuz.

Beraz, storacle-k mekanismoa erabiltzen du zabalgarri sare bat antolatzeko. Ezaugarri nagusiak:

  • Fitxategiak biltegian gehi daitezke edozein nodoren bidez.
  • Fitxategiak guztiz gordetzen dira, ez blokeetan.
  • Fitxategi bakoitzak bere eduki-hash berezia du harekin gehiago lan egiteko.
  • Fitxategiak bikoiztu daitezke fidagarritasun handiagoa lortzeko
  • Nodo bateko fitxategi kopurua fitxategi-sistemak soilik mugatzen du (salbuespen bat dago, behean gehiago)
  • Sareko fitxategi-kopurua zabal daitekeen gaitasunek mugatzen dute sareko baliozko nodo kopuruaren arabera, bigarren bertsioan nodo kopuru infinitu batekin lan egitea ahalbidetuko baitu (hori gehiago beste artikulu batean)

Honek orokorrean programatik funtzionatzen duen adibide sinple bat:

Zerbitzaria:

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);
  }
})();

Bezeroa:

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);
  }
})();

Barruko ikuspegia

Ez dago ezer dotorerik kaputxa azpian. Fitxategi kopuruari, haien guztizko tamainari eta beste puntu batzuei buruzko informazioa memoriako datu-base batean gordetzen da eta fitxategiak ezabatzen eta gehitzen direnean eguneratzen dira, beraz, ez da fitxategi-sistemara maiz sartu beharrik. Salbuespen bat da zabor-biltzailea gaitzea biltegiratze-tamaina jakin bat lortzen denean fitxategiak zirkulatu behar dituzunean, eta berriak gehitzea debekatu gabe. Kasu honetan, biltegiratzea saihestu behar duzu, eta fitxategi kopuru handiarekin (> esan milioi bat) lan egiteak karga handiak sor ditzake. Eta hobe da fitxategi gutxiago gordetzea eta nodo gehiago exekutatu. "Garbitzailea" desgaituta badago, ez dago horrelako arazorik.

Fitxategien biltegiratzea 256 karpetak eta 2 habia mailak osatzen dute. Fitxategiak bigarren mailako karpetetan gordetzen dira. Hau da, milioi bat badira. Karpeta bakoitzean 1 fitxategi inguru egongo dira (62500 / sqrt(1000000)).

Karpeta-izenak fitxategi-hashetik eratzen dira, hash-a ezagutzen baduzu azkar atzitu ahal izateko.

Egitura hau biltegiratze-baldintza askoren arabera aukeratu zen: fitxategi-sistema ahulen euskarria, non desiragarria ez den fitxategi asko karpeta batean edukitzea, karpeta guztiak azkar zeharkatzea beharrezkoa izanez gero, etab. Urrezko esanguraren bat.

cachean gordetzea

Fitxategiak gehitzean, baita jasotzean ere, fitxategietarako estekak cachean idazten dira.
Horri esker, askotan ez da sare osoa zeharkatu behar fitxategi baten bila. Horrek estekak jasotzea bizkortzen du eta sareko karga murrizten du. Cachea ere http goiburuen bidez gertatzen da.

Isomorfia

Bezeroa javascript-en idatzita dago eta isomorfoa da, zuzenean nabigatzailetik erabil daiteke. 
Fitxategia igo dezakezu https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js gidoi eta sarbide gisa leihoa.ClientStoracle edo inportatu eraikuntza-sistemaren bidez, etab.

Esteka geroratuak

Ezaugarri interesgarri bat "erreferentzia atzeratua" ere bada. Hona hemen eta orain modu sinkronoan lor daitekeen fitxategi baterako esteka bat da, eta fitxategia biltegian aurkitzen denean aterako da. Hau oso erosoa da, adibidez, webgunean argazki batzuk erakutsi behar dituzunean. Srcn esteka geroratu bat jarri dugu eta kitto. Kasu asko etor ditzakezu.

Bezeroaren APIa

  • async Client.prototype.storeFile() - fitxategia gordetzea
  • async Client.prototype.getFileLink() β€” fitxategirako esteka zuzena lortzea
  • async Client.prototype.getFileLinks() β€” Fitxategi baterako esteken zerrenda bat eskuratzea dagoen nodo guztietatik
  • async Client.prototype.getFileToBuffer() β€” sartu fitxategia bufferera
  • async Client.prototype.getFileToPath() β€” sartu fitxategi bat fitxategi sisteman
  • async Client.prototype.getFileToBlob() - Lortu fitxategia blob batean (arakatzailearen bertsiorako)
  • async Client.prototype.removeFile() - fitxategi bat ezabatu
  • Client.prototype.createRequestedFileLink() β€” sortu esteka geroratu bat

Esportatu fitxategiak beste zerbitzari batera

Fitxategiak beste nodo batera transferitzeko, egin dezakezu:

  • Kopiatu biltegiratze karpeta osoa ezarpenekin batera. (baliteke honek etorkizunean ez funtzionatuko)
  • Kopiatu fitxategiak dituen karpeta bakarrik. Baina, kasu honetan, funtzioa behin exekutatu beharko duzu node.normalizeFilesInfo()datu guztiak berriro kalkulatzeko eta datu-basean sartzeko.
  • Erabili funtzioa node.exportFiles()fitxategiak kopiatzen hasiko dena.

Oinarrizko nodoen ezarpenak
Biltegiratze-nodoa abiaraztean, beharrezko ezarpen guztiak zehaztu ditzakezu.
Oinarrizkoenak deskribatuko ditut, gainerakoak Github-en aurki daitezke.

  • biltegiratze.datuenTamaina β€” fitxategiekin karpetaren tamaina
  • biltegiratze.tempSize β€” aldi baterako karpetaren tamaina
  • biltegiratzea.autoCleanSize β€” gorde beharreko gutxieneko biltegiratze-tamaina. Parametro hau zehazten baduzu, lekua agortzen hasten den bezain laster, gutxien erabiltzen diren fitxategiak ezabatuko dira.
  • fitxategia.maxSize β€” Fitxategiaren gehienezko tamaina
  • fitxategia.minTamaina - Gutxieneko fitxategiaren tamaina
  • fitxategia.preferredDuplicates β€” sarean fitxategi bikoiztuen kopurua hobetsi
  • fitxategia.mimeWhitelist - Baliozko fitxategi motak
  • fitxategia.mimeZerrenda beltza - fitxategi mota baliogabeak
  • fitxategia.extWhitelist - Baliozko fitxategi-luzapenak
  • fitxategia.extZerrenda beltza - fitxategi-luzapen baliogabeak
  • fitxategia.linkCache - esteken cachearen hainbat ezarpen

Dimentsioekin erlazionatutako parametro ia guztiak balio absolutu zein erlatiboetan sar daitezke.

Komando lerroaren bidez lan egiten
Liburutegia komando lerroaren bidez erabil daiteke. Horretarako globalki instalatu behar duzu: npm i -g storacle. Horren ondoren, beharrezko ekintzak abiarazi ditzakezu nodoa dagoen proiektuaren direktoriotik. Adibidez, storacle -a storeFile -f ./file.txt -c ./config.jsfitxategia gehitzeko. Ekintza guztiak hemen aurki daitezke https://github.com/ortexx/storacle/blob/master/bin/actions.js

Zergatik behar duzu hau?

  • Nolabaiteko proiektu deszentralizatu bat sortu nahi baduzu, fitxategiekin gordetzeko eta lan egiteko asmoa baduzu metodo erosoak erabiliz. Adibidez, artikuluaren hasierako estekan deskribatutako musika proiektua erabiltzen du biltegia.
  • Fitxategiak modu banatuan gorde behar dituzun beste edozein proiektutan lan egiten baduzu. Zure sare itxia erraz eraiki dezakezu, nodoak malgutasunez konfiguratu eta berriak gehi ditzakezu behar denean.
  • Zure webguneko fitxategiak nonbait gorde behar badituzu eta zuk zeuk idaztea gehiegi bada. Agian liburutegi hau beste batzuk baino egokiagoa da zure kasuan.
  • Fitxategiekin lan egiten duzun proiektu bat baduzu, baina arakatzailetik manipulazio guztiak egin nahi badituzu. Zerbitzariaren kodea idaztea saihestu dezakezu.

Nire kontaktuak:

Iturria: www.habr.com

Gehitu iruzkin berria