Storacle - gudang file desentralisasi

Storacle - gudang file desentralisasi

Sateuacan kuring ngamimitian, kuring kedah angkat link ka artikel saméméhnasupados jelas naon anu urang carioskeun.

Dina artikel ieu Abdi hoyong kasampak di lapisan nu jawab nyimpen file, sarta kumaha eta bisa dipaké ku saha. Storacle mangrupikeun perpustakaan mandiri, teu aya hubungan langsung sareng musik. Anjeun tiasa ngatur neundeun file naon waé.

Dina artikel saméméhna, kuring "digulung tong" saeutik on ipfs, tapi ieu kajadian persis dina konteks masalah kuring keur ngarengsekeun. Gemblengna, Jigana proyék ieu cool. Kuring ngan resep kamampuhan pikeun nyieun jaringan béda pikeun tugas béda. Ieu ngamungkinkeun anjeun pikeun ngatur struktur sareng ngirangan beban dina titik individu sareng jaringan sacara gembleng. Malah dina kerangka hiji proyék, upami diperlukeun, anjeun tiasa ngabagi jaringan kana lembar nurutkeun sababaraha kriteria, ngurangan beban sakabéh.

Jadi storacle ngagunakeun mékanisme nu nyebar pikeun ngatur jaringan. Fitur konci:

  • File bisa ditambahkeun kana Repository ngaliwatan sagala titik.
  • Payil disimpen sagemblengna, teu di blok.
  • Masing-masing file gaduh hash eusi anu unik pikeun dianggo salajengna.
  • Payil tiasa duplikat pikeun reliabilitas anu langkung ageung
  • Jumlah file dina hiji titik diwatesan ngan ku sistem file (aya pangecualian, langkung seueur ngeunaan éta di handap)
  • Jumlah file dina jaringan dibatesan ku kamampuan anu tiasa disebarkeun dumasar kana jumlah titik anu valid dina jaringan, anu dina versi kadua bakal tiasa dianggo sareng jumlah titik anu henteu terbatas (langkung seueur ngeunaan ieu dina tulisan anu sanés).

Conto saderhana kumaha ieu umumna jalan tina 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);
  }
})();

Panempoan jero

Henteu aya anu mewah di handapeun tiung. Inpormasi ngeunaan jumlah file, ukuran total sareng titik-titik sanésna disimpen dina pangkalan data mémori sareng diropéa nalika file dihapus sareng nambihan, janten henteu kedah sering ngaksés sistem file. Pangecualian nyaéta ngamungkinkeun tukang sampah nalika anjeun kedah ngiderkeun file nalika ukuran panyimpenan anu tangtu ngahontal, sareng henteu ngalarang nambihan anu énggal. Dina hal ieu, anjeun kudu bypass gudang, sarta gawé bareng sajumlah badag file (> sebutkeun sajuta) bisa ngakibatkeun beban signifikan. Sareng langkung saé pikeun nyimpen langkung seueur file sareng ngajalankeun langkung seueur titik. Upami "cleaner" ditumpurkeun, maka teu aya masalah sapertos kitu.

Panyimpen file diwangun ku 256 polder sareng 2 tingkat nyarang. File disimpen dina polder tingkat kadua. Nya, upami aya 1 juta. Bakal aya ngeunaan 62500 file dina unggal folder sapertos (1000000 / sqrt(256)).

Ngaran polder dibentuk tina file hash ku kituna anjeun tiasa gancang ngaksés éta upami anjeun terang hash éta.

Struktur ieu dipilih dumasar kana sajumlah ageung sarat panyimpen anu béda-béda: dukungan pikeun sistem file anu lemah, dimana henteu dipikahoyong gaduh seueur file dina hiji folder, traversal gancang sadaya folder upami diperyogikeun, jsb. Sababaraha jenis hartosna emas.

Caching

Nalika nambihkeun file, ogé nalika nampi, tautan kana file ditulis kana cache.
Hatur nuhun kana ieu, sering pisan henteu kedah ngaliwat sadaya jaringan pikeun milarian file. Ieu nyepetkeun panarimaan tautan sareng ngirangan beban dina jaringan. Caching ogé lumangsung via headers http.

Isomorfi

Klién ditulis dina javascript sareng isomorphic, éta tiasa dianggo langsung tina browser. 
Anjeun tiasa unggah file https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js salaku naskah sareng aksés jandela.ClientStoracle atawa impor ngaliwatan sistem ngawangun, jsb.

Tumbu nunggak

