【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

圓方圓區塊鏈發表於2018-11-17

作者簡介:戴嘉樂( 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和Ngrok構建自維護資源閘道器

在國內,對ipfs.io的ping請求被解析為31.13.72.34 IP,

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

此IP所在實體地址為:愛爾蘭Fackbook分公司,

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

ipfs.io存在DNS汙染現象。

2.2.2 預設的Bootstrap都是指向官方提供的節點:DigitalOcean 雲端計算中心

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

如果需要構造自己的IPFS私有網路,需要為本地的私有節點新增反向代理。

2.2.3 增強閘道器訪問安全性,將資源服務與代理服務用防火牆隔開

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

2.2.4. 官方提供的 Public Gateway 穩定性感人

兩個月前的:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

最近看了一下:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

三、優化與進階

3.1 個性公網域名+IPNS掛載

上傳Hash為 QmdzsNmvKiKQve8z15gamNo5s31g9bTWhzBg9SKG1YKTow 的IPFS資源,並掛載到本地NodeID為QmeUGXG4K4hbNPbKDUycmNsWrU3nDN69LLgHkWU2yUN6FZ的IPNS上,如下圖所示:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

開放閘道器,進行效果對比測試:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器
監控NAT請求效果:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

一次個性公網域名(需要在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網路資源請求方:

設計了一種快取自啟動方案,解決儲存和請求過程中的資源複用消耗:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

3.2.2 針對外部HTTP網路資源請求方:

設計了一種防作弊,解決過多頻寬資源消耗的方案:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

這塊一定注意區分兩個場景概念:

  • 同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進行自動化收放,從而實現整個業務場景下的程式化控制:

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

3.3.3 Ngrok的Client Restful API Postman測試

【戴嘉樂】(進階)基於IPFS和Ngrok構建自維護資源閘道器

四、IPFS資源閘道器應用面

  • 配合 微服務架構的後端系統 提供服務
  • 將IPFS私有網路中的 資源靈活外放
  • 製作自己的付費資源池(類似OSS儲存)
  • 為前後端聯調提供API除錯工具,Mock資料(需要配置專門的前端瀏覽器外掛,例如:FE助手)

當然這塊還有很多的實踐價值和我未曾想到的場景,歡迎對這塊有興趣繼續研究的朋友一起交流,聯絡方式在文尾。

五、參考文獻


相關文章和視訊推薦

【戴嘉樂】(入門)基於IPFS和Ngrok構建自維護資源閘道器

圓方圓學院彙集大批區塊鏈名師,打造精品的區塊鏈技術課程。 在各大平臺都長期有優質免費公開課,歡迎報名收看。 公開課地址:ke.qq.com/course/3451…

相關文章