作者:Outprog @ Contributor of PermaDAO
審閱:Xiaosong HU @ Contributor of PermaDAO
Permaweb 是Arweave 生態提出的下一代互聯網架構,Permaweb 所強調的是應用和網站具備永久可訪問的特性,它可以讓互聯網擁有記憶,不再遺忘。同時,Permaweb 具有Severless 的特性,開發者在構建的過程中不需要自行部署前端和後端,開發的所有服務都將由Permaweb 的基礎服務層提供。
更多關於Permaweb 的概念和願景,可以查看劉毅老師撰寫的“Arweave 的潛力是複興亞歷山大圖書館,而非Filecoin 替代品” 了解更多關於Permaweb(永在網)的理念。
本文將從技術角度結合SCP 理論對Permaweb 進行解讀。
基本框架
Permaweb 使用了三層架構,頂層為應用層,是面向用戶的接口。中間層是服務層,為應用提供後端服務。底層則是存儲層,使用Arweave 為應用提供數據存儲服務。
Permaweb 的架構和Web2 架構並沒有太大的區別,應用層對應的是傳統Web2 的前端,服務層對應的是後端,存儲層對應的是物理服務器或數據庫。
使用去中心化存儲是Permaweb 和Web2 的最大區別。 Permaweb 應用集成永久存儲Arweave 後,篡改和抹除應用的內容將變得非常困難,應用將獲得了去中心化的屬性。雖然Permaweb 的架構在表面上與Web2 有相似之處,但其底層技術和設計哲學帶來了根本性的區別。
Permaweb 的應用架構如下圖所示
下文將對Permaweb 的三層架構進行詳細介紹
存儲層
存儲層是Permaweb 的核心,如果存儲層沒有使用區塊鏈技術,Permaweb 和Web2 將沒有任何區別。 Permaweb 的存儲層不一定局限於Arweave。理論上也可以使用Bitcoin 或者Ethereum 作為存儲層打造一個完整的Permaweb,只是開發者和用戶很難承擔過高的存儲成本。 Arweave 是目前最專業的做永久存儲區塊鏈,1 GB 僅需花費5 美金是Permaweb 的最優的選擇。
那麼存儲層是否可以使用IPFS?如果使用IPFS,Permaweb 則將失去數據可追溯的特性,IPFS 的數據CID 可以保障不可篡改,但IPFS 沒有使用區塊鏈技術。 IPFS 的數據沒有區塊時間戳,因此無法辨別數據的產生時間;同時,在IPFS 服務節點關閉後數據也將丟失,無法保證數據永久可追溯。
服務層
服務層作為統一的中間件為應用提供API,類似於Web2 微服務集群, 是無狀態的可以水平擴展。通常,Permaweb 的服務層會提供標準化接口和協議( 類似於Web2 的gRPC 或者Thrift 完全開源開放的協議),這些接口和協議完全開放開源,任何部署服務的服務商可以按照協議標準提供同樣的API。任何應用只要使用了標準協議開發,就可以在不同的服務上運營和使用。
目前Arweave 的服務層包含四個核心組件,分別是:
- 網關服務:會緩存頻繁使用的Arweave 數據。如arweave.asia , arweave.dev , g8way.io , arweave.world等。
- 數據綁定服務(批量數據打包):使用Arweave ANS-104 標準,將大量的數據批量打包到Arweave。如bundlr, arseeding 等。 ANS-104 的數據也同樣可以使用GraphQL 進行檢索。
- 序列化服務:智能合約服務,支付服務等。如Warp,everPay 等。
- 索引服務: Arweave Tags 檢索服務,全文索引服務。如Adot,KNN3,goldsky 等。
目前標準協議僅含上述四個模塊,未來Permaweb 的服務層是可以進一步拓展新標準。
應用層
Permaweb 應用具備Serverless 特性,開發者無需部署任何服務器。由於服務層為應用層提供了標準接口,按照規範開發的應用可以在任意的服務層打開和使用。
交互:用戶僅需和服務層進行交互,無須和底層區塊鏈進行交互。
- 資源加載:標準化的網關為Permaweb 的前端所需要加載的所有文件資源將,這些文件資源按照Manifest 標準,將存儲層上的資源組織成目錄格式,便於web 協議進行加載和組裝。
- 數據寫入: Permaweb 的寫入通常使用了Arweave 上的ANS-104 標準,該標準可以支持大規模的數據寫入。採用ANS-104 實現的bundle 服務讓Permaweb 的寫入體驗和Web2 完全一致。
- 數據查詢和索引:標準化的索引服務讓Permaweb 可以動態加載內容。索引的建立無需等待數據最終打包到Arweave,數據上傳到bundle 服務後即可實時生成高效的應用索引,為用戶提供實時的數據查詢能力。
綜上所述,交互上Permaweb 可以做到和Web2 完全一致的體驗。
抗審查:標準協議和接口為應用提供了抗審查性的特性。下面列出網址就是一個Permaweb 應用名字叫cookbook:
- https://cookbook.arweave.asia/
- https://cookbook.arweave.dev/
- https://cookbook.g8way.io/
- https://cookbook.ar-io.dev/
可以發現,打開任何一個網址都可以訪問cookbook 這個應用,該網站由全球不同的網關,不同的服務器提供服務。如果arweave.asia不能訪問,用戶仍然可以使用其他幾個網址繼續使用該應用。就算所有的網關被關閉,cookbook 的數據使用了Arweave 存儲,這些數據不會丟失讓服務商可以隨時恢復cookbook 應用。
使用Arweave 永久存儲作為存儲層,可以保障每一個Permaweb 應用的數據去中心化;採用了標準化的、開源的協議作為服務層,可以避免個別服務器由於不可抗力的原因被關閉所帶來的審查風險。 Permaweb 應用具備去中心化抗審查的特性。
微服務版本的SCP
Permaweb 的架構和傳統Web2 的架構相似,本質上Permaweb 就是一套基於去中心化存儲的微服務應用架構。
微服務是Web2 開發使用的軟件架構模式,它將一個大型複雜的應用程序拆分成一系列更小、更獨立的服務單元。每個微服務都是一個獨立的功能模塊,可以獨立開發、部署和運行。這些微服務之間通過明確定義的API 進行通信,可以使用輕量級通信協議(如HTTP 或消息隊列)來實現。
Permaweb 的整體架構和微服務非常相似,每一個Permaweb 應用由標準化、獨立的服務單元組合而成。同樣的設計理念讓Permaweb 具備構建大型複雜應用的能力。
與傳統微服務的不同之處在於,Permaweb 符合SCP,是基於存儲共識的應用程序。 Permaweb 即是SCP 的微服務架構版本。
什麼是SCP(Storage-based Consensus Paradigm)?基於存儲的共識範式,核心思想是只要存儲不可變,上面的交易可追溯,那麼應用再任何地方計算都是唯一的結果,可以獲得共識。 SCP 的特點是底層數據可以有無限的組合性。只要數據和數據組裝標準,應用可以從任何的存儲層,甚至多存儲層一起聚合生成唯一狀態。
使用SCP 開發應用時,傳統應用架構無需作大量的調整,僅需將DB(存儲層)更換為不可篡改和可追溯的區塊鏈存儲。
優勢
使用這套去中心化微服務架構所開發的應用程序可以獲得區塊鏈的同等特性,這些特性包含去中心化、不可篡改、可追溯、抗審查等等。
同傳統微服務架構一樣,該架構具備以下開發優勢:
1. 模塊化和可維護性:獨立的服務,每個負責一個特定的功能。這種標準化和模塊化設計使得每個服務可以獨立開發、測試、部署和維護,從而提高了應用的可維護性和靈活性。
2. 獨立性:每個服務可以由不同的團隊開發和維護。更符合DAO 的特性,讓不同的組織和個人為Permaweb 提供最好的性能和開發速度,並允許開發者選擇最合適的技術棧和工具。在Arweave 生態中我們可以看到不同的團隊提供不同的服務,如ar.io提供了網關,bundlr 和開源的arseeding 提供了數據綁定服務,everPay 和Permaswap 提供了專門的金融服務等等。
3. 可擴展性:獨立的服務可以根據需要對某些服務進行水平擴展。甚至可以類比每個服務就是ETH 2.0 所提到的分片,但是Permaweb 並沒有分片數量的限制,可以進行無限的橫向拓展。另外,同一個協議標準也可以提供不同的數據集服務,比如某些網關,為了優化特定應用的訪問速度,可以僅緩存和加工計算特定應用的數據。
4. 高可用性:擁有多個可用的網關(微服務), 應用不會出現單點故障,有更好的可用性。
該架構繼承了微服務架構的所有優勢,並打破了區塊鏈應用的不可能三角問題。傳統的區塊鏈應用必須在性能、安全性和去中心化之間放棄某個特性,才能保證另外兩個特性的完整性。在SCP 理論下,由於使用了分層的架構設計,共識將由存儲層和通用協議進行保障,此時去中心化不需要和節點數量強相關,而是和協議的開放(開源)程度相關。當我們談論Ethereum 的去中心化時,除了考量它們的節點數量,也應該認識到Ethereum 軟件本身就是一種標準協議,用戶和礦工是在使用同一套協議達成共識,即可形成較高程度對去中心化。在Ethereum 的例子中,目前絕大部分用戶和開發者使用了infura.io提供的服務, infura.io雖然是中心化服務,但是用戶隨時可以部署Ethereum 協議並使用自主接入該網絡。同樣地,去中心化微服務也能滿足以上特性,但是去中心化微服務不是一個特定的VM 架構(如EVM),而是更靈活,更接近傳統架構的理論模型,是微服務結合SCP 理論誕生的下一代去中心化互聯網架構。
實踐:出自Arweave,超越Arweave
目前Permaweb 僅有網關、數據綁定、序列化和索引四個服務,這些服務已經形成了一定的標準。那麼一個Permaweb 實例到底是什麼樣的?具體是如何使用四個標準服務構建一個Permaweb 的?
Now 應用
https://now.arweave.asia是一個Permaweb 應用(下文簡稱為Now),是一個為Arweave 生態開發者提供交流的平台。 Now 的主要功能是用戶發起Blog,用戶可以對這些內容進行點贊。
Now 的所有數據都存儲到Arweave 上,不可變的存儲層保障了Now 的去中心化。當用戶打開Now 的時候,瀏覽器會首先從Arweave 的網關服務上加載一個前端框架,如下圖所示,該頁面框架主要包含了Now 的Header 組件,並沒有包含Now 應用的展示數據。
瀏覽器加載應用框架後,我們可以看到Now 的內容展示部分會顯示Loading stamps ,這時候Now 應用正在發起GraphQL 請求,對應用的數據進行檢索。等待幾秒後檢索完成,Now 應用將展示出最新的用戶評論和點贊(Stampers),如下圖所示:
在該頁面中,初始化框架和所有用戶數據,以及頁面所呈現的所有圖片都是通過網關獲得。這些元素將在瀏覽器中計算並組裝出Now 的完整頁面。網關提供靜態資源加載能力,索引服務提供動態數據加載能力。
當用戶想要增加一篇blog 時,用戶可以用自己的錢包將內容上傳到Arweave。這些內容會標記特定Tags 便於索引服務提供對這些內容的GraphQL 查詢功能。 Blog 上傳成功後,再次刷新Now 應用,新的內容將呈現在應用的內容展示中。
上圖展示了Permaweb 寫入和讀取的基礎過程。在實際應用裡,Permaweb 的寫入和讀取都將通過服務層進行。
橫向擴展
微服務的最大優勢就是可擴展性,該特性將完全繼承到Now 應用上。我們可以使用任意一個網關訪問Now:
類似的網關可以無限橫向擴展,讓Now 應用具備近乎無限的性能。
SCP 最佳實踐
在Permaweb 的架構中,底層僅僅使用了Arweave 作為存儲層。但是去中心化微服務不應該局限於此,我們應該深刻的吸取Permaweb 和微服務架構的優勢,去探索SCP 的最佳工程實踐。
下圖來自文章《共識的變遷,區塊鏈應用範式進化之旅》,所描述的是未來的區塊鏈應用架構——用戶不在和區塊鏈系統本身進行交互,而是和服務層進行交互。區塊鏈應用經歷了從圖1 到圖3 的演化過程,更多內容可閱讀:
從上圖3 可以看出,應用所依賴的區塊鏈不局限於Arweave,同時Bitcoin 和Ethereum 也是區塊鏈對象,這些區塊鏈作為應用的共識來源,為應用提供去中心化和可信保證。同樣,Permaweb 和去中心化微服務也可以進行擴展,存儲層無需限制Arweave,同時也可以使用Bitcoin 和Ethereum 作為存儲層,此時存儲層也可以是其他各種類型的區塊鏈。一個可能的最佳實踐架構如圖下所示:
我們使用從底至上的順序進行描述:
- 共識層:對Permaweb 擴展後命名為存儲層不再合適,我們將原來的存儲層更名為共識層。共識層可以是任何的區塊鏈系統,這些系統都具備不可篡改和可追溯的特性。
- 服務層:服務層和Permaweb 的最大區別是標準協議底層不局限於Arweave 存儲,可以為任意的區塊鏈系統建立微服務。以索引服務為例子,Nansen 為現有的EVM 公鏈提供數據查詢能力,很多的Dapp 和前端的數據可以直接使用Nansen 作為數據源。 KNN3 也提供了類似的索引能力,為區塊鏈數據創建了標準化的關係查詢層,同時KNN3 也提供和Arweave GraphQL 兼容的存儲索引能力。在該架構中,微服務有更多標準和更好的共識層兼容性。
- 應用層:不局限於Permaweb 應用,該架構可同時為去中心化應用(Web3)和Web2 應用提供支持,完全能兼容原有的架構體系。
總結
當我們回顧過去30 年計算機軟件工程的演變,思考過去10 年區塊鏈工程的演變時,不得不反思一種全局虛擬機(如EVM)加上Layer2 的擴容方案是不是去中心化系統的終極解決方案?
本文沒有去深究Layer2 或者分片技術的可行性,而是為區塊鏈應用方式提供了另外一種可能性。本文以Arweave 生態的Permaweb 為實例,結合存儲共識範式(SCP)和微服務架構的思想重新梳理了一種工程上可行的方案。該方案不僅具備極強的擴容能力,也能讓應用具備去中心化的特性。更關鍵的是該方案並不是鏡花水月,而是已經在工程上可實踐的架構體系。