跳到主要內容

ArcBlock 為何使用 BEAM 建構區塊鏈框架

Tyr Chen (VP of Engineering, ArcBlock)
ArcBlockArcBlock Users OnlyBlockchainForgeForge Framework

作者: Tyr Chen(ArcBlock 工程副總裁)

ArcBlock 是誰,他們為何如此喜愛 BEAM?

ArcBlock 致力於消除區塊鏈的複雜性,加速它融入日常生活。為此,他們開發了一套完整的區塊鏈開發平台,提供開發者輕鬆建構、執行及部署去中心化應用程式(dApp)所需的一切。平台的核心正是 BEAM VM。他們深信並積極支持 Erlang 生態系,因此以創始贊助商身分加入 Erlang Ecosystem Foundation。在這篇客座文章中,ArcBlock 工程副總裁 Tyr Chen 將說明他們喜愛 BEAM VM 的原因,以及任何想要建構 dApp 的人將其作為基石所能獲得的優勢。

BEAM 與區塊鏈簡介

Erlang 是建構高可用、容錯且可擴充軟即時系統的最佳程式語言之一。BEAM 是它的虛擬機器,在我們看來也是幕後英雄。BEAM 的優勢同樣適用於在該虛擬機器上執行的其他語言,包括 Elixir。無論使用哪種高階程式語言,最終都會歸結到 BEAM。正是這項關鍵技術,協助實現至關重要的九個九可用性。

如今,BEAM 支撐著全球超過一半的網際網路路由器;我們認為,這本身就是極有力的驗證。以下是 BEAM 非常適合建構區塊鏈的幾項優勢。

網路共識

選擇以 BEAM 作為建構去中心化應用程式(dApps)的關鍵元件,是一個很容易的決定。首先,區塊鏈與去中心化應用程式需要在網路所有節點間達成一致狀態。我們透過狀態複製引擎(也稱共識引擎)做到這一點。共識非常重要,因為這項機制可確保加入區塊鏈帳本的資訊有效。網路上的節點必須就資訊達成一致;共識形成後,資料才能加入帳本。支援狀態複製引擎的選項有多種,包括我們平台目前採用的 Tendermint。

BEAM + dApps

除了共識引擎,BEAM 也是滿足去中心化應用程式其他關鍵需求的理想方案。要讓去中心化應用程式在我們的開發框架中運作,需要內嵌資料庫儲存應用程式狀態,以及索引資料庫儲存區塊鏈資料。同時,區塊鏈節點還必須能夠監聽網路上的對等節點,並為下一個資料區塊「投票」。面對這些需求,系統必須持續保持回應與可用。

除了持續回應,也必須考量 CPU 任務。尤其是當系統遇到 CPU 密集型任務時,我們的區塊鏈平台與服務不能停止運作。如果系統失去回應,可能會引發災難性的錯誤。

熱程式碼重新載入

除了 BEAM 的排程器,我們喜愛的另一項功能是熱程式碼重新載入。它讓你幾乎可以即時完成任何操作,而完全不必停止 BEAM。例如,我們的區塊鏈應用平台內含許多不同的智慧合約,開發者可以用它們打造功能豐富的去中心化應用程式。然而,區塊鏈採用分散式網路,因此必須確保每個節點的行為完全一致。

在多數情況下,開發者必須更新並重新啟動節點才能啟用最新軟體,這可能引發問題與不必要的停機。ArcBlock 利用 BEAM 的熱程式碼重新載入功能,讓整個網路的節點能即時啟用或停用智慧合約。只要傳送一筆交易,指示系統在指定時間升級軟體即可。屆時,ArcBlock 會要求 BEAM 安裝新程式碼,網路中的每個節點也就都能使用最新功能。

速度是相對的

BEAM 使用「Actor Model」模擬真實世界,而且一切都是不可變的。因此,不需要鎖定狀態來防止競爭條件。當然,任何事物都有代價。BEAM 中不可變性的簡潔與優美,可能使執行速度變慢。為了降低潛在的效能影響,ArcBlock 在狀態的 Merkle-Patricia 樹等 CPU 密集型任務中運用 Rust。BEAM 再次展現其價值:它提供簡便的方式與外部世界溝通,並可藉助 Rust 將效能提升到另一個層次。

垃圾回收

不要被名稱誤導,垃圾回收至關重要。Erlang 使用具有追蹤式垃圾回收的動態記憶體。每個程序都有自己的堆疊與堆積,兩者配置於同一記憶體區塊中,並可朝彼此方向增長。當堆疊與堆積相遇時,垃圾回收器便會觸發並回收記憶體。

雖然這段說明稍具技術性,但 BEAM 的垃圾回收是在程序層級執行,因此絕不會出現「停止整個世界、讓我清理垃圾」式的垃圾回收。相反地,它能確保程序持續執行,不受任何中斷。

OTP

最後同樣重要的是,Erlang 提供名為 OTP 的開發套件,讓開發者能輕鬆運用 BEAM 世界中成熟的最佳實務。任何企業級或區塊鏈應用平台都必須依循業界標準建構,而 OTP 讓開發者能輕鬆撰寫充分運用 BEAM 各項優勢的程式碼。

容錯能力

我們把這項特性留到最後是有原因的。這是 ArcBlock 在 BEAM 上最依賴的功能,也是在區塊鏈領域讓 BEAM 勝過許多競爭技術的關鍵。即使數萬筆交易同時進行,系統特定部分發生的錯誤也不會影響整個節點。錯誤會自我修復,使節點能抵禦不良行為或特定攻擊。對任何向使用者提供服務或支援正式環境應用程式的人來說,這都是關鍵功能。預設具備容錯能力,可確保任何在 ArcBlock 平台上執行的服務都能持續上線並保持可用。

我們相信,BEAM 雖然設計於多年前,卻彷彿是為區塊鏈而生。它為開發者及 ArcBlock 這類區塊鏈平台提供執行高並行、容錯系統所需的全部功能與能力,讓開發者的工作更加輕鬆。

保持冷靜,繼續 BEAM。

瞭解更多

ArcBlock 工程副總裁 Tyr Chen 將擔任11 月 27 日星期三網路研討會的客座主持人。歡迎註冊參加;即使當天無法出席,也能在活動結束後第一時間收到研討會錄影。

原文刊登於 Erlang Solutions Blog

本頁涉及

產品

  • Forge sunset

    一套用來建造鏈上應用的 SDK 和工具鏈,不必分別拼裝節點、資料層和客戶端。它後來成了 ArcBlock Chain。

術語

  • 區塊鏈

    透過密碼學連接記錄,並按共同的驗證與共識規則確定交易歷史的分散式帳本。