Storacle — njĂ« ruajtĂ«se e centralizuar e skedarĂ«ve

Storacle — njĂ« ruajtĂ«se e centralizuar e skedarĂ«ve

Para fillimin, duhet të lë një lidhje me artikullin e mëparshëm, në mënyrë që të kuptohet se për çfarë është fjala.

Në këtë artikull do të doja të diskutoja për layer-in që merret me ruajtjen e skedarëve dhe mënyrën se si mund të përdoret nga çdo person. Storacle është një bibliotekë e pavarur, nuk ka lidhje të drejtpërdrejtë me muzikën. Mund të organizoni ruajtjen e çdo skedari.

Në artikullin e mëparshëm, pak "e kritikova" ipfs, por kjo ndodhi në kontekstin e detyrës time. Në përgjithësi, unë e konsideroj këtë projekt të mrekullueshëm. Më pëlqen më shumë mundësia për të krijuar rrjeta të ndryshme për detyra të ndryshme. Kjo lejon një organizim më të mirë të strukturës dhe redukton ngarkesën në nyjat individuale dhe rrjetin si një tërësi. Madje, brenda një projekti të caktuar, mund të ndajmë rrjetin në copa sipas disa kritereve, duke ulur ngarkesën totale.

Pra, storacle përdor mekanizmin spreadable për organizimin e rrjetit. Karakteristikat kryesore:

  • SkedarĂ«t mund tĂ« shtohen nĂ« ruajtje pĂ«rmes çdo nyje.
  • SkedarĂ«t ruhen tĂ«rĂ«sisht, jo nĂ« blloqe.
  • Çdo skedar ka njĂ« hash unik sipas pĂ«rmbajtjes pĂ«r punĂ« tĂ« mĂ«tejshme me tĂ«.
  • SkedarĂ«t mund tĂ« dublifikohen pĂ«r njĂ« besueshmĂ«ri mĂ« tĂ« madhe
  • Numri i skedarĂ«ve nĂ« njĂ« nyje Ă«shtĂ« i kufizuar vetĂ«m nga sistemi i skedarĂ«ve (ka njĂ« pĂ«rjashtim, pĂ«r tĂ« cilin do tĂ« flasim mĂ« poshtĂ«)
  • Numri i skedarĂ«ve nĂ« rrjet Ă«shtĂ« i kufizuar nga mundĂ«sitĂ« e spreadable sipas numrit tĂ« nyjeve tĂ« pranueshme nĂ« rrjet, tĂ« cilat nĂ« versionin e dytĂ« do tĂ« lejojnĂ« punĂ«n me njĂ« numĂ«r tĂ« pafund nyjesh (pĂ«r kĂ«tĂ« nĂ« njĂ« artikull tjetĂ«r)

Një shembull i thjeshtë, si funksionon kjo në realitet:

Serveri:

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

Klienti:

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

Pamja nga brenda

Nën kapak nuk ka asgjë të jashtëzakonshme. Informacioni mbi numrin e skedarëve, madhësinë e tyre totale dhe çështje të tjera ruhet në një bazë të dhënash in-memory dhe përditësohet me fshirjen dhe shtimin e skedarëve, kështu që nuk ka nevojë të afrohemi shpesh te sistemi i skedarëve. Përjashtim është aktivizimi i mbledhësit të plehrave, kur është e nevojshme të qarkullojnë skedarët kur arrihen disa madhësi të ruajtjes, e jo ndaluar shtimin e të rinjve. Në këtë rast, duhet të kalojmë përreth ruajtjes, dhe puna me një numër të madh skedarësh (> një milion themi) mund të sjellë ngarkesa të mëdha. Dhe është më mirë të ruajmë më pak skedarë dhe të aktivizojmë më shumë nyje. Nëse "pastruesi" është i çaktivizuar, atëherë nuk ka këtë problem.

Ruajtja e skedarëve përbëhet nga 256 dosje dhe 2 nivele thellësie. Skedarët ruhen në dosjet e nivelit të dytë. Pra, nëse kemi 1 milion skedarë, në çdo dosje të tillë do të jenë rreth 62500 (1000000 / sqrt(256)).

Emrat e dosjeve formohen nga heshini i skedarit, për t'u qasur shpejt duke e ditur hashin.

Kjo strukturë u zgjodh duke marrë parasysh një numër të madh kërkesash për ruajtjen: mbështetje për sisteme të dobëta dosjesh, ku nuk është e dëshirueshme të kemi shumë skedarë në një dosje, kalim të shpejtë përmes të gjitha dosjeve në nevojë, etj. Një kompromise e artë.

KeĆĄimi

Në momentin e shtimit të skedarëve, si dhe kur i marrim, në cache shkruhen lidhjet për skedarët.
Për shkak të kësaj, shpesh nuk është e nevojshme të kalojmë gjithë rrjetin për të kërkuar skedarin. Kjo përshpejton fitimin e lidhjeve dhe zvogëlon ngarkesën në rrjet. Gjithashtu, caching ndodh përmes titujve http.

Izomorfizmi

Klienti është shkruar në javascript dhe është izomorfik, mund të përdoret drejtpërdrejt nga shfletuesi. 
Mund të ngarkohet skedari https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js si një skenar dhe të qaseni në window.ClientStoracle ose ta importoni përmes sistemit të ndërtimit etj.

Lidhjet e shtyra

Një veçori interesante është "lidhja e shtyrë". Kjo është një lidhje për një skedar, e cila mund të merret në mënyrë sinkrone, këtu dhe tani, ndërsa skedari do të tërhiqet kur të gjendet në ruajtje. Kjo është shumë e përshtatshme, kur, për shembull, duhet të shfaqni disa imazhe në web. Thjesht vendosim lidhjen e shtyrë në src dhe gjithçka është në rregull. Mund të krijoni shumë raste.

