AO:構建一個去中心化的 Erlang

2024-05-31 14:56 金色精選


作者:ArweaveOasis,來源: @Arweave Oasis 推特

該演講爲 Sam 在南卡羅來納舉辦的首次 AO 开發者大會時進行的主旨演講,圍繞 AO 以及 Erlang 語言而展开的話題。以下是演講全文,Enjoy!

這對我來說是一次特別令人興奮的演講。首先,我打算帶大家走一段旅程,解釋一下 AO 是如何形成的,Erlang 是如何融入其中的,以及這如何融入到我們正在進行的廣泛的分布式計算實驗中。

我第一次接觸計算機是我父母給我买的一台 550 MHz CPU,32 兆字節 ram 的計算機。它大概是在九十年代中期時候的電腦配置。

當我开始使用它的那一刻起,我就被深深地迷住了,這種感覺甚至從來沒有停止過。那時正是互聯網开始興起的時候。我不僅可以在自己的計算機上做所有有趣的事情,我還可以連接到其他人的計算機,訪問瀏覽其他人計算機上的信息。我覺得這實在是太酷和令人興奮了,這真的塑造了我作爲個人的旅程。我們可以有共享的信息空間的這個想法。

隨着時間的推移,當我們所有人作爲一個物種,越來越多地被拉進了 Cyber 空間,這就讓這個空間不只是一個瀏覽信息的地方,而變成了一個可以互相交流,彼此熟識的地方。就好像在座的各位有很多我很熟悉的人,但我們在线下面對面交流的時間可能只有我們交流時間的 2%、3% 左右。

所以無論如何,當我遇到網絡時,我被它深深吸引了。但我認爲這個世界上最酷的事情,就是超級計算機。

他們看起來很神奇,你可以進行大量的計算,並讓一台機器去解決你的問題。但這是一台超級計算機。從九十年代开始,我相信是由日本政府設立的,用來做一些氣候科學實驗。我猜那時在整個機器的生命周期中,能夠真正在其上運行個人程序的人數大概只有三十幾人。

這就讓我开始思考,我們有這種信息分享的工程,那爲什么它不能把一台巨大的計算機分享給每個人呢?

如果我們有互聯網,爲什么我們不能讓每個人都共享應用程序空間,建立可以相互交互的程序呢?

這似乎是一個好主意。實際上那時也在某種程度上實踐了這些想法,比如你可以在服務器之間發送數據包,但它非常非常笨拙與緩慢,導致它從未真正地有建設性地發展起來。

直到我剛剛要去大學的時候,我遇到了 Erlang。這是我第一次發現一個編程語言或一個操作系統,能夠直觀地表達這個想法,即計算的進程,如小單位的計算,能夠讓任何人運行,並在這個並行環境中自然地相互交互。這正是 Erlang 試圖提供的。你可以啓動一台機器,在其中運行這個環境。它幾乎像一個操作系統,在同一個環境中運行許多不同的應用程序。

然後我去了大學,我有過這樣的經歷,我們有一個大型的共享 Unix 盒子,這又是同樣的想法,但是在小規模上表達了這樣的想法,那就是當你有很多不同的人共享同一台計算機,他們的應用程序可以很容易地互相交互。

這是在大約 80 到 100 人的規模上。但你仍然可以看到一部分的樂趣和可組合性。我記得我們會寫 shell 腳本,我們會讓一個用戶在系統中戳另一個用戶。當他們被戳的時候。他們會再去戳另一個,形成一種鏈式反應。這是一個令人愉快的平台,但它仍然離一個分布式的,开放的超級計算機的夢想相距甚遠。

然後在那之後,我第一次接觸到了以太坊,當時它被稱爲世界的電腦。

我想,啊!也許這就是我在尋找的東西,這個環境不僅有分布式計算,在計算機科學中它被稱爲單一系統圖像(Single System Image SSI)。我們以許多不同的計算機,讓它們看起來像一台計算機,讓你無縫地跨越它們操作。

所以它有一個 SSI,這很酷,它也是無需信任的,這是一個相當顯著的特性。一旦一個程序在這個計算機上執行,你不需要信任任何人。這與今天的互聯網結構以及我們使用的所有網絡服務都不相同,實際上,我們目前使用的幾乎所有服務,你都需要信任提供服務的人。

