詳解DFINITY革命性的區塊鏈計算機架構
DfinityFun
2021-01-18 10:05
本文约4586字,阅读全文需要约18分钟
綜合前後端、由軟件容器一步託管的革命性去中心化全棧架構。

編者按:本文來自DfinityFun(ID:DfinityFun),Odaily經授權轉載。

編者按:本文來自

,Odaily經授權轉載。
整理:Blockpunk
編者按:本文來自,Odaily經授權轉載。,Odaily經授權轉載。

社區:果殼宇宙(ID:DfinityFun)

二級標題

互聯網計算機是DFINITY 的網絡名稱,DFINITY 試圖通過一個建立在IP 協議上層的開放協議,去中心化地調度所有運行協議的計算機的資源,利用區塊鏈、密碼學等技術,在最上層虛擬化出一個安全可信,但無需傳統組件的軟件運行環境。

並行處理、動態擴容、靈活治理,這些能成為DFINITY的後發優勢嗎?

二級標題

二級標題

互聯網計算機是基於稱為互聯網計算機協議(ICP)的區塊鏈計算協議。網絡本身是根據分層結構設計的。底層是託管專用硬件節點(Nodes)的獨立數據中心。這些節點機器組合在一起以創建子網(Subnets)。子網主運行著軟件容器(Canisters),它們是可互操作的基礎計算單元,由用戶上傳,容器中包含了代碼和狀態。

二級標題

ICP 的獨特之處在於它的網絡神經元系統(NNS),它負責控制、配置和管理網絡。

NNS 在代幣經濟學中也起著關鍵作用。 NNS 生成新的ICP 代幣(以前稱為DFN 代幣)以獎勵節點,節點分為兩類,一種是數據中心運行的專用硬件節點,一種是在NNS 中抵押ICP 創建的投票神經元節點,神經元節點治理著網絡中的提案。當NNS 發行新的ICP 代幣來獎勵數據中心和神經元時,這是通貨膨脹的部分。

二級標題

最終,數據中心所有者和神經元所有者可以獲取ICP 代幣,並與容器所有者和管理者進行交易。容器所有者和管理者將這些代幣轉換為cycles ,然後使用這些cycles 來為其容器充電(即gas 費)。例如,當這些容器執行計算或存儲內存時,整個流程中需要消耗cycles,cycles 消耗殆儘後,必須為它們補充更多的cycles 才能繼續運行,這是通貨緊縮的部分。

二級標題

子網

NNS 在構建子網時會合併來自獨立數據中心的節點。通過使用DFINITY 開發的拜占庭容錯技術和密碼學技術,ICP 協議可以確保子網防篡改且永不宕機。儘管子網是整個互聯網計算機網絡的基本組成部分,但它們對用戶和軟件是無感的。用戶和容器軟件僅需要知道容器的身份即可調用其共享的函數。

在此示例中,我們有一個虛擬的子網ABC,該子網承載了11 個軟件容器。 NNS 表示需要拆分網絡擴展性能,這時子網ABC 將繼續託管容器1–6,但同時生成一個新的子網XYZ 來託管容器7–11。在擴展中,涉及的所有容器都不會遇到服務中斷的情況。

二級標題

容器

每種子網類型都會為你的容器提供某些屬性和功能。例如,如果你的容器託管在數據子網中,則它可以處理調用,但不能調用其他容器。要調用其他容器,你需要一個系統子網。如果希望你的容器能夠保持ICP 代幣的餘額或將cycles 發送到其他容器,則需要一個受信任的子網。由於這些原因,治理容器只能託管在受信任的子網中。

二級標題

子網的功能部分源自底層的容錯能力。這是基礎科學領域中令人興奮的領域,我們希望很快與公眾分享,其中包括允許NNS 修復損壞的子網的新的加密技術。

容器

在互聯網計算機上,調用容器共享的函數有兩種方式:更新調用或查詢調用。本質區別在於,當你將函數作為更新調用進行調用時,其對容器內存中的數據所做的任何更改都將保留,而如果將函數作為查詢調用進行調用時,則其對內存的任何更改在運行後都將被丟棄。

