IPFS開發者大會記錄

上週有幸與 @zeckli 一起去巴塞羅那參加了IPFS開發者大會。

Matters正在建立一個分佈式的作品發佈网络,與其他分佈式应用一樣,核心問題是數據的存儲與傳輸。

IPFS生態中提供了一系列通用的工具和協議,用於建立各種不同類型的分佈式應用,使得IPFS成為了許多分佈式項目關注的重點。

這次與會的項目種類繁多,比如工廠中的物聯網、docker image分佈式分發、分佈式的npm與Guix、以太坊+IPFS域名管理、分佈式身份認證等等。我們也通過世界各地一百多位開發者,一窺分佈式技術與生態的進展。

會場上有許多有趣的項目。圖中這一個,是用LED陣列可視化一個IPFS集群中每個機器存儲的數據情況。
巴塞羅那的郊區每日陽光燦爛

三天的大會中,最開始是幾門workshop形式的課程,介紹IPFS的基本結構與用法,讓與會者有基本的共識。

IPFS拆分下來,大體可以看做兩個子項目,IPLDlibp2p

一般通過加密算法驗證的系統,數據都會存儲在通過哈希算法(hash)構造的樹狀結構中,被稱作哈希樹(hash tree,或默克爾樹 Merkle tree)。IPLD定義了數據之間相連的通用方式,負責建構、驗證及調取哈希樹,通用於以太坊、比特幣、git等數據結構。

libp2p則是IPFS之外應用最廣的一個子項目,從邊緣運算到新型的區塊鏈項目,都可以看到它的影子。libp2p主要負責處理客戶端之間通過不同端口和協議相互連接。這一部分原本非常繁瑣,而libp2p在不同的協議和算法之上建立了良好的抽象層,極大簡化了開發過程,也降低了不同協議之間轉換的成本。

workshop形式的課程,讓大家同步基礎概念。

除了workshop形式的課程外,三天的大會中有許多lightning talk,簡短地介紹不同的分佈式項目。此外,還有許多不同形式的分組討論,以頭腦風暴和hackathon的方式,理解或者解決某個具體問題,是與世界各地高手一起協作的好機會。

有一次我參加了DHT(distributed hash table,分佈式哈希表)的小組,同組的正好有OpenBazaar的開發者,向其他人很詳細地介紹了DHT的運作方式和局限。DHT是個分佈式key-value數據庫,也是“分佈式”的核心。目前IPFS採用的是Kademlia算法,簡單直接、容易實現,但是也有一些問題,比如單個文件訪問評率過高會讓部分節點過載。Coral DSHT算法的一些設計可以解決這個問題,也會很快引入到IPFS中。

另一次參加了關於動態數據的討論,同組的是radicle(一個非常酷的項目!)的開發者和IIT Bombay的CS教授,一起討論目前IPFS處理動態數據上的局限及可能的改良措施。目前IPFS中的動態數據,主要是通過IPNS提供指針,指向不同的IPFS哈希值,并由IPNS發佈者私鑰簽署驗證。但目前IPNS的更新速度非常緩慢。解決IPNS效率問題的一個方案是整合進PubSub機制,目前已經開發完成,還在測試之中。

有一些討論和頭腦風暴的結果,會整理為slides,向大家總結。

從很多更有IPFS開發經驗的團隊那裡,我們也了解到了IPFS當前的其他局限,之後的計劃與設計中也會更加留心。

一個是網絡地址轉換(NAT)。當節點在一個內網中時,節點的IP由內網的路由分配,與外部其他節點的聯通需要轉換IP地址。但是目前IPFS的NAT功能尚不夠完善,特別是在需要穿透多層路由時,有時無法連接上其他節點。

另一個問題是內置的匿名機制。節點最後相連仍然需要通過IP地址,所以目前DHT中也是可以看到其他節點的IP的。一種解決思路是通過Tor或者I2P進行傳輸,與其他暗網一樣掩蓋用戶IP。但是這樣的就會犧牲掉傳輸性能,特別是對於Tor。這一部分的功能開發剛剛開始,但應該比較容易修補和整合。

不過關於匿名機制,葡萄牙的一位開發者開發了p3lib,提供了另一個思路。p3lib不是去掩蓋IP,而是去混淆不同節點想要獲取的數據包。這樣監聽者雖然能夠看到節點的IP,但是無法知道哪個節點獲取了什麼數據。這個方案目前已經可用了,並且似乎效率不錯。


