Soracle - hoʻopaʻa waihona decentralized

Soracle - hoʻopaʻa waihona decentralized

Ma mua o koʻu hoʻomaka ʻana, pono wau e haʻalele loulou i ka ʻatikala muai maopopo ai ka makou mea e kamailio nei.

Ma kēia ʻatikala makemake wau e nānā i ka papa i kuleana no ka mālama ʻana i nā faila, a pehea e hiki ai ke hoʻohana ʻia e kekahi. He waihona kūʻokoʻa ʻo Soracle, ʻaʻohe pili pololei me ke mele. Hiki iā ʻoe ke hoʻonohonoho i ka waiho ʻana o nā faila.

Ma ka ʻatikala ma mua, ua "'ōwili wau i ka pahu" ma kahi liʻiliʻi ipfs, akā ua hana pololei kēia i loko o ka pōʻaiapili o ka pilikia aʻu e hoʻoholo nei. Ma ke ʻano holoʻokoʻa, manaʻo wau he ʻoluʻolu kēia papahana. Makemake wau i ka hiki ke hana i nā ʻupena like ʻole no nā hana like ʻole. ʻAe kēia iā ʻoe e hoʻonohonoho maikaʻi i ka hoʻolālā a hoʻemi i ka ukana ma nā nodes pākahi a me ka pūnaewele holoʻokoʻa. ʻOiai i loko o ka hoʻolālā o hoʻokahi papahana, inā pono, hiki iā ʻoe ke hoʻokaʻawale i ka pūnaewele i mau ʻāpana e like me kekahi mau koi, e hōʻemi ana i ka ukana holoʻokoʻa.

No laila hoʻohana ʻo storacle i ka mīkini hoʻolahalaha no ka hoʻonohonoho ʻana i kahi pūnaewele. Nā mea nui:

  • Hiki ke hoʻohui ʻia nā faila i ka waihona ma o kekahi node.
  • Mālama ʻia nā faila, ʻaʻole i loko o nā poloka.
  • Loaʻa i kēlā me kēia faila kona hash maʻiʻo ponoʻī no ka hana hou aku me ia.
  • Hiki ke kope kope ʻia nā faila no ka hilinaʻi ʻoi aku
  • ʻO ka helu o nā faila ma hoʻokahi node e kaupalena wale ʻia e ka ʻōnaehana faila (he ʻokoʻa, ʻoi aku ka nui ma lalo)
  • Ua kaupalena ʻia ka helu o nā faila i ka hiki ke hoʻolaha ʻia e like me ka nui o nā nodes kūpono i ka pūnaewele, a ma ka lua o ka mana e ʻae ai e hana me kahi helu pau ʻole o nā nodes (ʻoi aʻe ma kēia ma kekahi ʻatikala)

ʻO kahi hiʻohiʻona maʻalahi o ka hana maʻamau mai ka papahana:

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

Mea kūʻai:

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

I loko o ke nānā ʻana

ʻAʻohe mea nani ma lalo o ka puʻupuʻu. ʻO ka ʻike e pili ana i ka helu o nā faila, ko lākou nui a me nā helu ʻē aʻe e mālama ʻia i loko o kahi waihona hoʻomanaʻo a hōʻano hou ʻia ke holoi ʻia a hoʻohui ʻia nā faila, no laila ʻaʻohe pono e komo pinepine i ka ʻōnaehana faila. ʻO kahi ʻokoʻa ka hiki ʻana i ka ʻohi ʻōpala ke pono ʻoe e hoʻolaha i nā faila ke hiki i kahi nui o ka waiho ʻana, a ʻaʻole e pāpā i ka hoʻohui ʻana i nā mea hou. I kēia hihia, pono ʻoe e kāpae i ka waiho ʻana, a me ka hana ʻana me ka nui o nā faila (> ʻōlelo ʻia he miliona) hiki ke alakaʻi i nā ukana nui. A ʻoi aku ka maikaʻi o ka mālama ʻana i nā faila liʻiliʻi a holo hou i nā node. Inā pio ka "mea hoʻomaʻemaʻe", a laila ʻaʻohe pilikia.

