【IPFS專題#002】通過(guò) 三大機(jī)制 揭秘 IPFS 工作原理

一 repo


1 什么是repo?

我們知道泛烙,ipfs啟動(dòng)之前需要先運(yùn)行ipfs init初始化藐唠,什么意思坊饶?就是生成該程序的配置信息和初始的數(shù)據(jù)庫(kù),就像一個(gè)商店要開(kāi)張迎業(yè)津函,先要把商店蓋好,貨物提前采購(gòu)好,那這些初始化的數(shù)據(jù)放置在哪里呢?位于每個(gè)用戶的家目錄下.ipfs目錄下展运,如下圖(我是以ec2-user用戶的身份登錄的):

[ec2-user@ip-172-31-23-215 ~]$ pwd

/home/ec2-user

[ec2-user@ip-172-31-23-215 ~]$ ls .ipfs

api?blocks? config?datastore? datastore_spec?keystore? repo.lock? version

那這些存儲(chǔ)配置信息和數(shù)據(jù)庫(kù)的目錄怒允,就叫repo( 全稱:repository ,倉(cāng)庫(kù))

2 repo的作用迷殿?

當(dāng)要向ipfs申請(qǐng)數(shù)據(jù)時(shí),ipfs先會(huì)去本地的repo目錄下去查找需要的數(shù)據(jù),repo目錄里的數(shù)據(jù)分兩部分,一部分是metadata(元數(shù)據(jù))一部分是block數(shù)據(jù)(真正的內(nèi)容)踊挠。metadata想像成是商店的賬本权谁,賬本上記錄了所有商店的產(chǎn)品清單(目錄),而block就是擺放在商店里的具體的內(nèi)容运嗜。

運(yùn)行ipfs repo stat命令,查看repo的狀態(tài):

[ec2-user@ip-172-31-23-215 ~]$ ipfs repo stat

NumObjects: 21

RepoSize: ? 1374684

StorageMax: 10000000000

RepoPath: ? /home/ec2-user/.ipfs

Version:??? fs-repo@6

我們嘗試向ipfs倉(cāng)庫(kù)里添加一個(gè)文件阱洪,倉(cāng)庫(kù)的狀態(tài)也相應(yīng)變化

[ec2-user@ip-172-31-23-215 ~]$ echo "ipfs" >foo

[ec2-user@ip-172-31-23-215 ~]$ ipfs add foo

added QmbXBAKDgbhE8HkGuEF4FuQQJej2mxqXtYSMsBPuJDqgjq foo

[ec2-user@ip-172-31-23-215 ~]$ ipfs repo stat

NumObjects: 25

RepoSize: ? 1387472

StorageMax: 10000000000

RepoPath: ? /home/ec2-user/.ipfs

Version:??? fs-repo@6

二 Bootstrap list


1 什么是bootstrap list?

如果ipfs只是通過(guò)自己的倉(cāng)庫(kù)查找數(shù)據(jù)蚌本,那就太狹隘了轴猎,ipfs還會(huì)根據(jù)bootstrap 列表,了解網(wǎng)絡(luò)上其他節(jié)點(diǎn)的對(duì)等體列表,如果自己的倉(cāng)庫(kù)里沒(méi)有需要的數(shù)據(jù)矛渴,就通過(guò)bootstrap列表筐赔,查到其它的節(jié)點(diǎn)是否有需要的數(shù)據(jù)。 IPFS自帶有默認(rèn)的受信任對(duì)等列表鳞绕。

[ec2-user@ip-172-31-23-215 ~]$ ipfs? bootstrap list

/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd

/ip4/34.219.173.48/tcp/4001/ipfs/QmbZWkAvsFbN6Mfj8d5AnBjELb6zi6NFnFZtaDubL7bhok

...