以太坊提供了一個不同的世界觀。我們可以有一個分布在全世界的超級計算機,統一全人類的計算,其中的每一個程序都不受任何個人或團體的控制。「代碼就是法律」是當時的想法,但後來當他們故意打破協議來打破「代碼就是法律」的信條時,這成了一個有爭議的短語。

不管怎樣,我覺得這很酷。當時我還天真地花了 15 美元去參加了他們的 ICO,因爲我想,我想要這些代幣,這樣我可以去運行我的計算。

當他們建立起這個東西之後,原本分布式世界計算機的愿景沒有發生。取而代之的是他們在其上建立的龐大的金融經濟。原來當你有真正的無需信任的狀態變化時,就可以催生出整個去中心化金融生態系統。我們正在看着超過 1000 億美元的價值被儲存在這些機器中。所以那的確是一個驚人的創新。有着深遠的意義。

但是,朋友,我的超級計算機在哪裏?這不是一個超級計算機。發生了什么,出了什么問題?當你現在試圖使用以太坊,坦白地說,它變得荒謬了起來。

我們不能否認他們的確做了很多非常令人難以置信的工作。但它與它开始的時所說的世界計算機相差甚遠。以太坊的平均交易費用經常飆升到 25 美元左右,這僅僅只是做一點點的計算,去更新誰擁有什么的狀態記錄而已。

基本上,這就像七十年代的 IBM 主機。這究竟是怎么發生的呢?

好吧,答案是共享內存系統。所以在以太坊,他們在網絡的每一個用戶之間,有一個全球共享的內存。它有大概一萬到六萬之間的網絡節點,都在維護那些程序狀態的信任性。

所以每個人都在驗證,嘿,這個狀態轉換是有效的。沒有人讓程序做不應該做的事情,這很好,但是那些程序的內存是共享的,跨越每一個程序和每一個用戶的單线程的執行。所以當你想要在以太坊上執行計算時,就會有一條單线,單隊列,每個人往這個隊列上面加待計算的程序,並排隊進行。

在正常的分布式系統設計中,我們會稱之爲停止世界狀態更新(Stop the world state updates)。所以當一個用戶過來的時候,我們停止了世界,沒有人能用它,然後下一個用戶可以去。這是一個純粹的單线程隊列,這顯然是超級計算機的反面案例。這甚至比你在計算器上的計算還少。

這是 Solana 的地圖。它有世界上許多不同的節點,它比以太坊快得多,但快得多並不足以快到我們在這裏談論的程度。

所以如果我們想創建一個世界計算機,一個分布式的計算機。排隊一個一個地生成區塊顯然是行不通的,以太坊首先採取了共享內存的方法,它現在變成了一種盲目崇拜,每個人都把它當作解決方案。並且所有東西都是在這個思維模式中建立的。

但實際上,共享內存只是兩個主要的嘗試實現並行的範例之一。所以當我在想如何嘗試解釋所有這些的時候,我想起了一句引用,共享內存是惡魔

這句話出自喬·阿姆斯特朗Erlang 的另一位共同發明者。我認爲它非常准確地概括了問題。而且這個問題很有趣,因爲如果你在加密空間,你會發現沒有人在談論它,但在計算機科學領域,它已經被爭論了 60 年。

喬寫道,共享數據的线程不能獨立地並行運行。在單核機器上,這無所謂,但在多核 CPU 上,這很重要。

在它們共享數據的執行點,它們的執行變成了串行而不是並行。這正是以太坊正在發生的事情,它只有一個執行线程。而對於 Solana,他們有一些並行线程,但僅是在同一台機器內。每次你想要傳輸信息或與同一個代理進行交互,就需要再次鎖定對那個內存的訪問,這使得它從並行變成串行。线程中的臨界區域引入了串行瓶頸,限制了可擴展性。

如果我們真的想要高性能,我們必須確保應用程序不共享任何東西。這樣我們就可以將解決方案復制到許多獨立的 CPU 核心上,你可以在這裏將 CPU 核心換成线程,這在去中心化環境中是有效的。

我認爲這是對爲什么當前的去中心化計算機制不能擴展的准確解釋。

所以幸運的是,我們並不是歷史上唯一遇到這個問題的人。這張圖展示了 1985 年 Erlang 的創造者 Robert Verding 的工作。有趣的是,第一個用例是如何在有許多不同電話通話時,讓所有這些通話都由不同的執行线程管理。

顯然,他們並沒有通過等待同樣的鎖和共享內存來解決問題。早在 1985 年,他們就嘗試了不同的解決方案,我認爲這是實現這種功能的最佳範例。令人驚訝的是,還沒有人將其應用到加密技術中。

這個解決方案的基本思路是,你可以有兩個线程鎖定並等待彼此以訪問一個狀態片段。其中一個更新它,另一個等待,然後另一個更新它,接着下一個人可以訪問它。在那個巨大的隊列中,我們只是發送我們需要的狀態的碎片。我們只共享需要的信息,不互相等待。一切都是異步並行運行。

舉個例子,Tom 在 AO 中運行一個計算進程。他給我發送了一條消息,我可能會回復,但我不等待 Tom 的回復,我只是繼續做其他事情。他也沒有等我。從根本上說,一切都是異步的,這开始看起來像一個真正能創造全球計算機的架構。所以,當你把它連接起來時,你开始看到這樣的圖景,信息只流向正確的人。你有本地共享狀態,而不是全局共享狀態,只有需要傳遞的信息才被傳遞,一切運行得更加高效。

所以,在使用這種模型時,你可以有許多不同的线程,這些线程同時處理不同的消息,甚至更多。它沒有限制,盡管這個看起來有點復雜,但在學術意義上就是如此。

一位名爲 Andy 的人曾經寫了一篇很好的論文來論述它,他是在 2008 年構建了一個分布式多內核操作系統的 barrelfish 團隊。他們在研究的過程中做個模擬,當他們拿一個共享內存的機器並將其擴展到有數千個核心時,得出的結論是它將花費大約 92% 的計算時間在鎖的競爭使用上。但如果在一個所有事情都是異步進行的系統中,並且只分享在正確的時間點上需要其他人進行計算的信息,那么一切都會運行得更加順暢,你可以任意地擴展它。

所以這就是我們如何想出 AO 這個解決方案的。

AO 代表 "actor oriented" 。AO 的前一個名字實際上是 Hyperbeam。Hyperbeam 就是 Erlang 運行的虛擬機。

所以 Erlang 與 AO 以及我們構建的一切深深地交織在一起,這不僅僅是架構,也是一種哲學甚至幾乎是美學的交融。雖然我們不再做那種八十年代的電話呼叫的事情,但還是非常接近。並且,我們甚至爲它被稱爲超級光束設計了 Logo。

所以當你在實踐 AO 時,你开始看到這種異步通信,這種並行執行的力量。這個 Erlang 首創的這種方式,我們現在已經應用到了一個去中心化的環境當中。社區成員們已經在很好地利用這個。

這張圖是一個叫 Gather Chat 的應用。它开發在 AO 之上,屏幕上的每一個個體角色都可以是一個進程,他們都可以並行進行任何數量的計算,但他們可以彼此互動,他們只按需要共享內存。他們發送狀態的一部分,並且他們不等待彼此,這使你可以創建真正豐富的體驗。我們直覺上覺得在 AO 之上構建的第一件事應該是聊天室。

你無法想象一個聊天室會在 Ethereum 上被建立。因爲如果你花費 $25 去發送一條消息,那對人們來說就不會那么有趣了。

這是來自印度的一個團隊在 AO 上制作的遊戲 The Grid。它是一個在 AO 上的進程,只向正確的人發送恰當的信息,並建立起來這種擁有無需信任、可驗證的中立網絡空間的體驗。在這個遊戲中,每一個機器人都是在進程上運行的 AI 代理。它可以做任何數量的計算,然後它通過消息傳遞系統與其他人進行交互。

我們大約三個月前上线了 AO 的測試網,目前已經有一個相當大且令人興奮的生態系統圍繞着它發展。它似乎真的解鎖了人們在去中心化計算空間中想象力與創造力。我們甚至已經能夠在 AO 之上運行 Llama 3 了,實現一個完全去中心化的 LLM(大語言模型)。即便如此,你都不會注意到它,因爲異步運行的原因,如此規模的計算也不會影響到你的進程的運行。

