Storacle - storfa ffeiliau datganoledig

Storacle - storfa ffeiliau datganoledig

Cyn i mi ddechrau, rhaid i mi adael dolen i'r erthygl flaenorolfel ei bod yn amlwg beth yn union yr ydym yn sôn amdano.

Yn yr erthygl hon hoffwn edrych ar yr haen sy'n gyfrifol am storio ffeiliau, a sut y gall unrhyw un ei ddefnyddio. Llyfrgell ar ei phen ei hun yw Storacle, nid oes cysylltiad uniongyrchol â cherddoriaeth. Gallwch drefnu storio unrhyw ffeiliau.

Yn yr erthygl flaenorol, fe wnes i “rolio'r gasgen” ychydig ymlaen ipfs, ond digwyddodd hyn yn union yng nghyd-destun y broblem yr oeddwn yn ei datrys. Ar y cyfan, rwy'n meddwl bod y prosiect hwn yn cŵl. Mae'n well gen i'r gallu i greu rhwydweithiau gwahanol ar gyfer gwahanol dasgau. Mae hyn yn caniatáu ichi drefnu'r strwythur yn well a lleihau'r llwyth ar nodau unigol a'r rhwydwaith cyfan. Hyd yn oed o fewn fframwaith un prosiect, os oes angen, gallwch chi rannu'r rhwydwaith yn ddarnau yn unol â rhai meini prawf, gan leihau'r llwyth cyffredinol.

Felly mae storacl yn defnyddio'r mecanwaith taenadwy ar gyfer trefnu rhwydwaith. Nodweddion Allweddol:

  • Gellir ychwanegu ffeiliau at y gadwrfa trwy unrhyw nod.
  • Mae ffeiliau'n cael eu cadw'n gyfan gwbl, nid mewn blociau.
  • Mae gan bob ffeil ei hash cynnwys unigryw ei hun ar gyfer gwaith pellach ag ef.
  • Gellir dyblygu ffeiliau i fod yn fwy dibynadwy
  • Mae nifer y ffeiliau ar un nod yn cael ei gyfyngu gan y system ffeiliau yn unig (mae eithriad, mwy amdano isod)
  • Mae nifer y ffeiliau yn y rhwydwaith wedi'i gyfyngu gan y galluoedd taenadwy yn ôl nifer y nodau dilys yn y rhwydwaith, a fydd yn yr ail fersiwn yn gallu gweithio gyda nifer anfeidrol o nodau (mwy am hyn mewn erthygl arall)

Enghraifft syml o sut mae hyn yn gweithio'n gyffredinol o'r rhaglen:

Gweinydd:

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

Cleient:

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

Gweld y tu mewn

Does dim byd ffansi o dan y cwfl. Mae gwybodaeth am nifer y ffeiliau, cyfanswm eu maint a phwyntiau eraill yn cael eu storio mewn cronfa ddata cof ac yn cael eu diweddaru pan fydd ffeiliau'n cael eu dileu a'u hychwanegu, felly nid oes angen cyrchu'r system ffeiliau yn aml. Eithriad yw galluogi'r casglwr sbwriel pan fydd angen i chi gylchredeg ffeiliau pan gyrhaeddir maint storio penodol, a pheidio â gwahardd ychwanegu rhai newydd. Yn yr achos hwn, mae'n rhaid i chi osgoi'r storfa, a gall gweithio gyda nifer fawr o ffeiliau (> dyweder miliwn) arwain at lwythi sylweddol. Ac mae'n well storio llai o ffeiliau a rhedeg mwy o nodau. Os yw'r "glanhawr" yn anabl, yna nid oes problem o'r fath.

Mae'r storfa ffeiliau yn cynnwys 256 o ffolderi a 2 lefel o nythu. Mae ffeiliau'n cael eu storio mewn ffolderi ail lefel. Hynny yw, os oes 1 miliwn. Bydd tua 62500 o ffeiliau ym mhob ffolder o'r fath (1000000 / sqrt(256)).

Mae enwau'r ffolder yn cael eu ffurfio o'r hash ffeil fel y gallwch chi gael mynediad cyflym ato os ydych chi'n gwybod yr hash.

Dewiswyd y strwythur hwn yn seiliedig ar nifer fawr o wahanol ofynion storio: cefnogaeth ar gyfer systemau ffeiliau gwan, lle nad yw'n ddymunol cael llawer o ffeiliau mewn un ffolder, croesi'r holl ffolderi yn gyflym os oes angen, ac ati. Rhyw fath o gymedr euraidd.

caching

Wrth ychwanegu ffeiliau, yn ogystal ag wrth eu derbyn, ysgrifennir dolenni i ffeiliau i'r storfa.
Diolch i hyn, yn aml iawn nid oes angen croesi'r rhwydwaith cyfan i chwilio am ffeil. Mae hyn yn cyflymu derbyn cysylltiadau ac yn lleihau'r llwyth ar y rhwydwaith. Mae caching hefyd yn digwydd trwy benawdau http.

Isomorffi

Mae'r cleient wedi'i ysgrifennu mewn javascript ac mae'n isomorffig, gellir ei ddefnyddio'n uniongyrchol o'r porwr. 
Gallwch uwchlwytho'r ffeil https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js fel sgript a mynediad ffenestr.ClientStoracle neu fewnforio trwy'r system adeiladu, ac ati.

Cysylltiadau gohiriedig

