Storacle - panyimpenan file desentralisasi

Storacle - panyimpenan file desentralisasi

Sadurunge miwiti, aku kudu lunga pranala menyang artikel sadurungesupaya jelas apa sing diomongake.

Ing artikel iki aku kaya kanggo katon ing lapisan sing tanggung jawab kanggo nyimpen file, lan carane bisa digunakake dening sapa wae. Soracle minangka perpustakaan mandiri, ora ana hubungan langsung karo musik. Sampeyan bisa ngatur panyimpenan file apa wae.

Ing artikel sadurunge, aku "nggulung tong minyak" sethithik ipfs, nanging iki kedadeyan persis ing konteks masalah sing dakrampungake. Sakabèhé, aku mikir proyek iki keren. Aku mung luwih seneng kemampuan kanggo nggawe jaringan beda kanggo tugas beda. Iki ngidini sampeyan ngatur struktur sing luwih apik lan nyuda beban ing simpul individu lan jaringan kanthi sakabehe. Malah ing kerangka siji proyek, yen perlu, sampeyan bisa pamisah jaringan dadi potongan miturut sawetara kritéria, nyuda beban sakabèhé.

Dadi storacle nggunakake mekanisme kasebut nyebar kanggo ngatur jaringan. Fitur tombol:

  • File bisa ditambahake menyang repositori liwat simpul apa wae.
  • File disimpen kabeh, ora ing blok.
  • Saben file nduweni hash konten sing unik kanggo nggarap luwih lanjut.
  • File bisa diduplikasi kanggo luwih linuwih
  • Jumlah file ing siji simpul diwatesi mung dening sistem file (ana pangecualian, luwih akeh ing ngisor iki)
  • Jumlah file ing jaringan diwatesi dening kapabilitas sing bisa disebarake miturut jumlah simpul sing bener ing jaringan, sing ing versi kapindho bakal bisa digunakake kanthi jumlah node sing ora ana watese (liyane babagan iki ing artikel liyane)

Conto prasaja babagan cara iki umume saka program:

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

Klien:

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

Tampilan njero

Ora ana barang sing apik ing sangisore tutup. Informasi babagan jumlah file, ukuran total lan titik liyane disimpen ing basis data memori lan dianyari nalika file dibusak lan ditambahake, dadi ora perlu kerep ngakses sistem file. Pangecualian mbisakake kolektor uwuh nalika sampeyan kudu nyebar file nalika ukuran panyimpenan tartamtu wis tekan, lan ora nglarang nambah sing anyar. Ing kasus iki, sampeyan kudu ngliwati panyimpenan, lan nggarap file sing akeh (> ujar yuta) bisa nyebabake beban sing signifikan. Lan luwih apik kanggo nyimpen file luwih sithik lan mbukak luwih akeh kelenjar. Yen "cleaner" dipateni, mula ora ana masalah kasebut.

Panyimpenan file kasusun saka 256 folder lan 2 tingkat nesting. File disimpen ing folder tingkat kapindho. Yaiku yen ana 1 yuta. Bakal ana kira-kira 62500 file ing saben folder kasebut (1000000 / sqrt(256)).

Jeneng folder kasebut dibentuk saka hash file supaya sampeyan bisa ngakses kanthi cepet yen sampeyan ngerti hash kasebut.

Struktur iki dipilih adhedhasar akeh syarat panyimpenan sing beda: dhukungan kanggo sistem file sing ringkih, sing ora dikarepake duwe akeh file ing siji folder, traversal cepet kabeh folder yen perlu, lsp. Sawetara jinis tegese emas.

Caching

Nalika nambah file, uga nalika nampa, pranala menyang file ditulis ing cache.
Thanks kanggo iki, asring banget ora perlu ngliwati kabeh jaringan kanggo nggoleki file. Iki nyepetake panrimo pranala lan nyuda beban ing jaringan. Caching uga dumadi liwat header http.

Isomorfik

Klien ditulis ing javascript lan isomorphic, bisa digunakake langsung saka browser. 
Sampeyan bisa ngunggah file https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js minangka script lan akses jendhela.ClientStoracle utawa ngimpor liwat sistem mbangun, etc.

Tautan sing ditundha

Fitur sing menarik uga "referensi sing ditundha". Iki minangka link menyang file sing bisa dipikolehi kanthi sinkron, ing kene lan saiki, lan file kasebut bakal ditarik munggah nalika wis ditemokake ing panyimpenan. Iki trep banget nalika, contone, sampeyan kudu nuduhake sawetara gambar ing situs. Kita mung sijine link sing ditundha ing src lan iku. Sampeyan bisa teka karo akeh kasus.

API klien

  • async Client.prototype.storeFile() - nyimpen file
  • async Client.prototype.getFileLink() - entuk link langsung menyang file kasebut
  • async Client.prototype.getFileLinks() - entuk dhaptar pranala langsung menyang file saka kabeh simpul sing ana
  • async Client.prototype.getFileToBuffer() - njaluk file menyang buffer
  • async Client.prototype.getFileToPath() - entuk file menyang sistem file
  • async Client.prototype.getFileToBlob() - entuk file ing blob (kanggo versi browser)
  • async Client.prototype.removeFile() - mbusak file
  • Client.prototype.createRequestedFileLink() - nggawe link sing ditundha

Ekspor file menyang server liyane

Kanggo nransfer file menyang simpul liyane, sampeyan bisa:

  • Mung nyalin kabeh folder panyimpenan bebarengan karo setelan. (iki bisa uga ora bisa digunakake ing mangsa ngarep)
  • Nyalin mung folder karo file. Nanging, ing kasus iki, sampeyan kudu mbukak fungsi sapisan node.normalizeFilesInfo()kanggo ngetung maneh kabeh data lan ngetik menyang database.
  • nggunakake fungsi node.exportFiles()sing bakal miwiti nyalin file.

Setelan simpul dhasar
Nalika miwiti simpul panyimpenan, sampeyan bisa nemtokake kabeh setelan sing dibutuhake.
Aku bakal njlèntrèhaké sing paling dhasar, liyane bisa ditemokake ing Github.

  • panyimpenan.dataSize - ukuran folder karo file
  • panyimpenan.tempSize - ukuran folder sementara
  • panyimpenan.autoCleanSize - ukuran panyimpenan minimal sing kudu dicekel. Yen sampeyan nemtokake parameter iki, banjur sanalika spasi wiwit entek, file sing paling ora digunakake bakal dibusak.
  • file.maxSize - ukuran file maksimum
  • file.minSize - ukuran file minimal
  • file.preferredDuplicates - nomer pilihan saka duplikat file ing jaringan
  • file.mimeWhitelist - jinis file sing bener
  • file.mimeBlacklist - jinis file ora bener
  • file.extWhitelist - ekstensi file sing bener
  • file.extBlacklist - ekstensi file ora bener
  • file.linkCache - macem-macem setelan cache link

Meh kabeh paramèter sing ana gandhengane karo ukuran bisa dilebokake ing nilai absolut lan relatif.

Makarya liwat baris printah
Pustaka bisa digunakake liwat baris printah. Kanggo nindakake iki, sampeyan kudu nginstal global: npm i -g storacle. Sawise iki, sampeyan bisa miwiti tumindak sing dibutuhake saka direktori proyek ing ngendi simpul kasebut. Tuladhane, storacle -a storeFile -f ./file.txt -c ./config.jskanggo nambah file. Kabeh tumindak bisa ditemokake ing https://github.com/ortexx/storacle/blob/master/bin/actions.js

Napa sampeyan butuh iki?

  • Yen sampeyan pengin nggawe sawetara proyek desentralisasi sing sampeyan rencana kanggo nyimpen lan nggarap file kanthi nggunakake cara sing trep. Contone, proyek musik sing diterangake ing link ing wiwitan artikel nggunakake panyimpenan.
  • Yen sampeyan nggarap proyek liyane ing ngendi sampeyan kudu nyimpen file kanthi cara sing disebarake. Sampeyan bisa kanthi gampang mbangun jaringan sing ditutup, ngatur simpul kanthi fleksibel lan nambah sing anyar yen dibutuhake.
  • Yen sampeyan mung perlu kanggo nyimpen file situs web nang endi wae lan iku kakehan kanggo sampeyan nulis kabeh dhewe. Mbok menawa perpustakaan iki luwih cocok tinimbang liyane ing kasus sampeyan.
  • Yen sampeyan duwe proyek ing ngendi sampeyan nggarap file, nanging pengin nindakake kabeh manipulasi saka browser. Sampeyan bisa nyegah nulis kode server.

Kontakku:

Source: www.habr.com

Add a comment