上面列出的行是默認(rèn)IPFS引導(dǎo)程序節(jié)點(diǎn)的地址 - 它們由IPFS開(kāi)發(fā)團(tuán)隊(duì)運(yùn)行冤竹。 列出的地址完全解析并以multiaddr格式指定,這使得每個(gè)協(xié)議都是明確的。 這樣票唆,您的節(jié)點(diǎn)就可以準(zhǔn)確知道到達(dá)引導(dǎo)節(jié)點(diǎn)的位置 - 該位置是明確的。 除非你明白這意味著什么,否則不要改變這個(gè)列表。 Bootstrapping是分布式系統(tǒng)中一個(gè)重要的安全故障點(diǎn):惡意引導(dǎo)對(duì)等方只能將您引入其他惡意對(duì)等方授滓。 建議保留IPFS開(kāi)發(fā)團(tuán)隊(duì)提供的默認(rèn)列表诚啃,或者 - 在設(shè)置專用網(wǎng)絡(luò)的情況下 - 保存您控制的節(jié)點(diǎn)列表。 不要將同行添加到您不信任的列表中。

2 實(shí)驗(yàn)

我為了更好理解ipfs的工作原理办斑,準(zhǔn)備了兩臺(tái)服務(wù)器A和B罪郊,分別安裝運(yùn)行了ipfs

在A服務(wù)器上:

[ec2-user@ip-172-31-23-215 ~]$ ipfs bootstrap rm --all ? ? ? ?刪除默認(rèn)的bootstrap list

removed /ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd

...

[ec2-user@ip-172-31-23-215 ~]$ ipfs bootstrap add /ip4/172.31.31.186/tcp/4001/ipfs/QmbZWkAvsFbN6Mfj8d5AnBjELb6zi6NFnFZtaDubL7bhok ? ?172.31.31.186是B服務(wù)器的IP ?最后面的ID是B服務(wù)器節(jié)點(diǎn)ID

added /ip4/172.31.31.186/tcp/4001/ipfs/QmbZWkAvsFbN6Mfj8d5AnBjELb6zi6NFnFZtaDubL7bhok

[ec2-user@ip-172-31-23-215 ~]$ ipfs bootstrap list?

/ip4/172.31.31.186/tcp/4001/ipfs/QmbZWkAvsFbN6Mfj8d5AnBjELb6zi6NFnFZtaDubL7bhok

在B服務(wù)器上操作同A橄维,省略

環(huán)境OK后,我做了一個(gè)測(cè)試實(shí)驗(yàn)店溢,最終驗(yàn)證一個(gè)結(jié)果遭贸,當(dāng)在A服務(wù)器的IPFS上上傳了文件后,在B服務(wù)器上是可以查找到了踏堡,同時(shí)B服務(wù)器會(huì)把查詢的結(jié)果保存到repo里腐魂,那這樣,當(dāng)A服務(wù)器宕機(jī)后,網(wǎng)絡(luò)上還是可以通過(guò)B獲取到數(shù)據(jù)绕辖。

三 Pinning


1 什么是Pinning?

ipfs有一個(gè)相當(dāng)積極的緩存機(jī)制,可以在對(duì)其執(zhí)行任何ipfs操作后很短時(shí)間內(nèi)將對(duì)象保留在本地,但這些對(duì)象可能會(huì)被定期垃圾清理。 為了防止垃圾收集簡(jiǎn)單地固定你關(guān)心的哈希刘绣,固定的方法就是Pinning

Pinning 是ipfs中非常重要的概念移斩。 ipfs試圖讓它感覺(jué)每個(gè)單獨(dú)的對(duì)象都是本地的, 固定是允許你告訴ipfs始終保持給定對(duì)象本地的機(jī)制。

2 實(shí)驗(yàn)

查看哪些數(shù)據(jù)被Pinning

[ec2-user@ip-172-31-23-215 ~]$ ipfs pin ls

QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn recursive

QmbXBAKDgbhE8HkGuEF4FuQQJej2mxqXtYSMsBPuJDqgjq recursive

QmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y indirect

...

準(zhǔn)備文件

[ec2-user@ip-172-31-23-215 ~]$ echo "ipfs rocks" >rocks

[ec2-user@ip-172-31-23-215 ~]$ ipfs add rocks

added QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy rocks

[ec2-user@ip-172-31-23-215 ~]$ ipfs pin ls

QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn recursive

QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy recursive

...

IPFS默認(rèn)會(huì)把新上傳的文件做Pinning.

清除repo緩存长搀,但被pinning的文件不會(huì)被清除

[ec2-user@ip-172-31-23-215 ~]$ ipfs repo gc ? ?清楚repo緩存

removed Qmaum8B9RA4gxZQRxJxxzEBEJBVfgz2DCgJSq2mzRzzJiP

removed QmQTBtcd7QWY15DsKiaAgWhtEAC6MqFu4AhvtEU2P1tiwx

...

[ec2-user@ip-172-31-23-215 ~]$ ipfs pin ls

QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFyrecursive

QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv recursive

...

[ec2-user@ip-172-31-23-215 ~]$ ipfs cat QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy

ipfs rocks內(nèi)容還可以查看到

刪除對(duì)該文件的Pinning?

[ec2-user@ip-172-31-23-215 ~]$ ipfs pin rm -r QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy

unpinned QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy

[ec2-user@ip-172-31-23-215 ~]$ ipfs repo gc

removed QmRTV3h1jLcACW4FRfdisokkQAk4E4qDhUzGpgdrd4JAFy ?該文件的緩存被清除

removed QmaBNU361QD9rA3rmhzTk8oCBd2aygyS9Cca3m81MReGJU

removed QmRY35rAQfSmerbh3JfMMUiecqytkVpnJC9B8tpEM9c3kk

四 工作原理


IPFS獲取數(shù)據(jù)的流程:

第一步:先查詢Pinning 如果沒(méi)有,則進(jìn)入第二步

第二步:查詢本地的repo ,如果沒(méi)有良蛮,則進(jìn)入第三步

第三步:根據(jù)bootstrap list 查尋其它節(jié)點(diǎn) ,如果沒(méi)有痴颊,就真的沒(méi)有

五 結(jié)論


IPFS就像一個(gè)強(qiáng)大的連接者瀑梗,手里有一個(gè)龐大的通信薄(bootstrap list)允蜈,只要網(wǎng)上有數(shù)據(jù)妓蛮,就能快速定位,緩存到自己的倉(cāng)庫(kù)(repo)里,并且對(duì)情有獨(dú)鐘的數(shù)據(jù)直接固定(pinning),永久鎖定夫否!霸氣驼鹅!


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌似嗤,老刑警劉巖豌注,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊痴,死亡現(xiàn)場(chǎng)離奇詭異系谐,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)梯刚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)嗦董,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)幸斥,“玉大人冗栗,你說(shuō)我怎么就攤上這事∶蘧” “怎么了万栅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵兽掰,是天一觀的道長(zhǎng)忧勿。 經(jīng)常有香客問(wèn)我卸夕,道長(zhǎng)廉白,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任谆膳,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己当凡,他們只是感情好朴则,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布古掏。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天缺厉,我揣著相機(jī)與錄音曹傀,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瑟由,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼动遭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哩簿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谋右,失蹤者是張志新(化名)和其女友劉穎坑雅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體悉尾,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葱弟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年将塑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敢辩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兽间。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饥瓷,到底是詐尸還是另有隱情棺克,我是刑警寧澤斤讥,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布澳眷,位于F島的核電站拓瞪,受9級(jí)特大地震影響兵钮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藐握,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸籽腕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春疗绣,著一層夾襖步出監(jiān)牢的瞬間塔逃,已是汗流浹背立轧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工疆导, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留均蜜,地道東北人充择。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓琴儿,卻偏偏與公主長(zhǎng)得像晒屎,于是被迫代替她去往敵國(guó)和親仔沿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子成福,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容