Nodwedd ddiddorol hefyd yw “cyfeiriad gohiriedig”. Mae hwn yn ddolen i ffeil y gellir ei chael yn gydamserol, yma ac yn awr, a bydd y ffeil yn cael ei thynnu i fyny pan fydd eisoes yn y storfa. Mae hyn yn gyfleus iawn pan, er enghraifft, mae angen i chi ddangos rhai lluniau ar y wefan. Rydyn ni newydd roi dolen ohiriedig yn src a dyna ni. Gallwch chi feddwl am lawer o achosion.

API Cleient

  • async Cleient.prototeip.storeFile() - arbed y ffeil
  • async Cleient.prototeip.getFileLink() — cael dolen uniongyrchol i'r ffeil
  • async Cleient.prototeip.getFileLinks() — cael rhestr o ddolenni uniongyrchol i ffeil o bob nod lle mae'n bodoli
  • async Cleient.prototeip.getFileToBuffer() - rhowch y ffeil i mewn i'r byffer
  • async Cleient.prototeip.getFileToPath() — cael ffeil i mewn i'r system ffeiliau
  • async Cleient.prototeip.getFileToBlob() - cael y ffeil mewn blob (ar gyfer fersiwn porwr)
  • async Cleient.prototeip.removeFile() - dileu ffeil
  • Cleient.prototeip.createRequestedFileLink() — creu cyswllt gohiriedig

Allforio ffeiliau i weinydd arall

Er mwyn trosglwyddo ffeiliau i nod arall, gallwch:

  • Copïwch y ffolder storio gyfan ynghyd â'r gosodiadau. (efallai na fydd hyn yn gweithio yn y dyfodol)
  • Copïwch y ffolder gyda ffeiliau yn unig. Ond, yn yr achos hwn, bydd angen i chi redeg y swyddogaeth unwaith nod.normalizeFilesInfo()i ailgyfrifo'r holl ddata a'i fewnbynnu i'r gronfa ddata.
  • Defnyddio swyddogaeth nod.exportFiles()a fydd yn dechrau copïo ffeiliau.

Gosodiadau nod sylfaenol
Wrth gychwyn y nod storio, gallwch nodi'r holl osodiadau angenrheidiol.
Byddaf yn disgrifio'r rhai mwyaf sylfaenol, mae'r gweddill i'w gweld ar Github.

  • storio.dataSize - maint y ffolder gyda ffeiliau
  • storio.tempSize - maint ffolder dros dro
  • storio.autoCleanSize — y maint storio lleiaf y mae angen ei gadw. Os byddwch yn nodi'r paramedr hwn, yna cyn gynted ag y bydd gofod yn dechrau rhedeg allan, bydd y ffeiliau a ddefnyddir leiaf yn cael eu dileu.
  • ffeil.maxSize - uchafswm maint y ffeil
  • ffeil.minSize - lleiafswm maint ffeil
  • ffeil.preferredDuplicates — nifer y ffeiliau dyblyg a ffefrir ar y rhwydwaith
  • ffeil.mimeWhitelist - mathau o ffeiliau dilys
  • ffeil.mimeBlacklist - mathau o ffeiliau annilys
  • ffeil.extWhitelist - estyniadau ffeil dilys
  • ffeil.extBlacklist - estyniadau ffeil annilys
  • ffeil.linkCache - gosodiadau caching cyswllt amrywiol

Gellir nodi bron pob paramedr sy'n ymwneud â dimensiynau mewn gwerthoedd absoliwt a chymharol.

Gweithio trwy'r llinell orchymyn
Gellir defnyddio'r llyfrgell trwy'r llinell orchymyn. I wneud hyn mae angen i chi ei osod yn fyd-eang: npm i -g storacl. Ar ôl hyn, gallwch chi lansio'r camau gweithredu angenrheidiol o'r cyfeiriadur prosiect lle mae'r nod. Er enghraifft, storacle -a storeFile -f ./file.txt -c ./config.jsi ychwanegu'r ffeil. Gellir dod o hyd i bob gweithred yn https://github.com/ortexx/storacle/blob/master/bin/actions.js

Pam efallai fod angen hyn arnoch chi?

  • Os ydych chi eisiau creu rhyw fath o brosiect datganoledig lle rydych chi'n bwriadu storio a gweithio gyda ffeiliau gan ddefnyddio dulliau cyfleus. Er enghraifft, mae'r prosiect cerddoriaeth a ddisgrifir yn y ddolen ar ddechrau'r erthygl yn defnyddio storacl.
  • Os ydych yn gweithio ar unrhyw brosiectau eraill lle mae angen i chi storio ffeiliau mewn modd dosbarthedig. Gallwch chi adeiladu'ch rhwydwaith caeedig yn hawdd, ffurfweddu nodau'n hyblyg ac ychwanegu rhai newydd pan fo angen.
  • Os mai dim ond storio ffeiliau eich gwefan yn rhywle sydd ei angen arnoch a'i bod yn ormod i chi ysgrifennu popeth eich hun. Efallai bod y llyfrgell hon yn fwy addas nag eraill yn eich achos chi.
  • Os oes gennych brosiect lle rydych chi'n gweithio gyda ffeiliau, ond eisiau cyflawni'r holl driniaethau o'r porwr. Gallwch osgoi ysgrifennu cod gweinydd.

Fy nghysylltiadau:

Ffynhonnell: hab.com

Ychwanegu sylw