Aia ka waihona waihona he 256 waihona a me 2 pae o ka nesting. Mālama ʻia nā faila ma nā waihona pae ʻelua. ʻO ia, inā he 1 miliona. Aia ma kahi o 62500 faila i kēlā me kēia waihona (1000000 / sqrt(256)).

Hoʻokumu ʻia nā inoa waihona mai ka file hash i hiki iā ʻoe ke komo wikiwiki inā ʻike ʻoe i ka hash.

Ua koho ʻia kēia ʻano ma muli o ka nui o nā koi mālama ʻē aʻe: kākoʻo no nā ʻōnaehana faila nāwaliwali, kahi i makemake ʻole ʻia e loaʻa i nā faila he nui i hoʻokahi waihona, ka hele wikiwiki ʻana i nā faila āpau inā pono, etc. ʻO kekahi ʻano mean gula.

kāʻei kapu

I ka hoʻohui ʻana i nā faila, a me ka wā e loaʻa ai iā lākou, kākau ʻia nā loulou i nā faila i ka cache.
Mahalo i kēia, pinepine ʻaʻole pono e hele i ka pūnaewele holoʻokoʻa e ʻimi i kahi faila. Hoʻonui kēia i ka loaʻa ʻana o nā loulou a hoʻemi i ka ukana ma ka pūnaewele. Hoʻokomo pū ʻia ka cache ma o nā poʻomanaʻo http.

Isomorphy

Ua kākau ʻia ka mea kūʻai ma ka javascript a he isomorphic, hiki ke hoʻohana pololei ʻia mai ka polokalamu kele pūnaewele. 
Hiki iā ʻoe ke hoʻouka i ka faila https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js ma ke ʻano he palapala a me ke komo ʻana pukaaniani.ClientStoracle a i ʻole e lawe mai ma o ka ʻōnaehana kūkulu, etc.

Nā loulou hoʻopaneʻe

ʻO kahi hiʻohiʻona hoihoi ʻia ʻo ia hoʻi ka "deferred reference". He loulou kēia i kahi faila hiki ke loaʻa i ka synchronously, ma ʻaneʻi a i kēia manawa, a e huki ʻia ka faila i ka wā e loaʻa ai i ka waihona. He mea maʻalahi kēia inā, no ka laʻana, pono ʻoe e hōʻike i kekahi mau kiʻi ma ka pūnaewele. Hoʻokomo wale mākou i kahi loulou i hoʻopanee ʻia ma src a ʻo ia nō. Hiki iā ʻoe ke hana i nā hihia he nui.

API mea kūʻai aku

  • async Client.prototype.storeFile() - mālama i ka faila
  • async Client.prototype.getFileLink() - loaʻa kahi loulou pololei i ka faila
  • async Client.prototype.getFileLinks() - ke kiʻi ʻana i kahi papa inoa o nā loulou pololei i kahi faila mai nā node a pau e noho ai
  • async Client.prototype.getFileToBuffer() - e hoʻokomo i ka faila i loko o ka buffer
  • async Client.prototype.getFileToPath() - e kiʻi i kahi faila i ka ʻōnaehana faila
  • async Client.prototype.getFileToBlob() - e kiʻi i ka faila ma ka blob (no ka polokalamu kele pūnaewele)
  • async Client.prototype.removeFile() - holoi i kahi faila
  • Client.prototype.createRequestedFileLink() - hana i kahi loulou hoʻopanee

Hoʻokuʻu aku i nā faila i kahi kikowaena ʻē aʻe

No ka hoʻoili ʻana i nā faila i kekahi node, hiki iā ʻoe ke:

  • E kope wale i ka waihona waihona a pau me nā hoʻonohonoho. (ʻaʻole paha e hana kēia i ka wā e hiki mai ana)
  • E kope wale i ka waihona me nā faila. Akā, i kēia hihia, pono ʻoe e holo i ka hana i hoʻokahi manawa node.normalizeFilesInfo()e helu hou i nā ʻikepili a pau a hoʻokomo i loko o ka waihona.
  • E hoʻohana i ka hana node.exportFiles()e hoʻomaka e kope i nā faila.

Nā hoʻonohonoho node kumu
I ka hoʻomaka ʻana i ka node mālama, hiki iā ʻoe ke kuhikuhi i nā hoʻonohonoho pono āpau.
E wehewehe wau i nā mea maʻamau, hiki ke loaʻa ke koena ma Github.

  • waihona.dataSize - ka nui o ka waihona me nā faila
  • waihona.tempSize — ka nui o ka waihona no ka manawa
  • storage.autoCleanSize - ka liʻiliʻi liʻiliʻi o ka waiho ʻana e pono e paʻa. Inā ʻoe e kuhikuhi i kēia ʻāpana, a laila i ka wā e hoʻomaka ai ka pau ʻana o ka hakahaka, e holoi ʻia nā faila liʻiliʻi loa.
  • waihona.maxSize — ka nui o ka waihona
  • waihona.minSize — ka nui o ka waihona
  • file.preferredDuplicates - ka helu makemake o nā faila ma ka pūnaewele
  • file.mimeWhitelist - nā ʻano faila kūpono
  • file.mimeBlacklist - nā ʻano faila hewa ʻole
  • file.extWhitelist - nā hoʻonui waihona kūpono
  • file.extBlacklist - kūpono ʻole nā ​​hoʻonui faila
  • file.linkCache - nā hoʻonohonoho hoʻonohonoho hoʻopaʻa inoa loulou

Aneane hiki ke hoʻokomo ʻia nā ʻāpana āpau e pili ana i nā ana i nā waiwai kūʻokoʻa a pili.

Ke hana nei ma ka laina kauoha
Hiki ke hoʻohana ʻia ka waihona ma o ka laina kauoha. No ka hana ʻana i kēia, pono ʻoe e hoʻokomo iā ia ma ka honua: npm i -g storacle. Ma hope o kēia, hiki iā ʻoe ke hoʻomaka i nā hana e pono ai mai ka papa kuhikuhi papahana kahi o ka node. ʻo kahi laʻana, storacle -a hale kūʻaiFile -f ./file.txt -c ./config.jse hoʻohui i ka faila. Hiki ke loaʻa nā hana a pau ma https://github.com/ortexx/storacle/blob/master/bin/actions.js

No ke aha paha ʻoe e pono ai i kēia?

  • Inā makemake ʻoe e hana i kekahi ʻano papahana decentralized kahi āu e hoʻolālā ai e mālama a hana pū me nā faila me ka hoʻohana ʻana i nā ala kūpono. No ka laʻana, hoʻohana ka papahana mele i wehewehe ʻia ma ka loulou ma ka hoʻomaka o ka ʻatikala hale waihona kālā.
  • Inā ʻoe e hana ma nā papahana ʻē aʻe kahi āu e pono ai e mālama i nā faila ma ke ʻano puʻupuʻu. Hiki iā ʻoe ke kūkulu maʻalahi i kāu pūnaewele paʻa, hoʻonohonoho maʻalahi i nā nodes a hoʻohui i nā mea hou inā pono.
  • Inā pono ʻoe e hoʻopaʻa i kāu mau faila pūnaewele ma kahi a he mea nui loa iā ʻoe ke kākau i nā mea āpau iā ʻoe iho. Ua kūpono paha kēia waihona ma mua o nā mea ʻē aʻe i kāu hihia.
  • Inā he papahana kāu e hana ai me nā faila, akā makemake ʻoe e hana i nā manipulations āpau mai ka polokalamu kele pūnaewele. Hiki iā ʻoe ke pale i ke kākau ʻana i ke code server.

ʻO kaʻu mau leka:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka