Storacle — detsentraliseeritud failide salvestus

Storacle — detsentraliseeritud failide salvestus

Enne alustan, pean jagama linki eelnevale artiklile, et oleks selge, millest tÀpselt jutt kÀib.

Selles artiklis soovin kÀsitleda kihti, mis vastutab failide salvestamise eest, ja kuidas seda saab kasutada iga inimene. Storacle on iseseisev raamatukogu, ei ole otsest seost muusika toetamisega. Failide salvestamist saab korraldada vabalt.

Eelnevas artiklis kritiseeris siin-seal midagi ipfs, kuid see juhtus just seoses kĂ€sitletava probleemiga. Üldiselt pean ma seda projekti vĂ€ga heaks. Lihtsalt mulle meeldib rohkem vĂ”imalus luua erinevaid vĂ”rke erinevate ĂŒlesannete jaoks. See vĂ”imaldab paremini korraldada struktuuri ja vĂ€hendada eraldi sĂ”lmede ning kogu vĂ”rgu koormust. Isegi ĂŒhe projekti raames saab vajadusel vĂ”rku jagada tĂŒkkideks teatud kriteeriumide alusel, vĂ€hendades ĂŒldkoormust.

Nii et storacle kasutab mehhanismi spreadable vÔrgu korraldamiseks. Peamised omadused:

  • Faile saab salvestusse lisada lĂ€bi mis tahes sĂ”lme.
  • Failid salvestatakse tervikuna, mitte plokkidena.
  • Igal failil on oma ainulaadne hash sisu pĂ”hjal edasiseks töötlemiseks.
  • Failid vĂ”ivad olla dubleeritud suurema usaldusvÀÀrsuse saavutamiseks
  • Failide arv ĂŒhel sĂ”lmel on piiratud ainult failisĂŒsteemiga (on erand, millest rÀÀgin allpool)
  • Failide arv vĂ”rgus on piiratud spreadable'i vĂ”imalustega nagu lubatud sĂ”lmede arv vĂ”rgus, mis teises versioonis vĂ”imaldavad töötada piiramatu arvuga sĂ”lmi (sellest rÀÀgitakse teises artiklis)

Lihtne nÀide, kuidas see kÔik programmist töötab:

Server:

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

Kliendi:

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

Vaade seestpoolt

Allikate all pole midagi ĂŒlemÀÀra erakordset. Teave failide arvu, nende kogusuuruse ja muude aspektide kohta salvestatakse in-memory andmebaasi ning uuendatakse failide kustutamisel ja lisamisel, seega pole tihti vaja failisĂŒsteemi juurde pöörduda. Erandiks on prĂŒgi kogumise aktiveerimine, kui failide ringlus on vajalik, kui salvestuse teatud suurustele jĂ”utakse, mitte uute lisandmiste keelamine. Sellisel juhul tuleb salvestust ringi liikuda, ja suure hulga failidega (ĂŒle miljoni nĂ€iteks) vĂ”ib kaasneda mĂ€rkimisvÀÀrne koormus. SeetĂ”ttu on parem hoida vĂ€hem faile ja kĂ€ivitada rohkem sĂ”lmi. Kui "puhastaja" on vĂ€lja lĂŒlitatud, siis sellist probleemi ei esine.

Failide salvestus koosneb 256 kaustast ja 2 tasemest sĂŒgavusest. Failid asuvad teise taseme kaustades. NĂ€iteks, kui igas sellises kaustas on 1 miljon faili, on seal umbes 62500 tĂŒkki (1000000 / sqrt(256)).

Kaustade nimed moodustatakse faili hulgast, et saaks kiiresti juurde pÀÀseda, teades hÀÀletust.

Selline struktuur valiti arvesse vĂ”ttes mitmeid erinevaid nĂ”udeid salvestusse, sealhulgas nĂ”rkade failisĂŒsteemide toetamine, kus ei tohiks ĂŒhes kaustas olla palju faile, kiire kaustade lĂ€bivaatamine vajadusel jne. Teatud kuldne kesktee.

VahemÀlu

Failide lisamisel ja nende hankimisel salvestatakse vahemÀllu viidatud failide lingid.
Selle tÔttu ei ole sageli vaja otsida kogu vÔrku failide leidmiseks. See kiirendab linkide hankimist ja vÀhendab vÔrgu koormust. VahemÀllu salvestamine toimub ka http-pÀistes.

Isomorfism

Kliendiprogramm on kirjutatud javascriptis ja on isomorfne, seda saab kasutada otse brauserist. 
Faili on vĂ”imalik ĂŒles laadida https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js kui skript ning pÀÀseda juurde window.ClientStoracle vĂ”i importida lĂ€bi ehitussĂŒsteemi jne.

Viivitusega lingid

Huvitav funktsioon on ka "viivitusega link". See on link failile, mida saab saada sĂŒnkroonselt, siin ja praegu, ja fail tĂ”mmatakse pĂ€rast seda, kui see on salvestuses leitud. See on vĂ€ga mugav, nĂ€iteks kui on vaja nĂ€idata veebisaidil mingeid pilte. Lihtsalt paneme src-i viivitusega lingi ja kĂ”ik. Juhte saab vĂ€lja mĂ”elda palju.

Kliendi api

  • async Client.prototype.storeFile() — faili salvestamine
  • async Client.prototype.getFileLink() — otseĂŒhenduse saamine failile
  • async Client.prototype.getFileLinks() — otseĂŒhenduste loendi saamine failile kĂ”ikidest sĂ”lmedest, kus see on olemas
  • async Client.prototype.getFileToBuffer() — saada fail puhvri
  • async Client.prototype.getFileToPath() — saada fail failisĂŒsteemi
  • async Client.prototype.getFileToBlob() — saada fail blob-ina (brauseri versiooni jaoks)
  • async Client.prototype.removeFile() — kustutada fail
  • Client.prototype.createRequestedFileLink() — luua edasilĂŒkatud link

Failide eksportimine teisele serverile

Failide teisaldamiseks teisele sÔlmele on vÔimalik:

  • Kopeerida kogu salvestuskaust koos seadistustega. (tulevikus see vĂ”ib mitte toimida)
  • Kopeerida vaid failide kaust. Kuid sel juhul tuleb ĂŒhe korra kĂ€ivitada funktsioon node.normalizeFilesInfo(), et ĂŒmber arvutada kĂ”ik andmed ja kanda need andmebaasi.
  • Kasutada funktsiooni node.exportFiles(), mis alustab failide kopeerimist.

Peamised sÔlme seadistused
Salvestuspunkti kÀivitamisel saab mÀÀrata kÔik vajalikud seadistused.
Kirjeldan kĂ”ige olulisemaid, ĂŒlejÀÀnud info leidub GitHubis.

  • storage.dataSize — failide kausta suurus
  • storage.tempSize — ajutise kausta suurus
  • storage.autoCleanSize — minimaalne salvestusruum, mida tuleb sĂ€ilitada. Kui see parameeter on mÀÀratud, siis eemaldatakse kĂ”ige vĂ€hem kasutatud failid kohe, kui ruum hakkab lĂ”ppema.
  • file.maxSize — faili maksimaalne suurus
  • file.minSize — faili minimaalne suurus
  • file.preferredDuplicates — eelistatud failide dublikaatide arv vĂ”rgus
  • file.mimeWhitelist — lubatud faili tĂŒĂŒbid
  • file.mimeBlacklist — keelatud faili tĂŒĂŒbid
  • file.extWhitelist — lubatud faililaiendite tĂŒĂŒp
  • file.extBlacklist — keelatud faililaiendite tĂŒĂŒp
  • file.linkCache — erinevad linkide vahemĂ€lu seaded

Peaaegu kÔiki, mis on seotud suurustega, saab mÀÀrata nii absoluutsetes kui suhtelistes vÀÀrtustes.

Töötamine kÀsurealt
Raamatukogu on vÔimalik kasutada kÀsurealt. Selleks tuleb see globaalselt installida: npm i -g storacle. PÀrast seda saab kÀivitada vajalikud toimingud projekti kaustas, kus on Node. NÀiteks, storacle -a storeFile -f ./file.txt -c ./config.js, et faili lisada. KÔiki toiminguid saab leida https://github.com/ortexx/storacle/blob/master/bin/actions.js

Miks sa vÔid seda vajada

  • Kui soovid luua mingi detsentraliseeritud projekti, kus plaanitakse faile mugavalt hoida ja nende kallal töötada. NĂ€iteks, projekt muusikaga, mida on kirjeldatud artikli alguses, kasutab storacle.
  • Kui töötad teiste projektide kallal, kus on vaja faile jaotatult hoida. Sa saad lihtsalt luua oma privaatvĂ”rgu, paindlikult seadistada sĂ”lmi ja lisada uusi, kui see on vajalik.
  • Kui sul on lihtsalt vaja hoida oma saidi faile ja sul on ebamugav kĂ”ike ise kirjutada. VĂ”ib-olla sobib see teek paremini kui teised sinu jaoks.
  • Kui sul on projekt, kus töötad faile, kuid soovid kĂ”ik toimingud teha brauseri kaudu. Sa saad vĂ€ltida serverikoodi kirjutamist.

Minu kontaktid:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster