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