Api i klientit

  • async Client.prototype.storeFile() — ruajtja e skedarit
  • async Client.prototype.getFileLink() — marrja e njĂ« lidhjeje direkte pĂ«r skedarin
  • async Client.prototype.getFileLinks() — marrja e njĂ« liste lidhjesh direkte pĂ«r skedarin nga tĂ« gjitha nyjet ku ai ndodhet
  • async Client.prototype.getFileToBuffer() — merrni skedarin nĂ« buffer
  • async Client.prototype.getFileToPath() — merrni skedarin nĂ« sistemin e skedarĂ«ve
  • async Client.prototype.getFileToBlob() — merrni skedarin nĂ« blob (pĂ«r versionin e shfletuesit)
  • async Client.prototype.removeFile() — fshij skedarin
  • Client.prototype.createRequestedFileLink() — krijoni njĂ« lidhje tĂ« shtyrĂ«

Eksportimi i skedarëve në një server tjetër

Për të transferuar skedarët në një nod të tjetër mund të:

  • Thjesht kopjoni tĂ«rĂ« folderin e ruajtjes sĂ« dhĂ«nash sĂ« bashku me konfigurimet. (nĂ« tĂ« ardhmen kjo mund tĂ« mos funksionojĂ«)
  • Kopjoni vetĂ«m folderin me skedarĂ«t. Por, nĂ« kĂ«tĂ« rast, duhet tĂ« ngatĂ«rroni njĂ«herĂ« funksionin node.normalizeFilesInfo(), pĂ«r tĂ« ri llogaritur tĂ« gjithĂ« tĂ« dhĂ«nat dhe pĂ«r t'i futur nĂ« bazĂ«.
  • PĂ«rdorni funksionin node.exportFiles(), i cili do tĂ« fillojĂ« kopjimin e skedarĂ«ve.

Cilësimet kryesore të nodit
Duke nisur nodin e ruajtjes, mund të specifikoni të gjitha cilësimet e nevojshme.
Do të përshkruaj ato më themelore, të tjerat mund të gjenden në GitHub.

  • storage.dataSize — madhĂ«sia e folderit me skedarĂ«t
  • storage.tempSize — madhĂ«sia e folderit tĂ« pĂ«rkohshĂ«m
  • storage.autoCleanSize — madhĂ«sia minimale e ruajtjes qĂ« duhet mbajtur. NĂ«se specifikohet ky parameter, sapo tĂ« fillojĂ« tĂ« mungojĂ« hapĂ«sira, skedarĂ«t mĂ« pak tĂ« pĂ«rdorur do tĂ« fshihen.
  • file.maxSize — madhĂ«sia maksimale e skedarĂ«ve
  • file.minSize — madhĂ«sia minimale e skedarĂ«ve
  • file.preferredDuplicates — numri i preferuar i dublikateve tĂ« skedarĂ«ve nĂ« rrjet
  • file.mimeWhitelist — llojet e skedarĂ«ve tĂ« lejuara
  • file.mimeBlacklist — llojet e skedarĂ«ve tĂ« ndaluara
  • file.extWhitelist — zgjerimet e skedarĂ«ve tĂ« lejuara
  • file.extBlacklist — zgjerimet e skedarĂ«ve tĂ« ndaluara
  • file.linkCache — cilĂ«sime tĂ« ndryshme pĂ«r caching tĂ« lidhjeve

Gati të gjitha parametrat që lidhen me madhësitë mund të përcaktohen në vlera absolute dhe relative.

Puna përmes linjës së komandave
Biblioteka mund të përdoret përmes linjës së komandave. Për këtë, duhet ta instaloni atë globalisht: npm i -g storacle. Pas kësaj, mund të filloni veprimet e nevojshme nga direktoria me projektin, ku është nodi. Për shembull, storacle -a storeFile -f ./file.txt -c ./config.js, për të shtuar një skedar. Të gjitha veprimet mund të gjenden në https://github.com/ortexx/storacle/blob/master/bin/actions.js

Pse mund t'ju nevojitet kjo

  • NĂ«se dĂ«shironi tĂ« krijoni njĂ« projekt decentralizuar, nĂ« tĂ« cilin parashikohet tĂ« ruani dhe tĂ« punoni me skedarĂ«t nĂ« mĂ«nyra tĂ« pĂ«rshtatshme. PĂ«r shembull, projekti me muzikĂ«, i pĂ«rshkruar nĂ« lidhjen nĂ« fillim tĂ« artikullit, pĂ«rdor storacle.
  • NĂ«se punoni nĂ« projekte tĂ« tjera, ku nevojitet ruajtja e skedarĂ«ve nĂ« mĂ«nyrĂ« tĂ« shpĂ«rndarĂ«. Mund tĂ« organizoni lehtĂ«sisht njĂ« rrjet tĂ« mbyllur, tĂ« pĂ«rshtatni nĂ«nat dhe tĂ« shtoni tĂ« reja, kur tĂ« jetĂ« e nevojshme.
  • NĂ«se ju nevojitet thjesht tĂ« ruani skedarĂ«t e faqes tuaj dhe nuk dĂ«shironi tĂ« shkruani gjithçka vetĂ«. NdĂ«rsa kjo bibliotekĂ« mund tĂ« jetĂ« mĂ« e pĂ«rshtatshme pĂ«r ju.
  • NĂ«se keni njĂ« projekt, ku punoni me skedarĂ«t, por dĂ«shironi qĂ« tĂ« gjitha manipulimet tĂ« bĂ«hen nga shfletuesi. Mund tĂ« evitoni shkruajturin e kodit server.

Kontaktet e mia:

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster