ArcBlock 是誰,為什么他們喜歡 BEAM?ArcBlock 區塊基石[1]肩負這樣一項使命:大大簡化區塊鏈技術并將其迅速應用于日常生活之中。為此,他們
ArcBlock 是誰,為什么他們喜歡 BEAM?
ArcBlock 區塊基石[1]肩負這樣一項使命:大大簡化區塊鏈技術并將其迅速應用于日常生活之中。為此,他們開發了一個區塊鏈全棧開發平臺,為開發者提供了輕松構建、運行和部署去中心化應用(DApps)所需的一切。其平臺的核心是 BEAM 虛擬機。
他們全心全意信任和支持 Erlang 生態系統,并且作為創始贊助人加入了 Erlang 生態系統基金會。在這篇博文中,ArcBlock 研發副總裁陳天將談談他們為什么鐘愛 BEAM 虛擬機以及將其用作所有希望開發 DApp 的人的基石的益處。
BEAM 和區塊鏈簡介
在構建具有高可用度、容錯能力和可擴展性的實時系統方面,Erlang 是最好的編程語言之一。BEAM 是虛擬機——在我們看來也是默默無聞的英雄。BEAM 的優點也適用于在虛擬機上運行的其他語言,包括 Elixir。無論人們使用何種高級編程語言,一切都歸結于 BEAM。這是技術中重要的一環,它幫助實現所有重要的百分百可用性。
如今,BEAM 為全球一半以上的互聯網路由器助力,我們不認為能找到比這更有力的證明了。以下是 BEAM 的一些好處,使其極其適合打造區塊鏈。
網絡共識
將 BEAM 作為構建去中心化應用的關鍵組件的決定很簡單。首先,區塊鏈和去中心化應用[2]需要在網絡中的所有節點上實現一致的狀態。我們通過使用狀態副本引擎(也稱為共識引擎)來實現這一點。共識很重要,因為這種機制確保信息添加到區塊鏈賬本是有效的。為了達成共識,網絡上的節點需要對信息達成一致,共識達成后,數據就可被添加到分類賬中??捎玫囊婧芏?,我們平臺目前選擇 Tendermint,支持狀態復制引擎。
BEAM + DApps
除了共識引擎外,BEAM 是滿足去中心化應用其他幾個關鍵需求的完美解決方案。為了讓去中心化應用能在我們的開發框架中工作,我們需要一個嵌入式數據庫來存儲應用狀態,以及一個用于區塊鏈數據的索引數據庫。在此過程中,我們還需要區塊鏈節點能夠監聽網絡上的節點,并為下一個數據區塊“投票”。對于這些需求,系統需要持續的響應和可用性。
現在,需要注意的是,除了持續響應之外,我們還需要考慮 CPU 任務。特別是當系統遇到 CPU 密集型任務時,我們的區塊鏈平臺和服務不能停止工作。如果系統變得無響應,則可能發生潛在的災難性錯誤。
代碼熱重載
除了 BEAM 的調度器,我們喜歡的另一個特性是代碼熱重載。它可以讓你在運行中做幾乎任何事情,而不需要關閉 BEAM。例如,我們的區塊鏈應用平臺附帶了許多不同的智能合約,開發者可以使用這些合約使去中心化應用的功能更加豐富。然而,通過區塊鏈,您擁有一個分布式網絡,需要確保每個節點都行為一致。
在大多數情況下,開發者必須更新和重新啟動他們的節點以啟用最新軟件,這將導致潛在的問題和不必要的宕機。通過 ArcBlock,我們利用 BEAM 的代碼熱重載特性,讓節點在整個網絡中動態地啟用/禁用智能合約。這只需通過發送交易來完成,該交易告訴系統,它應該在特定的時間升級軟件。當這種情況發生時,ArcBlock 將告訴 BEAM 安裝新代碼,然后網絡中的每個節點都將擁有最新的功能。
速度是相對的
BEAM 使用“演員模型”來模擬真實世界,一切都是不可變的。因此,不需要鎖定狀態并預防競爭狀況。當然,一切都是有代價的。BEAM 簡單而美麗的不變性可能會導致程序運行得更慢。為了緩解這一潛在的緩慢,ArcBlock 利用 Rust 來幫助 CPU 完成密集的任務,例如為狀態創建 Merkle-Patricia 樹。再次強調,通過提供簡單的方法來與外部世界溝通,使用 Rust 將性能提高到另一個水平,BEAM 證明了它的價值。
垃圾收集
別讓這個名字欺騙你。垃圾收集是至關重要的。Erlang 使用動態內存和跟蹤垃圾收集。每個進程都有自己的堆棧和堆,它們被分配在相同的內存塊中,并且可以彼此增長。當堆棧和堆相遇時,垃圾收集器被觸發,內存將被回收。
雖然這個解釋有點技術性,但是 BEAM 的垃圾收集過程是在進程水平完成的,從而確保不會出現“讓世界停止,讓我清理垃圾”這類的垃圾收集。相反,它確保進程在沒有任何類型的中斷情況下繼續運行。
OTP
最后但并非最不重要的是,Erlang 提供了一個名為 OTP 的開發套件,讓開發者使用在 BEAM 世界中得到認可的最佳實踐的簡單方法。對于任何企業或區塊鏈應用平臺而言,圍繞行業標準構建是必須的,OTP 使利用 BEAM 中開發者可用的所有優點編寫代碼變得容易。
容錯
我們把這一點留到最后是有原因的。這是目前為止 ArcBlock 最依賴 BEAM 的特性。在區塊鏈領域,它是使 BEAM 優于許多競爭對手的技術。盡管成千上萬的交易同時發生;但系統特定部分發生的任何錯誤都不會影響整個節點。錯誤將可自我修復,使節點能夠抵御不良行為或特定攻擊。對于向用戶交付服務或支持生產品質的應用的任何人來說,這都是一個關鍵特性。通過引入默認容錯,我們可以確保運行在 ArcBlock 平臺上的任何人都保持在線和可用。
我們相信,BEAM 雖然是多年前設計的,但其目的是用于區塊鏈。它為開發者和像 ArcBlock 這樣的區塊鏈平臺提供了所有必要的特性,以及運行高并發、容錯系統的能力,讓開發者的工作變得更加輕松。
保持冷靜,繼續 BEAM。
了解更多
ArcBlock 副總裁陳天將是 Erlang 解決方案 11 月 27 日星期三網絡研討會[3]的嘉賓。歡迎注冊參與,即使您無法當天出席,也可第一個收到該研討會的錄像。(陳天)