作者簡介:戴嘉樂( Mr.Maple ) | 前百度高階研發工程師 | IPFS應用實踐者&佈道師| 個人網站:www.daijiale.cn 聯絡方式:微訊號:daijiale6239。
一、背景
上篇文章《(入門)基於IPFS和Ngrok構建自維護資源閘道器》,我們通過Ngrok為IPFS節點配置HTTP Tunnels,充分利用了其NAT穿越的特性,成功搭建了屬於自己的資源閘道器,為他人提供IPFS節點服務。但是這僅僅是一個雛形,缺陷還很多,這篇文章來講解對資源閘道器的種種優化和配置。
二、意義
之前一些朋友問到了這件事的意義,這邊簡單梳理了一下,我認為對於 IPFS這塊的開發者 ,需要 部署私有叢集的DevOps ,以及未來想 組建Filecoin礦場的礦工 ,這件事情都相對比較必要,具體如下:
2.1 IPFS資源閘道器的意義:
1. 目前主流瀏覽器還未全面支援 ipfs:// 協議,需要安裝專門的客戶端/外掛
2. 沒有安裝IPFS Desktop,也可以通過HTTP方式與IPFS網路產生互動來獲取IPFS 網路的內部資源。
複製程式碼
2.2 自維護的意義:
2.2.1 ipfs.io 預設閘道器存在DNS汙染現象:
ipfs.io IP解析所在的物理位置位於美國 ThePlanet機房:
在國內,對ipfs.io的ping請求被解析為31.13.72.34 IP,
此IP所在實體地址為:愛爾蘭Fackbook分公司,
ipfs.io存在DNS汙染現象。
2.2.2 預設的Bootstrap都是指向官方提供的節點:DigitalOcean 雲端計算中心
如果需要構造自己的IPFS私有網路,需要為本地的私有節點新增反向代理。
2.2.3 增強閘道器訪問安全性,將資源服務與代理服務用防火牆隔開
2.2.4. 官方提供的 Public Gateway 穩定性感人
兩個月前的:
最近看了一下:
三、優化與進階
3.1 個性公網域名+IPNS掛載
上傳Hash為 QmdzsNmvKiKQve8z15gamNo5s31g9bTWhzBg9SKG1YKTow
的IPFS資源,並掛載到本地NodeID為QmeUGXG4K4hbNPbKDUycmNsWrU3nDN69LLgHkWU2yUN6FZ
的IPNS上,如下圖所示:
開放閘道器,進行效果對比測試:
監控NAT請求效果:一次個性公網域名(需要在Ngrok付費申請)+ IPNS掛載就完成了。
多節點 IPNS 更換的方案
這邊也介紹下多節點 IPNS 更換的方案,方便一些朋友更新閘道器資源的同時也可以保證對外的IPNS一致性:
- 1.節點A建立新公鑰:
ipfs key gen --type = rsa --size=2048 mykey
-
2.記錄生成在.ipfs/keystore中的公鑰mykey
-
3.釋出IPFS資源A,得到hashA,掛載A節點,生成IPNS HashA:
ipfs name publish --key=mykey hashA
-
4.將節點A建立的公鑰mykey 複製到節點 B 的keystore目錄
-
5.在節點B,釋出IPFS資源B,獲得hashB,掛載B節點,得到IPNS HashB,這個值和IPNS HashA一致:
ipfs name publish --key=mykey hashB
3.2 閘道器資源優化 (快取/頻寬優化等)
3.2.1 針對同IPFS網路資源請求方:
設計了一種快取自啟動方案,解決儲存和請求過程中的資源複用消耗:
3.2.2 針對外部HTTP網路資源請求方:
設計了一種防作弊,解決過多頻寬資源消耗的方案:
這塊一定注意區分兩個場景概念:
- 同IPFS網路請求場景 是指兩個節點共同執行,暴露公共閘道器的同時,通過HTTP進行對等連線訪問。
- 外部HTTP網路請求場景 是通過NAT的形式將本地IPFS節點儲存的資源暴露在公網下,供各個應用方、裝置方進行HTTP訪問,這裡的IPFS節點角色相當於一箇中心儲存服務了,不具備P2P特性。
優化方案按照不同場景有不同策略,之前很多朋友搞不清楚(確實,也容易混淆)。
3.3 自動化控制資源的分享許可權
有時候針對我們自己構建的私有IPFS網路,需要將資源外放,但是 外放需要策略來進行自動化控制(整合在業務環境裡)。
3.3.1 舉個很簡單的場景例項
我編寫的業務應用需要 接收到特定以太坊智慧合約的轉賬回撥函式 ,來 自動開啟對應智慧合約中IPFS資源外放的開關;
(eg:只有當買家遵守以太坊的智慧合約支付了一定數量的ETH或者其他ERC2.0代幣後,才能解鎖獲取到我儲存在IPFS網路中的自拍照)
但這個IPFS網路往往很多時候是我自己部署的私有叢集(不會搭建私有網路的朋友可以參考董哥的:IPFS指南: 私有網路(private network)的搭建與使用),預設對外是不提供公共的定址閘道器的,我該如何控制?
3.3.2 資源分享許可權實現
這邊我們可以充分利用Ngrok的Client Restful API來對NAT進行自動化收放,從而實現整個業務場景下的程式化控制:
3.3.3 Ngrok的Client Restful API Postman測試
四、IPFS資源閘道器應用面
- 配合 微服務架構的後端系統 提供服務
- 將IPFS私有網路中的 資源靈活外放
- 製作自己的付費資源池(類似OSS儲存)
- 為前後端聯調提供API除錯工具,Mock資料(需要配置專門的前端瀏覽器外掛,例如:FE助手)
當然這塊還有很多的實踐價值和我未曾想到的場景,歡迎對這塊有興趣繼續研究的朋友一起交流,聯絡方式在文尾。
五、參考文獻
相關文章和視訊推薦
【戴嘉樂】(入門)基於IPFS和Ngrok構建自維護資源閘道器
圓方圓學院彙集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。 公開課地址:ke.qq.com/course/3451…