二級標題

更新調用的更改是持久化的,並且它們是防篡改的,因為ICP 區塊鏈計算機協議在子網的每個節點上都運行它們。如你所預期的,這些調用在一致的全局調用順序中,允許在完全確定的執行環境中並發執行。更新調用在兩秒內就可完成。

相反,查詢調用不會保留更改。它們對內存所做的任何更改在運行後都會被丟棄。它們非常高效且便宜,並且僅需幾毫秒即可完成。這是因為它們未在子網中的所有節點上運行,也意味著它們提供了較低的安全級別。

二級標題

二級標題

開發人員保留數據的方式時互聯網計算機最酷的功能情之一。開發人員不必考慮持久性問題,他們只需編寫代碼,持久性就會自動發生。這稱為正交持久性。這是因為互聯網計算機會保留容器中的內存數據頁。

二級標題

你可能想知道這一切如何工作。對於可以使內存數據頁發生變化的更新調用來說,容器是軟件執行者。這意味著在任何給定時間,容器內只能有一個執行線程。

相比之下,查詢調用不會對內存進行永久更改。這樣一來,在任何給定時間,容器內可以有任意數量的並發線程來處理查詢調用。這些查詢調用針對最後確定的狀態根中記錄的內存快照運行。

二級標題

最後,容器可以創建新的容器以及容器可以也fork 自身。你只需指定WebAssembly 字節碼即可創建一個新的容器,並且內存數據頁開始為空。當容器fork 時,將創建一個新生成的副本,該副本與內部的內存頁面相同。創建可擴展的互聯網服務時,fork 功能非常強大。

二級標題

可擴展性

現在來談談互聯網計算機服務的可擴展性。不同類型的容器都有各自的容量上限。例如,由於WebAssembly 實現的限制,一個容器只能存儲4GB 的內存。因此,當我們要創建可擴展到數十億用戶的互聯網服務時,我們必須使用多容器架構。

我們可能希望創建一個特殊的容器來創建容器的許多副本,然後將用戶內容分片到不同的容器以創建可擴展的互聯網服務。但是,由於很多種原因,這個架構過來簡單了。

的確,每個額外的容器都會增加整體內存容量,以及增加容器數量都會增加整體更新和查詢調用的吞吐量,但是我們無法擴展針對特定用戶內容的查詢調用請求。每當我們通過添加更多的容器分片來增加系統容量時,我們都需要重新負載均衡用戶內容,這並不是真正的邊緣可擴展架構。也沒有好用的方法,在查詢時把數據從最接近的副本中提供給終端用戶。我們需要一個兩層架構,前端容器和後端容器。

互聯網計算機提供了一些有趣的功能,可以將終端用戶錨定到前端容器,比如允許通過NNS 將域名映射到多個前端容器上(類DNS)。當終端用戶希望解析這樣的域名時,互聯網計算機將查看託管前端容器的所有子網中所有副本節點的總數,並返回最接近的副本節點的IP 地址。這導致終端用戶會在距離最近的副本上執行查詢調用,從而減少了固有的網絡延遲並改善了用戶體驗,在沒有內容分發網絡(CDN)的情況下提供了邊緣計算的優勢。

為了充分利用這個功能,我們需要一個涉及前端容器和後端數據桶容器的經典兩層結構。在此示例中,Web 瀏覽器希望加載個人資料圖片。

Step2,前端容器將向保存照片的數據容器發出跨容器查詢調用請求。

隨著時間的流逝,節點的查詢緩存會累積靜態內容並生成附近用戶感興趣的數據,從而為他們提供更快,更好的用戶體驗。這樣,互聯網計算機的原生邊緣體系結構提供了內容分發網絡的優勢,而無需開發人員做任何特殊的事情,也無需爭取單獨的專有服務的幫助。

二級標題

開放式互聯網服務

一旦在Web 瀏覽器或智能手機上運行的UX/UI 確定了哪個前端容器負責協調對某些內容或數據的更改,便可以通過標準接口提交更新調用來修改內容或數據。

DfinityFun
作者文库