Fitur anu pikaresepeun ogé "rujukan ditunda". Ieu mangrupikeun tautan kana file anu tiasa didapet sacara sinkron, di dieu sareng ayeuna, sareng filena bakal ditarik nalika parantos aya dina panyimpenan. Ieu pohara merenah lamun, contona, anjeun kudu némbongkeun sababaraha gambar dina loka. Urang ngan nempatkeun link nunggak di src jeung éta. Anjeun tiasa datang nepi ka loba kasus.

API klien

  • async Client.prototype.storeFile() - nyimpen file
  • async Client.prototype.getFileLink() - kéngingkeun tautan langsung kana file
  • async Client.prototype.getFileLinks() - kéngingkeun daptar tautan langsung ka file tina sadaya titik dimana éta aya
  • async Client.prototype.getFileToBuffer() - kéngingkeun file kana panyangga
  • async Client.prototype.getFileToPath() - kéngingkeun file kana sistem file
  • async Client.prototype.getFileToBlob() - kéngingkeun file dina blob (pikeun versi browser)
  • async Client.prototype.removeFile() - mupus file
  • Client.prototype.createRequestedFileLink() - nyieun tumbu nunggak

Ékspor file ka server séjén

Pikeun nransferkeun file ka node anu sanés, anjeun tiasa:

  • Ngan nyalin sakabéh folder gudang sapanjang kalawan setélan. (ieu moal tiasa dianggo di hareup)
  • Salin ngan ukur folder sareng file. Tapi, dina hal ieu, anjeun bakal kedah ngajalankeun fungsi sakali node.normalizeFilesInfo()pikeun ngitung deui sadaya data sareng lebetkeun kana pangkalan data.
  • fungsi pamakéan node.exportFiles()nu bakal ngamimitian nyalin file.

Setélan titik dasar
Nalika ngamimitian titik panyimpen, anjeun tiasa netepkeun sadaya setélan anu diperyogikeun.
Kuring bakal ngajelaskeun anu paling dasar, sésana tiasa dipendakan dina Github.

  • gudang.dataSize - ukuran polder sareng file
  • neundeun.tempSize - ukuran folder samentara
  • gudang.autoCleanSize - ukuran gudang minimum nu kudu dilaksanakeun. Upami anjeun netepkeun parameter ieu, teras pas rohangan mimiti kaluar, file anu pangsaeutikna dianggo bakal dipupus.
  • file.maxSize - ukuran file maksimum
  • file.minSize - ukuran file minimum
  • file.preferredDuplicates - Jumlah pilihan duplikat file dina jaringan
  • file.mimeWhitelist - jenis file valid
  • file.mimeBlacklist - jenis file teu valid
  • file.extWhitelist - ekstensi file valid
  • file.extBlacklist - ekstensi file teu valid
  • file.linkCache - rupa-rupa setélan cache link

Ampir sadaya parameter anu aya hubunganana sareng dimensi tiasa diasupkeun dina nilai mutlak sareng relatif.

Gawé via garis paréntah
perpustakaan bisa dipaké via garis paréntah. Jang ngalampahkeun ieu, anjeun kedah pasang sacara global: npm i -g storacle. Saatos ieu, anjeun tiasa ngaluncurkeun tindakan anu diperyogikeun tina diréktori proyék dimana titik éta. Salaku conto, storacle -a storeFile -f ./file.txt -c ./config.jspikeun nambahkeun file. Sadaya tindakan tiasa dipendakan dina https://github.com/ortexx/storacle/blob/master/bin/actions.js

Naha anjeun peryogi ieu?

  • Upami anjeun hoyong ngadamel sababaraha jinis proyék desentralisasi dimana anjeun badé nyimpen sareng damel sareng file nganggo metode anu gampang. Salaku conto, proyék musik anu dijelaskeun dina tautan dina awal tulisan nganggo gudang.
  • Upami anjeun damel dina proyék sanés dimana anjeun kedah nyimpen file dina cara anu disebarkeun. Anjeun tiasa sacara gampil ngawangun jaringan katutup anjeun, ngonpigurasikeun simpul sacara fleksibel sareng nambihan anu énggal upami diperyogikeun.
  • Upami anjeun ngan ukur kedah nyimpen file halaman wéb anjeun dimana waé sareng seueur teuing pikeun anjeun nyerat sadayana nyalira. Panginten perpustakaan ieu langkung cocog tibatan batur dina kasus anjeun.
  • Upami anjeun gaduh proyék dimana anjeun damel sareng file, tapi hoyong ngalakukeun sagala manipulasi tina browser. Anjeun bisa nyingkahan nulis kode server.

Kontak abdi:

sumber: www.habr.com

Tambahkeun komentar