저자: ArweaveOasis, 출처: @ArweaveOasis Twitter
이 강연은 사우스 캐롤라이나에서 열린 최초의 AO 개발자 컨퍼런스에서 Sam이 AO와 Erlang 언어를 주제로 한 기조 연설이었습니다. 전체 강연 내용을 확인해보세요!
이번 발표는 저에게 특히 흥미로운 발표입니다. 먼저, AO가 어떻게 탄생하게 되었는지, Erlang이 어떻게 여기에 부합하는지, 그리고 이것이 우리가 하고 있는 광범위한 분산 컴퓨팅 실험에 어떻게 부합하는지 설명하는 여정을 여러분과 함께할 것입니다.
이미지 src="https://img.jinse.cn/7234990_image3.png">
저가 컴퓨터를 처음 접한 것은 부모님이 사주신 550MHz CPU, 32메가바이트 램 컴퓨터였습니다. 아마 90년대 중반의 컴퓨터 구성이었을 겁니다.
그 컴퓨터를 사용하기 시작한 순간 저는 그 매력에 푹 빠졌고, 그 느낌은 멈출 줄 몰랐습니다. 마침 인터넷이 막 태동하기 시작할 무렵이었죠. 내 컴퓨터에서 모든 재미있는 일을 할 수 있을 뿐만 아니라 다른 사람의 컴퓨터에 연결하여 다른 사람의 컴퓨터에서 정보를 검색할 수도 있었죠. 저는 그것이 정말 멋지고 흥미진진하다고 생각했고, 개인으로서 제 여정에 큰 영향을 미쳤습니다. 정보 공간을 공유할 수 있다는 생각은 저에게 큰 영향을 미쳤습니다.
시간이 지나면서 우리 모두가 한 종으로서 점점 더 사이버 공간으로 빨려 들어가면서 그 공간은 단순히 정보를 검색하는 장소가 아니라 서로 소통하고 서로 소통하고 서로를 알아갈 수 있는 공간이 되었습니다. 마치 제가 잘 아는 사람들이 여기 많이 있지만, 오프라인에서 얼굴을 맞대고 소통하는 시간은 전체 시간의 2, 3% 정도밖에 되지 않는 것처럼요.
그래서 어쨌든 웹을 접했을 때 저는 웹에 매료되었습니다. 하지만 저는 세상에서 가장 멋진 것은 슈퍼컴퓨터라고 생각합니다.
이미지 src="https://img.jinse.cn/7234992_image3.png">
멋져 보이고, 많은 계산을 할 수 있고, 문제를 해결할 수 있는 기계를 얻을 수 있죠. 하지만 슈퍼컴퓨터입니다. 90년대부터 일본 정부에서 기후 과학 실험을 위해 설치한 것으로 알고 있습니다. 그 당시에는 이 기계의 전체 수명 동안 실제로 개인 프로그램을 실행할 수 있는 사람이 약 30명 정도밖에 없었던 것 같습니다.
그래서 저는 정보 공유를 위한 엔지니어링이 있는데 왜 거대한 컴퓨터를 모든 사람과 공유할 수 없을까 하는 생각을 하게 되었습니다.
인터넷이 있다면 모든 사람이 애플리케이션 공간을 공유하고 서로 상호 작용할 수 있는 프로그램을 만들면 어떨까요?
좋은 생각인 것 같았습니다. 실제로 당시에는 서버 간에 패킷을 전송하는 등 어느 정도 실행되긴 했지만, 매우 투박하고 느려서 건설적으로 발전하지 못했습니다.
이미지 src="https://img.jinse.cn/7234993_image3.png">
대학 진학을 앞두고 있을 때쯤에야 Erlang을 접하게 되었습니다. 병렬 환경에서 작은 연산 단위와 같은 연산 프로세스를 누구나 실행할 수 있고 자연스럽게 서로 상호작용할 수 있다는 생각을 직관적으로 표현할 수 있는 프로그래밍 언어나 운영체제를 처음 발견한 것이죠. 이것이 바로 Erlang이 제공하고자 하는 것입니다. 머신을 시작하고 그 안에서 이 환경을 실행할 수 있습니다. 마치 하나의 운영체제처럼 다양한 애플리케이션을 동일한 환경에서 실행할 수 있습니다.
대학에 다닐 때 대형 공유 유닉스 박스를 사용했던 경험이 있는데, 이 역시 같은 개념이지만 여러 사람이 같은 컴퓨터를 공유하면 애플리케이션이 서로 쉽게 상호 작용할 수 있다는 아이디어를 더 작은 규모로 표현한 것이죠.
이미지 src="https://img.jinse.cn/7234994_image3.png">
약 80~100명 정도의 규모입니다. 하지만 여전히 재미와 구성성의 일부를 볼 수 있습니다. 한 사용자가 시스템에서 다른 사용자를 찌르는 셸 스크립트를 작성했던 기억이 납니다. 그리고 그들이 찌르면 다른 사용자가 또 다른 사용자를 찌르면서 일종의 연쇄 반응을 일으켰습니다. 즐거운 플랫폼이었지만 분산형 개방형 슈퍼컴퓨터의 꿈과는 거리가 멀었습니다.
이미지 src="https://img.jinse.cn/7234995_image3.png">
그리고 나서 저는 당시 세계의 컴퓨터라고 불리던 이더리움을 처음 접하게 되었습니다.
아! 이게 바로 내가 찾던 환경이구나, 분산 컴퓨팅뿐만 아니라 컴퓨터 과학에서는 이를 단일 시스템 이미지 SSI라고 합니다. 여러 대의 컴퓨터를 하나의 컴퓨터처럼 보이게 하여 여러 컴퓨터에서 원활하게 작업할 수 있도록 하는 것입니다.
그래서 SSI가 있다는 것도 멋지지만, 신뢰가 필요 없다는 것도 매우 놀라운 기능입니다. 이 컴퓨터에서 프로그램이 실행되면 누구도 신뢰할 필요가 없습니다. 이는 오늘날 인터넷의 구조와 다르며, 우리가 사용하는 모든 웹 서비스, 사실 현재 우리가 사용하는 거의 모든 서비스는 서비스를 제공하는 사람을 신뢰해야 합니다.
이더는 세상에 대한 다른 관점을 제공합니다. 전 세계에 분산된 슈퍼컴퓨터가 전 인류를 위한 컴퓨팅을 통합하고, 모든 프로그램이 개인이나 집단의 통제에서 자유로워질 수 있습니다. 당시에는 '코드가 곧 법'이라는 생각이었지만, 나중에 '코드가 곧 법'이라는 신조를 깨기 위해 고의로 규약을 어기면서 논란이 된 문구가 되었습니다. 어쨌든 저는 멋지다고 생각했습니다. 당시 저는 순진하게도 이 토큰이 있어야 계산을 해볼 수 있을 거라고 생각해서 ICO에 15달러를 투자했습니다.
이 회사가 이걸 만들었을 때, 분산형 세계 컴퓨터라는 원래의 비전은 실현되지 않았습니다. 대신 그 위에 거대한 금융 경제를 구축했습니다. 신뢰가 필요 없는 실제 상태의 변화가 있을 때 전체 탈중앙화 금융 생태계를 생성할 수 있다는 것이 밝혀졌습니다. 1,000억 달러 이상의 가치가 이 기계에 저장될 것으로 예상됩니다. 이는 정말 놀라운 혁신입니다. 이는 광범위한 영향을 미칩니다.
그러나 제 슈퍼컴퓨터는 어디 있죠? 슈퍼컴퓨터가 아니에요. 어떻게 된 거죠? 뭐가 잘못됐나요? 지금 이더를 사용하려고 하면 솔직히 말도 안 되죠.
우리는 그들이 정말 놀라운 작업을 많이 했다는 것을 부인할 수 없습니다. 하지만 이더리움이 처음 시작되었을 때 말했던 세계 컴퓨터와는 거리가 멉니다. 이더의 평균 거래 수수료는 정기적으로 약 25달러로 치솟고 있으며, 이는 누가 무엇을 소유하고 있는지에 대한 상태 기록을 업데이트하기 위해 약간의 계산을 하는 것일 뿐입니다.
이미지 src="https://img.jinse.cn/7234996_image3.png">
기본적으로는 1970년대의 IBM 메인프레임과 같습니다. 도대체 어떻게 이런 일이 일어났을까요?
정답은 바로 공유 메모리 시스템입니다. 이더넷에서는 네트워크의 모든 사용자 간에 전 세계적으로 공유되는 메모리가 있습니다. 10,000개에서 60,000개 사이의 네트워크 노드가 모두 해당 프로그램의 상태를 신뢰성 있게 유지합니다.
이미지 src="https://img.jinse.cn/7234997_image3.png">
모두가 이 상태 전환이 제대로 작동하는지 확인하고 있습니다. 아무도 프로그램이 해서는 안 되는 일을 하도록 만들지 않는 것은 좋지만, 이러한 프로그램에는 프로그램과 사용자당 단일 실행 스레드에 걸쳐 있는 공유 메모리가 있습니다. 따라서 이더리움에서 연산을 수행하려면 단일 스레드, 단일 대기열이 존재하며 모든 사람이 계산할 프로그램을 해당 대기열의 맨 위에 추가하고 대기열에 대기합니다.
일반적인 분산 시스템 설계에서는 이를 '월드 상태 업데이트 중지'라고 부릅니다. 따라서 사용자가 오면 월드를 중지하고 아무도 사용할 수 없게 한 다음 다음 사용자가 갈 수 있습니다. 이는 순전히 단일 스레드 대기열로, 슈퍼컴퓨터와는 정반대의 경우입니다. 계산기에서 하는 것보다 훨씬 적습니다.
이미지 src="https://img.jinse.cn/7234998_image3.png">
이것은 솔라나의 지도입니다. 전 세계에 다양한 노드가 있고 이더리움보다 훨씬 빠르지만, 여기서 말하는 것에는 훨씬 빠르다는 것만으로는 충분하지 않습니다.
그래서 우리가 세계 컴퓨터, 분산 컴퓨터를 만들고자 한다면. 블록을 하나씩 생성하기 위해 줄을 서서 기다리는 것은 분명히 작동하지 않을 것이고, 이더는 처음에 공유 메모리 접근 방식을 취했고, 이제는 모든 사람들이 그것을 해결책으로 보는 일종의 맹목적인 숭배로 바뀌었습니다. 그리고 모든 것이 그런 사고방식 속에 구축되어 있습니다.
그러나 실제로 공유 메모리는 병렬성을 구현하려는 두 가지 주요 패러다임 중 하나에 불과합니다. 그래서 이 모든 것을 어떻게 설명해야 할지 고민하다가 공유 메모리는 악마다라는 말이 떠올랐습니다.
이 인용문은 Erlang의 또 다른 공동 발명가인 Joe Armstrong이 한 말입니다. 문제를 매우 정확하게 요약한 말이라고 생각합니다. 암호화폐 업계에서는 아무도 이 문제에 대해 이야기하지 않지만 컴퓨터 과학에서는 60년 동안 논의되어 온 흥미로운 문제이기 때문입니다.
Joe는 데이터를 공유하는 스레드가 병렬로 독립적으로 실행될 수 없다고 썼습니다. 싱글 코어 머신에서는 문제가 되지 않지만 멀티 코어 CPU에서는 문제가 됩니다.
데이터를 공유하는 실행 시점에서는 병렬이 아닌 직렬로 실행됩니다. 실행 스레드가 하나뿐인 이더넷에서 바로 이런 일이 벌어집니다. 솔라나에서는 병렬 스레드가 일부 존재하지만 동일한 머신 내에서만 가능합니다. 정보를 전송하거나 동일한 에이전트와 상호 작용할 때마다 해당 메모리에 대한 액세스를 다시 잠가야 하므로 병렬에서 직렬로 전환해야 합니다. 스레드에서 중요한 영역은 직렬 병목 현상을 일으키고 확장성을 제한합니다.
높은 성능을 원한다면 애플리케이션이 아무것도 공유하지 않도록 해야 합니다. 이를 통해 솔루션을 여러 개의 독립적인 CPU 코어에 복제할 수 있으며, CPU 코어를 스레드로 교체할 수 있어 분산된 환경에서 작동합니다.
이것이 현재의 탈중앙화 컴퓨팅 시스템이 확장되지 않는 이유를 정확하게 설명해준다고 생각합니다.
이미지 src="https://img.jinse.cn/7234999_image3.png">
다행히도 역사상 이런 문제를 겪은 사람은 우리뿐이 아닙니다. 이 이미지는 1985년 Erlang을 만든 로버트 버딩의 작업을 보여줍니다. 흥미롭게도 첫 번째 사용 사례는 서로 다른 전화 통화가 많을 때 이러한 모든 통화를 서로 다른 실행 스레드에서 관리하는 방법이었습니다.
그러나 동일한 잠금과 공유 메모리를 기다리는 방식으로는 문제를 해결하지 못했습니다. 그들은 1985년에 다른 해결책을 시도했고, 이것이 이런 종류의 기능을 구현하는 가장 좋은 예라고 생각합니다. 놀랍게도 아직 아무도 이를 암호화에 적용하지 않았습니다.
이 솔루션의 기본 아이디어는 두 개의 스레드를 잠그고 서로가 상태 조각에 접근하기를 기다리게 하는 것입니다. 한 스레드가 업데이트하고 다른 스레드가 기다린 다음, 다른 스레드가 업데이트하면 다음 스레드가 액세스할 수 있습니다. 이 거대한 대기열에서 우리는 필요한 상태 조각만 전송하고 있습니다. 필요한 정보만 공유하고 서로를 기다리지 않습니다. 모든 것이 비동기적으로 병렬로 실행됩니다.
이미지 src="https://img.jinse.cn/7235000_image3.png">
예를 들어 Tom은 AO에서 컴퓨팅 프로세스를 실행하고 있습니다. Tom이 저에게 답장을 보낼 수 있는 메시지를 보냈지만 저는 Tom의 답장을 기다리지 않고 다른 작업을 계속 진행합니다. 톰도 저를 기다리지 않습니다. 본질적으로 모든 것이 비동기식이며, 이것은 실제로 글로벌 컴퓨터를 만들 수 있는 아키텍처처럼 보이기 시작했습니다. 따라서 연결하면 적절한 사람에게만 정보가 흘러가는 그림이 보이기 시작합니다. 전역적으로 공유되는 상태가 아니라 로컬로 공유되는 상태가 있고, 전달해야 하는 정보만 전달되며, 모든 것이 훨씬 더 효율적으로 실행됩니다.
따라서 이 모델을 사용하면 서로 다른 메시지를 동시에 작업하는 여러 개의 스레드를 동시에 또는 그 이상으로 사용할 수 있습니다. 여기에는 제한이 없으며 다소 복잡해 보일 수 있지만 학문적인 의미에서는 바로 그런 것입니다.
2008년에 분산 멀티커널 운영 체제를 구축한 배럴피쉬 팀의 Andy라는 사람이 이에 대한 좋은 논문을 쓴 적이 있습니다. 연구 과정에서 시뮬레이션을 수행했는데, 공유 메모리가 있는 머신을 수천 개의 코어로 확장했을 때 계산 시간의 약 92%를 잠금 경합 사용에 소비한다는 결론에 도달했습니다. 하지만 모든 것이 비동기적으로 수행되고 적절한 시점에 다른 사람이 계산해야 하는 정보만 공유되는 시스템에서는 모든 것이 훨씬 원활하게 실행되고 원하는 만큼 확장할 수 있습니다.
이것이 바로 우리가 AO를 솔루션으로 생각하게 된 이유입니다.
AO는 "액터 지향"의 약자입니다. 사실 AO의 이전 이름은 Erlang이 실행되는 가상 머신인 Hyperbeam이었습니다.
따라서 Erlang은 아키텍처적으로뿐만 아니라 철학적, 거의 미학적으로도 AO 및 우리가 구축하는 모든 것과 깊게 얽혀 있습니다. 더 이상 80년대식 전화 통화를 하지는 않지만 여전히 매우 밀접한 관계를 유지하고 있습니다. 슈퍼빔이라는 로고도 우리가 디자인했습니다.
그래서 AO를 연습하다 보면 이 비동기 통신, 병렬 실행의 힘을 알 수 있습니다. 이러한 접근 방식을 개척한 것이 바로 Erlang이며, 이제 우리는 이를 탈중앙화 환경에 적용했습니다. 커뮤니티 구성원들은 이미 이를 잘 활용하고 있습니다.
이 이미지는 Gather Chat이라는 애플리케이션을 보여줍니다. 이 애플리케이션은 AO를 기반으로 개발되었으며, 화면의 각 캐릭터는 하나의 프로세스가 될 수 있고, 모두 병렬로 여러 연산을 수행할 수 있지만 서로 상호 작용할 수 있으며, 필요에 따라 메모리를 공유할 뿐입니다. 상태의 일부를 전송하고 서로를 기다리지 않기 때문에 정말 풍부한 경험을 만들 수 있습니다. 저희는 직관적으로 AO를 기반으로 가장 먼저 구축해야 할 것이 채팅방이라고 생각합니다.
이더리움에 채팅방을 구축하는 것은 상상할 수 없습니다. 메시지를 보내는 데 25달러를 쓴다면 사람들은 그다지 흥미를 느끼지 않을 것이기 때문입니다.
이미지 src="https://img.jinse.cn/7235003_image3.png">
이것은 인도의 한 팀이 AO에서 만든 게임인 The Grid입니다. AO에서는 적절한 사람들에게 적절한 메시지만 보내고, 신뢰할 필요가 없는 중립적인 네트워크를 구축하는 프로세스입니다. 신뢰할 수 있고 검증 가능한 중립적인 사이버 공간 경험을 제공합니다. 이 게임에서 모든 봇은 프로세스에서 실행되는 AI 에이전트입니다. 다양한 연산을 수행할 수 있으며 메시징 시스템을 통해 다른 사람들과 상호 작용합니다.
이미지 src="https://img.jinse.cn/7235004_image3.png">
약 3개월 전에 AO의 테스트 네트워크에서 서비스를 시작했는데, 이미 꽤 크고 흥미로운 생태계가 형성되고 있습니다. 탈중앙화 컴퓨팅 공간에서 사람들의 상상력과 창의력을 자극하는 것 같습니다. 저희는 심지어 완전히 탈중앙화된 LLM(대규모 언어 모델)을 구현하는 Llama 3을 AO에서 실행할 수 있었습니다. 이 경우에도 비동기식 작업으로 인해 이 정도 규모의 계산은 프로세스 작동에 영향을 미치지 않기 때문에 사용자는 이를 알아차리지 못할 것입니다.
이 병렬 비동기 컴퓨팅 모델의 핵심 원칙은 우리가 정말로 대화를 하고 싶지 않다면 내 계산이 당신의 계산에 영향을 미치지 않아야 한다는 것입니다. 그리고 그것은 단지 당신이 나에게 메시지를 보내면 내가 그 메시지로 무엇을 할 것인지 알아내는 문제일 뿐입니다. 그래서 전 세계 사람들이 공유하는 컴퓨터처럼 보이기 시작했습니다. 그리고 이것이 바로 탈중앙화 컴퓨팅의 궁극적인 형태라고 생각합니다.
이 거대한 글로벌 컴퓨터에서 Arweave 영구 저장 네트워크는 매우 중요한 부분이며, 마치 로컬 하드 드라이브처럼 Arweave의 데이터에 액세스할 수 있도록 만들 것입니다. 네트워크에 존재하는 50억 개의 정보가 갑자기 로컬 하드 드라이브의 일부가 된다고 상상해 보세요. 이제 원하는 것은 무엇이든 만들 수 있으며, 사람들은 앱이 출시된 후에도 수정되지 않을 것이라고 믿을 수 있습니다. 앞서 이야기한 탈중앙화 금융을 모두 할 수 있습니다.
이미지 src="https://img.jinse.cn/7235005_image3.png">
어젯밤, 이 강연을 위한 슬라이드를 작업하던 중 포럼에서 Erlang의 저자 Robert가 올린 이 글을 우연히 발견했습니다. 오랫동안 마음속으로 직관적으로 알고 있었지만 이렇게 명쾌하게 표현한 적은 없었습니다.
얼랑을 설계하고 언어 기능을 어떻게 사용할지 고민할 때 애플리케이션보다는 운영체제의 관점에서 생각하게 됩니다. 저는 동시성을 가진 언어라기보다는 언어를 가진 운영체제로 생각하는 경향이 있습니다.
이랭을 사용해 보신 분들도 같은 생각을 하실 겁니다. 어떤 언어를 사용하느냐는 그다지 중요하지 않으며, 시스템의 모든 트랜잭션이 메시지를 전송하여 수행된다는 이 아이디어의 기저에 깔린 의미론이 중요합니다. 또한 운영 체제에 대한 이 아이디어의 핵심을 가리킵니다.
따라서 AO를 구축할 때 사람들이 더 쉽게 사용할 수 있도록 하려면 사용자 친화적인 환경이 필요하다는 것을 깨달았습니다. 그래서 AOS를 만들었습니다.
이미지 src="https://img.jinse.cn/7235006_image3.png">
암호화폐 업계에서 일해 보셨다면, 이더리움에 스마트 컨트랙트를 배포하려고 할 때 수천, 아니 수만 달러의 비용이 들기 때문에 엄청난 낭비가 발생한다는 사실을 알고 계실 겁니다. 이 월드 상태 업데이트 중지 공유 상태 메커니즘에 코드를 작성해야하기 때문에 코드를 기계에 넣는 데 수천, 수만 달러가 들기 때문입니다.
반면 AOS에서는 입력만 하면 특정 작업에 사용할 수 있는 새로운 프로세스가 열립니다. 상호작용은 일반적인 명령줄 인터페이스처럼 느껴지며, 시스템 초기 사용자들로부터 받은 가장 큰 피드백 중 하나는 자연스럽고 재미있게 사용할 수 있다는 것이었습니다. 마치 메시지를 받았는데 프로세서를 설치하지 않은 상태에서 해당 메시지에 응답하는 코드 스니펫이 콘솔에 바로 인쇄되어 프로세스에서 무슨 일이 일어나고 있는지 실시간으로 볼 수 있는 것과 같습니다. 마치 거대한 분산형 슈퍼컴퓨터에 터미널을 연결한 것과 같습니다.
이르랑 언어 자체는 어떤가요? 솔직히 말해서, 최신 표준이라고 보기에는 사용자 친화적이지 않습니다. 아마도 1960년대 프롤로그라는 시스템을 기반으로 하기 때문일 것입니다.
이미지 src="https://img.jinse.cn/7235007_image3.png">
그래서 저희는 결국 매우 간단하고 배우기 쉬운 언어인 LUA를 사용하게 되었습니다. 90년대 초에 만들어져 매우 안정적입니다. 원래는 자바스크립트였어야 했지만 안타깝게도 그렇게 되지 못했습니다. 자바스크립트는 수많은 이상한 것들 위에 얼랑을 얹은 것 같았고, 시간이 지남에 따라 점점 더 커지는 재앙처럼 점점 더 부풀어 올랐죠.
그러나 LUA는 단순하고 이해하기 쉬우며, 시간이 지남에 따라 추가된 모든 이상한 기능이 없는 언어의 핵심입니다. 단순하고 순수하며 배우기 쉽습니다. 며칠 전 X에서 개발자는 아니지만 @DeFi_Dad라는 사람이 연락을 받았는데, 그는 이 시스템이 정말 마음에 들었고 실제로 사용할 수 있고 프로그래밍을 시작할 수 있다고 했습니다.
네, LUA는 직관적이고 친숙해 보여서 누구나 애플리케이션을 만들 수 있을 것 같습니다. 기술적인 배경 지식이 없는 사람이라도 이 분산형 슈퍼컴퓨터를 기반으로 자신만의 첫 번째 애플리케이션을 구축할 수 있는 좋은 기회가 있다고 생각합니다. 흥미롭게도 루아와 얼랑의 결합을 생각한 사람은 저희뿐만이 아닙니다.
실제로 Robert가 Lurel이라는 것을 만들었는데, 이에 대해 자세히 설명해드리겠습니다.
이미지 src="https://img.jinse.cn/7235008_image3.png">