IPFS camp的與會項目中,像Matters這樣直接面向普通用戶、解決日常問題的項目占極少數。大部分項目仍然很“技術”,要麼面向開發者、解決開發過程的問題,要麼是從已有的技術出發、暢想能夠實現什麼。這些項目雖然能夠推動分佈式技術本身的發展,但是本身很難在市場上立足。

雖然對於每個思考過網絡結構的人,都知道分佈式網絡會帶來更好的未來,但是如果分佈式網絡無法提供中心化網絡沒有的功能,市場仍然沒有動力去完成這個轉變。所以在一個unconf環節,我們幾個人在一起頭腦風暴了一下哪些場景中分佈式網絡必不可少。

大家都想到最顯著的場景是突破信息封鎖,及保證信息的保存。比特幣的流行和黑市交易以及跨境轉賬是分不開的,也算需要突破金融機構的封鎖。隨著各國政治獨裁與民族主義的興起,能夠更好保障信息自由和安全的技術會更加重要。Matters也是因為這個原因決定打造分佈式應用。

另一個巨大的應用場景是物聯網。這次看到的項目中,數據規模最大的當屬Actyx,用IPFS解決工廠中物聯網的問題。因為在工廠中有大量機器相互協作,並且有強烈的電磁場干擾,用中心化的路由和服務器既浪費帶寬,又容易被屏蔽。於是這些機器之間直接相連,通過IPFS進行高效快速的互動。

Actyx通過IPFS解決工廠中的物聯網問題

類似的場景還有很多,自動駕駛是快速湧現的一個。自動駕駛的場景中,每一條車流都是一個天然的計算機集群,相互之間需要交流與互動,天然適合形成無線網狀網絡。這一方面可以降低信號延遲、加快反應速度,另一方面可以節省整個地區所需要的信號帶寬、降低開支。雖然中心化架構仍然是大部分工程師最熟悉的方案,但有一些自動駕駛公司已經開始試驗分佈式網絡了。

另一個場景是局域網。分佈式網絡在沒有互聯網運營商提供服務時,仍然可以運作。在大規模集會或者突發災害中,會成為最可靠的信息通道。現在berty等分佈式即時通訊項目在通過libp2p搭建這樣的網絡。Nodle這樣的項目則更進一步,將區塊鏈加入到流量分享之中,等於讓物聯網中的每個設備都成為了一個微型的互聯網提供商。

另一個大家討論到的問題是,分佈式項目如何生存。畢竟,中心化的平台持有了所有的數據與權力,不管是從數據間接獲取利潤,還是從用戶直接獲取利潤,都相對容易。分佈式項目則會難很多,團隊如何生存就成了很大的問題。

這次到場的qri項目,為分佈式項目的生存提供了一個範例:讓軟件開源,并保證分佈式情況下可用;同時提供付費的中心化服務,用以增加效率,或者提供其他分佈式應用本身無法滿足的功能。


短短幾天下來,我對於IPFS團隊的能力和動機有了很多信任。Protocol Lab集結了一批分佈式領域有信仰、有能力的開發者,相信未來的網絡該是、也會是分佈式的,並聯手一步步把這個未來變成現實。

因為Filecoin的成功,IPFS社區已經開始有投機者出現,但總體還是維持了友善和純粹的技術氛圍。Protocol Lab的團隊本身也還沒有多少變現的想法,包括Filecoin獲得的資金也都依協議鎖死在Filecoin本身的開發上。

過去大半年我們在Matters網站上進行的牛刀小試,並未發現太大問題。但是下一步客戶端的開發,則一定會觸到IPFS的瓶頸,需要更多依賴和參與IPFS社區。Matters曾與IPFS團隊有過初步聯繫,這次也和IPFS瀏覽器部分的負責人專門討論了客戶端的計劃。他表示,因為IPFS團隊對中國的網絡環境了解有限,很需要我們來提issue,他也願意來推動Matters所需要的優化。

這三天初識社區,比較全面地了解了IPFS的進展,也建立了一些聯繫。客戶端的設計、後續與社區的協作,相信也都會因此更加順利。

豐盛的離別晚宴