所以這種並行的,異步的計算模式的核心原則是,我的計算不應該影響你的計算,除非我們真的想要對話。而那只是你給我發一條消息,然後我弄清楚如何處理這條消息的問題而已。所以它开始看起來像一個爲人類提供的全球共享的計算機了。我們也真的認爲這是去中心化計算的最終形態。

對於這台巨大全球計算機來說,我們的 Arweave 永存網絡是其中非常重要的一個環節,我們會讓你可以像訪問本地硬盤一樣訪問 Arweave 中的數據。試想一下,這意味着網絡中現有的 50 億條信息,突然成爲你本地硬盤的一部分。所以現在你可以構建你想要的任何東西,人們可以相信你的應用在發布後不會被修改。你可以做我們談論的所有去中心化金融的東西。

昨晚,當我在做這個演講幻燈片時,我在一些論壇上偶然發現了這篇來自 Erlang 作者 Robert 的帖子。這段話概述了我在心底裏長時間以來一直直覺地知道但從未如此優雅地用詞表達的東西。

當我們在設計 Erlang 和思考如何使用它的語言特性時,我們更多的是沿着操作系統而不是應用程序的角度來思考問題。我傾向於把它看作不是一個具有並發性的語言,而更像是一個帶有語言的操作系統。

如果你使用過 Erlang,你會有同樣的感覺。你使用什么語言其實並不那么重要,它實際上是在這個想法下面的語義,即系統中的所有事務都是通過發送消息來完成的。同時,它也指向了這個關於操作系統的想法。

所以當我們在構建 AO 時,我們意識到爲了讓人們能夠更加方便地使用它,就需要有一個用戶友好的環境,他們可以在其中操作。所以這就是爲什么我們建造了AOS

如果你在 Crypto 領域工作過,你會發現當你試圖在 Ethereum 上部署一個智能合約時,會遇到難以置信的浪費,因爲它需要花費數千甚至數萬美元才能把你的代碼放進機器中,因爲它必須被寫入這個停止世界的共享狀態機制(Stop the world state updates)。

而在 AOS 中,你只需要輸入 AOS,它便會爲你开啓一個你可以用於具體事項的新進程。交互感覺就像一個正常的命令行界面,我們從系統的早期用戶那裏得到的最大的反饋之一是,使用起來感覺很自然,很有趣。就像當你收到一條消息,你還沒有安裝一個處理器,一個響應該消息的代碼片段,它會直接在控制台上打印出來,所以你可以實時觀察你的進程發生了什么。這就像你把你的終端插入到這個巨大的分布式超級計算機中。

那么 Erlang 語言本身呢?坦率地說,它看起來像這樣,對於現代的標准來說,它對用戶使用體驗來說並不是非常友好。可能是因爲它是基於一個叫做 Prolog 的六十年代的系統。

所以我們最終實際上選擇了 LUA,這是一種非常簡單易學的語言。它是在九十年代初建立的,並且非常穩定。它本應該是 JavaScript,但很遺憾它沒有成爲。JavaScript 就像是在 Erlang 之上加上很多瘋狂的東西,然後隨着時間的推移,它就像一種不斷增長的災難堆積,變得越發臃腫。

但是 LUA 是那種語言的核心精髓,它簡單易懂,沒有隨着時間的推移添加到它上面的各種瘋狂的東西。它只是簡單純粹易學的。幾天前在 X 上,有個叫 @DeFi_Dad 的人聯系我,他不是一名开發者,但他真的很喜歡這個系統,他可以使用它,他實際上可以开始用它編程。

是的,LUA 看起來很直觀,很友好,使得任何人都可以开始用它構建應用程序。我真的認爲即使你是一個非技術背景的人,在這裏,你很有可能可以在這個分布式超級計算機的基礎上構建你自己的第一個應用程序。有趣的是,我們並不是唯一一個想到將 Lua 和 Erlang 結合在一起的人。

事實上,Robert 建造了這個叫做 Lurel 的東西,我會讓他來告訴你關於它更多的細節。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

標題:AO:構建一個去中心化的 Erlang

地址:https://www.sgitmedia.com/article/31250.html

相關閱讀: