作者簡(jiǎn)介:戴嘉樂(lè)( Mr.Maple ) | 前百度高級(jí)研發(fā)工程師 | IPFS應(yīng)用實(shí)踐者&布道師|
個(gè)人網(wǎng)站:https://www.daijiale.cn
聯(lián)系方式:微信號(hào):daijiale6239料仗。
一唁毒、背景
上篇文章《(入門)基于IPFS和Ngrok構(gòu)建自維護(hù)資源網(wǎng)關(guān)》,我們通過(guò)Ngrok為IPFS節(jié)點(diǎn)配置HTTP Tunnels菲语,充分利用了其NAT穿越的特性户魏,成功搭建了屬于自己的資源網(wǎng)關(guān)媚媒,為他人提供IPFS節(jié)點(diǎn)服務(wù)兰珍。但是這僅僅是一個(gè)雛形温亲,缺陷還很多藕溅,這篇文章來(lái)講解對(duì)資源網(wǎng)關(guān)的種種優(yōu)化和配置匕得。
二、意義
之前一些朋友問(wèn)到了這件事的意義巾表,這邊簡(jiǎn)單梳理了一下汁掠,我認(rèn)為對(duì)于 IPFS這塊的開(kāi)發(fā)者 ,需要 部署私有集群的DevOps 集币,以及未來(lái)想 組建Filecoin礦場(chǎng)的礦工 考阱,這件事情都相對(duì)比較必要,具體如下:
2.1 IPFS資源網(wǎng)關(guān)的意義:
1. 目前主流瀏覽器還未全面支持 ipfs:// 協(xié)議鞠苟,需要安裝專門的客戶端/插件
2. 沒(méi)有安裝IPFS Desktop乞榨,也可以通過(guò)HTTP方式與IPFS網(wǎng)絡(luò)產(chǎn)生交互來(lái)獲取IPFS 網(wǎng)絡(luò)的內(nèi)部資源。
2.2 自維護(hù)的意義:
2.2.1 ipfs.io 默認(rèn)網(wǎng)關(guān)存在DNS污染現(xiàn)象:
ipfs.io IP解析所在的物理位置位于美國(guó) ThePlanet機(jī)房:
在國(guó)內(nèi)当娱,對(duì)ipfs.io的ping請(qǐng)求被解析為31.13.72.34 IP吃既,
此IP所在物理地址為:愛(ài)爾蘭Fackbook分公司,
ipfs.io存在DNS污染現(xiàn)象跨细。
2.2.2 默認(rèn)的Bootstrap都是指向官方提供的節(jié)點(diǎn):DigitalOcean 云計(jì)算中心
如果需要構(gòu)造自己的IPFS私有網(wǎng)絡(luò)鹦倚,需要為本地的私有節(jié)點(diǎn)添加反向代理。
2.2.3 增強(qiáng)網(wǎng)關(guān)訪問(wèn)安全性冀惭,將資源服務(wù)與代理服務(wù)用防火墻隔開(kāi)
2.2.4. 官方提供的 Public Gateway 穩(wěn)定性感人
兩個(gè)月前的:
最近看了一下:
三震叙、優(yōu)化與進(jìn)階
3.1 個(gè)性公網(wǎng)域名+IPNS掛載
上傳Hash為 QmdzsNmvKiKQve8z15gamNo5s31g9bTWhzBg9SKG1YKTow
的IPFS資源,并掛載到本地NodeID為QmeUGXG4K4hbNPbKDUycmNsWrU3nDN69LLgHkWU2yUN6FZ
的IPNS上散休,如下圖所示:
開(kāi)放網(wǎng)關(guān)媒楼,進(jìn)行效果對(duì)比測(cè)試:
監(jiān)控NAT請(qǐng)求效果:
一次個(gè)性公網(wǎng)域名(需要在Ngrok付費(fèi)申請(qǐng))+ IPNS掛載就完成了。
多節(jié)點(diǎn) IPNS 更換的方案
這邊也介紹下多節(jié)點(diǎn) IPNS 更換的方案戚丸,方便一些朋友更新網(wǎng)關(guān)資源的同時(shí)也可以保證對(duì)外的IPNS一致性:
- 1.節(jié)點(diǎn)A創(chuàng)建新公鑰:
ipfs key gen --type = rsa --size=2048 mykey
2.記錄生成在.ipfs/keystore中的公鑰mykey
-
3.發(fā)布IPFS資源A划址,得到hashA,掛載A節(jié)點(diǎn)限府,生成IPNS HashA:
ipfs name publish --key=mykey hashA
4.將節(jié)點(diǎn)A創(chuàng)建的公鑰mykey 復(fù)制到節(jié)點(diǎn) B 的keystore目錄
5.在節(jié)點(diǎn)B猴鲫,發(fā)布IPFS資源B,獲得hashB谣殊,掛載B節(jié)點(diǎn),得到IPNS HashB牺弄,這個(gè)值和IPNS HashA一致:
ipfs name publish --key=mykey hashB
3.2 網(wǎng)關(guān)資源優(yōu)化 (緩存/帶寬優(yōu)化等)
3.2.1 針對(duì)同IPFS網(wǎng)絡(luò)資源請(qǐng)求方:
設(shè)計(jì)了一種緩存自啟動(dòng)方案姻几,解決存儲(chǔ)和請(qǐng)求過(guò)程中的資源復(fù)用消耗:
3.2.2 針對(duì)外部HTTP網(wǎng)絡(luò)資源請(qǐng)求方:
設(shè)計(jì)了一種防作弊,解決過(guò)多帶寬資源消耗的方案:
這塊一定注意區(qū)分兩個(gè)場(chǎng)景概念:
- 同IPFS網(wǎng)絡(luò)請(qǐng)求場(chǎng)景 是指兩個(gè)節(jié)點(diǎn)共同運(yùn)行,暴露公共網(wǎng)關(guān)的同時(shí)蛇捌,通過(guò)HTTP進(jìn)行對(duì)等連接訪問(wèn)抚恒。
- 外部HTTP網(wǎng)絡(luò)請(qǐng)求場(chǎng)景 是通過(guò)NAT的形式將本地IPFS節(jié)點(diǎn)存儲(chǔ)的資源暴露在公網(wǎng)下,供各個(gè)應(yīng)用方络拌、設(shè)備方進(jìn)行HTTP訪問(wèn)俭驮,這里的IPFS節(jié)點(diǎn)角色相當(dāng)于一個(gè)中心存儲(chǔ)服務(wù)了,不具備P2P特性春贸。
優(yōu)化方案按照不同場(chǎng)景有不同策略混萝,之前很多朋友搞不清楚(確實(shí),也容易混淆)萍恕。
3.3 自動(dòng)化控制資源的分享權(quán)限
有時(shí)候針對(duì)我們自己構(gòu)建的私有IPFS網(wǎng)絡(luò)逸嘀,需要將資源外放,但是 外放需要策略來(lái)進(jìn)行自動(dòng)化控制(集成在業(yè)務(wù)環(huán)境里)允粤。
3.3.1 舉個(gè)很簡(jiǎn)單的場(chǎng)景實(shí)例
我編寫(xiě)的業(yè)務(wù)應(yīng)用需要 接收到特定以太坊智能合約的轉(zhuǎn)賬回調(diào)函數(shù) 崭倘,來(lái) 自動(dòng)開(kāi)啟對(duì)應(yīng)智能合約中IPFS資源外放的開(kāi)關(guān);
(eg:只有當(dāng)買家遵守以太坊的智能合約支付了一定數(shù)量的ETH或者其他ERC2.0代幣后类垫,才能解鎖獲取到我存儲(chǔ)在IPFS網(wǎng)路中的自拍照)
但這個(gè)IPFS網(wǎng)絡(luò)往往很多時(shí)候是我自己部署的私有集群(不會(huì)搭建私有網(wǎng)絡(luò)的朋友可以參考董哥的:IPFS指南: 私有網(wǎng)絡(luò)(private network)的搭建與使用)司光,默認(rèn)對(duì)外是不提供公共的尋址網(wǎng)關(guān)的,我該如何控制悉患?
3.3.2 資源分享權(quán)限實(shí)現(xiàn)
這邊我們可以充分利用Ngrok的Client Restful API來(lái)對(duì)NAT進(jìn)行自動(dòng)化收放残家,從而實(shí)現(xiàn)整個(gè)業(yè)務(wù)場(chǎng)景下的程序化控制:
3.3.3 Ngrok的Client Restful API Postman測(cè)試
四、IPFS資源網(wǎng)關(guān)應(yīng)用面
- 配合 微服務(wù)架構(gòu)的后端系統(tǒng) 提供服務(wù)
- 將IPFS私有網(wǎng)絡(luò)中的 資源靈活外放
- 制作自己的付費(fèi)資源池(類似OSS存儲(chǔ))
- 為前后端聯(lián)調(diào)提供API調(diào)試工具购撼,Mock數(shù)據(jù)(需要配置專門的前端瀏覽器插件跪削,例如:FE助手)
當(dāng)然這塊還有很多的實(shí)踐價(jià)值和我未曾想到的場(chǎng)景,歡迎對(duì)這塊有興趣繼續(xù)研究的朋友一起交流迂求,聯(lián)系方式在文尾碾盐。
五、參考文獻(xiàn)
相關(guān)文章和視頻推薦
【戴嘉樂(lè)】(入門)基于IPFS和Ngrok構(gòu)建自維護(hù)資源網(wǎng)關(guān)
圓方圓學(xué)院匯集大批區(qū)塊鏈名師揩局,打造精品的區(qū)塊鏈技術(shù)課程毫玖。 在各大平臺(tái)都長(zhǎng)期有優(yōu)質(zhì)免費(fèi)公開(kāi)課,歡迎報(bào)名收看凌盯。
公開(kāi)課地址:https://ke.qq.com/course/345101