加快與維持 IPFS 檔案下載速度的幾種方式

ipfs 輸出CID v1 加上網址

How to improve download speed from IPFS and make it more useable.

IPFS 是一款分散式的檔案儲存系統,有興趣的朋友可以參考本站的 IPFS 教學,相關的資訊本文就不多贅述。雖然開發者 Protocol Labs 的願景很美好,但它作為圖床的實際應用上卻不是非常理想。常見的毛病像是初次檔案探索 (Content discovery) 速度緩慢、節點 (IPFS Gateway) 速度不穩、連線逾時等。

 

其中最大的問題在於,檔案的留存與下載速度取決於被存取的頻率。即便你手動將檔案錨釘 (pin) 在自己的電腦或其他第三方服務 (Pinata) 上,冷門檔案於其他節點上的備份最終不是被 Garbage Collection 清除,就是出現 504 Gateway Timeout 存取逾時的錯誤。雖然 IPFS 原始設計不是為了速度,而是分散與檔案存續,但我們還是可以用一些小技巧來增加它的可用性。

 

 

IPFS 上傳後找不到檔案?

如果遇到 IPFS 上傳後找不到檔案 (504 time out) 的問題,可以參考這篇教學,將檔案上傳至第三方的 IPFS 上傳服務來加快被其他節點與閘道器探索的速度。

 

 

用第三方平台錨釘檔案 (Pinata)

如果不希望電腦長時間開機自己當節點,可以將檔案上傳至 Pinata 平台幫你釘住檔案。不過該平台給予免費使用者的頻寬相當有限,因此不適合用來作為檔案分享的種子來源,但它可以讓你的檔案不被 Garbage Collection。習翠

 

 

腳本自動定時下載檔案,延續檔案存留時間

既然檔案存留時間與下載速度取決於熱門度,那我們可以用批次下載軟體 (uGet, curl, wget) 進行定時下載以維持檔案存續時間。然而要注意的是,目前尚不清楚各大閘道器 (IPFS Gateway) 、網關與節點是否會偵測特定頻繁存取的 IP 並且降低下載速度,因此請勿過度濫用這類腳本工具。


目前已知 Cloudflare 的閘道器確實會阻擋頻繁發出請求的 IP,並且傳回 "429 Too Many Requests" 的錯誤。


為了避免這個問題,我們可以用指令來降低 wget 的下載速度與間隔,搭配上 tor 和 tsocks 來切換 IP,減緩 IPFS 伺服器的負載 。

 

以下糊塗流浪貓將示範如何用 wget 腳本來達成這個任務。

 

 

用 IPFS 輸出被錨釘的檔案列表

用以下指令產生 CID v1 的檔案列表。


ipfs cid format -v 1 -b base32 $(ipfs pin ls -q --type recursive)  > CID.txt

 

 

編寫自動化下載腳本

參考以下的程式碼,將指定的閘道器網址 (ipfs.io, dweb.link) 與檔案 CID 結合後用 wget 進行下載。


download-ipfs.sh

wget --limit-rate=5k --wait 10 --random-wait --tries=3 --read-timeout=10 --delete-after  $(awk ' {print "http://ipfs.io/ipfs/" $0}  ' /home/CID.txt)

#--limit-rate=5k 限制下載速度
#--wait 10 --random-wait 隨機等待指定秒數乘上 0.5 至 1.5。
#--tries=3 重試三次後放棄
#--read-timeout=10 發送請求後超過10秒沒回應就重試 (HTTP request sent, awaiting response)
#--delete-after 下載後刪除檔案
#-P /home/data 指定存檔位置
#-i /home/list.txt 指定檔案列表
#--connect-timeout=1


 

 

用 Crontab 進行時間排程


crontab -e
EDITOR=nano crontab -e # 使用 nano 

0 */5 * * * /home/download-ipfs.sh # 每五小時執行一次

 

如果想搭配 tor 來切換 IP,請參考延伸閱讀的洋蔥路由器教學。

 

 

使用 LikeCoin + ISCN + Arweave + IPFS

若希望檔案永久留存在網路上,可以用 LikeCoin 註冊 ISCN 的方式,將檔案寫入 Arweave 區塊鏈並永久釘在 IPFS 上。



永久圖床!Arweave 幣的購買與轉入錢包



其他指令

產生檔案列表並自動加上 https://ipfs.io/ipfs/ 閘道器。

ipfs cid format -v 1 -b base32 $(ipfs pin ls -q --type recursive) | awk ' { print "https://ipfs.io/ipfs/" $0 } ' > urlcid.txt


 

延伸閱讀

更多洋蔥路由器 Tor 教學

用 curl 和 wget 命令列批次、定時下載檔案列表

uGet - 批次下載圖片、檔案且支援剪貼簿與續傳的下載工具

永久圖床?用 LikeCoin 註冊 ISCN 將檔案釘在 IPFS 上進行分享

解決 IPFS 上傳後找不到檔案的問題 (504 time out)

更多 IPFS

 

 

 

留言