“程式碼即服務”:DFINITY 網際網路計算機的架構解析

買賣虛擬貨幣
什麼是網際網路計算機?網際網路計算機是一種網路計算的基礎設施,你可以從這幾個角度來看:-無縫共享的虛擬化計算平臺-使用原則上,類似於 TCP 協議的開放式骨幹網協議-擁有通用運算能力的網路,具備儲存、運算、驗證的能力過去,以太坊也設想過“世界計算機”,但實質上它僅處理轉賬與合約運算。以太坊作為一個智慧合約平臺是非常成功的,但嚴格來說以太坊上的服務並不是由合約驅動的,只有部分邏輯被寫入智慧合約以高可信性執行,實際上都需要額外搭建前後端伺服器,執行一些通用計算並掛載前段。
這導致一些金融屬性不強,但對安全可信有高度要求的服務,如社交網路、資料介面服務等,處於一個非常雞肋的境地,在此情景下創造一個 token 來激勵是不切實際的。並且實際情況告訴我們,依賴的伺服器以及網頁的連線點都是極其脆弱的。網際網路計算機作為一個具備通用計算能力的網路基礎架構,提供了一種構建和執行防篡改軟體的新方法。分散式的共識架構為軟體提供了智慧合約級別的安全性,在這個開放協議下,軟體就像執行在本地虛擬機器上一樣簡潔,不再需要依靠伺服器與基礎元件(如,資料庫、防火牆等)就可以永不宕機、安全高效地提供服務。“程式碼即服務”網際網路計算機平臺不是由任何私人企業所有的,它也不存在於任何物理計算機上,協議把世界各地的資料中心和個人電腦的計算資源,聚合成一臺強大的虛擬機器,在網路中安全且持續性地提供通用計算能力。虛擬化的、協議化的服務,讓通用計算基礎真正做到了開啟水龍頭就能用的地步。這讓“程式碼即服務”變得現實,開發者不會再有啟動、運維與後期擴容的概念,只需要像使用 github 一樣上傳程式碼,包含前後端的完整服務就能直接在網際網路計算機上執行,並且有近乎無限擴容的能力。網際網路計算機的費用按需產生,可以由服務的呼叫者支付,而不需要在啟動服務之前先租賃或購買一臺伺服器。以 token 結算的協議讓程式碼具備了直接盈利能力(“數字稅收”),網際網路計算機將成為開發者的遊樂園,這將激勵大量的創新,產生豐富多樣的開放服務。開放服務之間還能互相呼叫融合(實際上都在一臺虛擬機器上執行),組合出更優的服務,這種多贏博弈為網路創造了巨大的“互助網路效應”,讓它有能力與壟斷的網際網路巨頭競爭。
重新設計軟體模型基於網際網路計算機的特性,我們得以重新思考軟體的搭建、部署和使用方式,進而對複雜度做出 最佳化:-程式碼即服務,服務不再執行在定製的作業系統上,降低開發複雜度和成本;-不用考慮資料的安全性與儲存問題,無需資料庫等元件,簡化了程式設計,縮短了開發週期;-多個服務能像執行一臺計算機中那樣做到相互通訊,且不需要獲取網路拓撲或埠資訊;-軟體可以“自洽執行”,就像一個開源專案一樣,任何人都能自發地進行創新、貢獻和改進。
基本框架網際網路計算機平臺的架構主要由四個層組成:-執行環境層-資訊路由和分發層-基於共識的安全驗證層-p2p通訊和複製層

以上每一層都包含了執行特定任務的元件和服務,以確保所有參與節點之間的安全通訊,與網路效能。

對開發者來說這些結構與元件都是無感的。但是,如果要在本地部署測試網,開發和部署過程中的某些步驟會與圖中的元件互動,這主要因為網際網路計算機帶來的變化較大,這樣能讓開發者在工作時更有流程感與真實感。

怎麼開發網際網路計算機上的軟體?

對開發者來說,網際網路計算機的框架極大地簡化了軟體的設計、搭建和部署。Motoko 是框架中一個重要的組成部分,這是專門為這個系統設計的通用程式語言,它能幫助開發者充分地利用網際網路計算機提供的獨特功能,包括:

-直接使用 actor 物件和類定義程式;
-使用 async 和 await 語法來處理非同步訊息傳遞,讓它近似於同步處理;
-自動支援訊息的序列化和反序列化;
-“正交永續性”:無需維護或管理外部資料庫或儲存卷。

Motoko 作為高階程式語言,提供了一些關鍵特性,包括:

-支援大整數操作和溢位保護;
-具備型別檢測系統,能靜態地檢查每個程式,以確保它在任何輸入下都可以執行,而沒有型別錯誤;
-支援函式抽象、使用者自定義的型別、使用者自定義 actors。

容器、actor 與程式碼的關係

在使用 Motoko 語言編碼程式時,要記住的一個最重要的原則:Motoko 是基於 actor 模型的。actor 是一種特殊的物件,它以隔離狀態來處理訊息,允許遠端和非同步地處理訊息。網際網路計算機的許多關鍵特性都依賴於這種安全高效的非同步訊息處理。

通常,每個 actor 物件都包含了一個應用程式的程式碼。程式的 Motoko 程式碼被編譯並部署為 WebAssembly 模組,還包括一些環境配置資訊和介面說明,這些內容以一個軟體容器的形式被髮布。

為什麼使用 WebAssembly 執行程式碼?

WebAssembly 是一個通用的低階計算機指令格式。它定義了一種可移植的、開放的標準二進位制格式,這樣格式相容範圍很廣,非常適合用來部署在網際網路計算機上執行的軟體。

但是現在支援編譯 WebAssembly 的主要程式語言(如,C 或 C++)還不夠安全,或者像 Rust 那樣學習起來非常困難。使用 Motoko ,開發者可以在得益於簡單且高階的語言同時,將程式編譯成 WebAssembly 格式,安全地部署應用程式。

Motoko 提供了許多其他高階現代語言所共有的特性,比如型別安全和模式匹配等。除此之外,Motoko 還預設支援了使用 actors 型別定義訊息傳輸服務,這種方式特別適用於網際網路計算機。

包括程式與狀態的軟體容器

“軟體容器”和程式設計中常說的”容器“相似,它包含了執行一個服務需要的已編譯程式碼和相關檔案。比如,容器包含了介面描述,終端使用者可以使用這個介面向程式傳送請求。而有一個重要的區別在於,這裡說的軟體容器還包含了程式關聯的狀態值。

由程式和狀態組成了軟體容器,這一點非常重要,因為當透過向介面傳送訊息來呼叫容器功能時,只有兩種型別的呼叫:

-查詢呼叫:允許使用者查詢容器的當前狀態,或呼叫對狀態進行操作但不更新狀態的函式。

-更新呼叫:會更改容器的狀態,或控制該容器對一個或多個其他容器進行更新呼叫。

我們可以透過任何託管了該容器的節點進行查詢呼叫,該呼叫可以瞬時響應。因為需要更改容器的狀態,更新呼叫可能會花費一些時間,使用基於 actor 的模型程式設計(具有狀態隔離)可以進行併發和非同步處理。

在更新呼叫中,當狀態更改完成時,會把響應訊息寫入一個迴圈日誌中。使用者可以透過任何託管了該容器的節點查詢,從迴圈日誌中讀取資料獲得最新狀態。響應訊息的大小是受限的,並且只能儲存有限的時間。

容器中包含了程式的狀態值,每個 actor 物件都在隔離狀態下,對部署在非同步處理網路上的容器執行更新操作。理解這個過程,是用好網際網路計算機的關鍵。

可以把網際網路計算機看作一個託管軟體容器的分散式計算平臺。一但軟體容器部署到網際網路計算機上,使用者就可以透過前端與軟體進行互動,從而享受軟體的服務。

資源使用

通常,所有的容器都以 CPU 週期的形式計算消耗資源,用於邏輯執行、訊息路由、資料儲存。為了防止作惡者透過耗盡資源攻擊網路,網際網路計算機對容器進行彈性擴容,使其適應當前的網路負載。這讓軟體總能獲得執行所需的資源,而不必開發者自己去操心未來的可擴充套件性。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;