검수요청.png검수요청.png

솔라나

위키원
Asadal (토론 | 기여)님의 2021년 9월 15일 (수) 22:18 판
이동: 둘러보기, 검색
솔라나(SOLANA)
솔라나(SOLANA)

솔라나(SOLANA)는 2017년부터 개발되어 왔던 프로젝트로, 창립자 아나톨리 야코벤코(Anatoly Yakovenko)가 탈중앙 네트워크의 노드가 단일 노드 수준의 성능을 구현하는 방법을 모색 중에 개발됐다. 현존하는 어떠한 블록체인도 단일 노드급의 성능을 보여주지 못하고 있으며 이것을 달성하는 것이 솔라나의 궁극적인 목표다.

비트코인이더리움 같이 작업증명(PoW) 방식을 사용하는 시스템은 초당 약 10건의 트랜잭션(TPS)을 지원하고 있으며, PBFT 기반 지분증명(PoS) 방식을 사용하는 텐더민트(Tendermint)는 100–200개의 노드로 약 1,000 TPS를 지원하고 있다. 솔라나는 PBFT와 유사한 PoS 블록체인으로, 현재 200개 이상의 노드가 운영되고 있는 테스트넷 환경에서 50,000 TPS 이상을 지원하고 있으며 가장 성능이 뛰어난 블록체인이자 세계 최초의 웹-스케일 탈중앙 네트워크다.

솔라나 팀은 퀄컴, 인텔, 넷스케이프 그리고 구글 출신의 선구적인 기술자들로 구성되어 있으며, 프로젝트 초창기부터 솔라나의 혁신적인 성능을 구현하기 위한 기술을 구축하는데 집중해왔다.

솔라나 팀은 단일 노드 수준의 성능을 구현할 수 있는 탈중앙화된 무허가형 네트워크를 만들기 위해 다음과 같은 8가지 핵심 기술을 개발했다:

핵심 기술

  • 역사증명 (Proof of History) — 컨센서스 전 단계 시간 검증
  • 타워 BFT (Tower BFT) — 역사증명으로 최적화된 버전의 PBFT
  • 터빈 (Turbine) — 블록 전파 프로토콜
  • 걸프 스트림 (Gulf Stream) — 맴풀이 없는 트랜잭션 포워딩 프로토콜
  • 씨레벨 (Sealevel) — 병렬 스마트 컨트랙트 런타임
  • 파이프라이닝 (Pipelining) — 검증 최적화를 위한 트랜잭션 처리 장치
  • 클라우드브레이크 (Cloudbreak) — 수평으로 확장되는 계정 데이터베이스
  • 아카이버 (Archivers) — 분산 장부 저장소

역사증명

블록체인 네트워크 전체가 단일 노드 수준의 성능을 구현하는 것은, 대역폭의 병목현상 없이 순수히 컴퓨팅 파워로 작동됨을 의미합니다. 이를 위해 솔라나 팀은 가장 먼저 네트워크 노드의 통신 방식을 최적화하였습니다.

무선 데이터 통신은 블록체인을 기반으로 하는 네트워크와 많은 유사점이 있으며 오랜 기간 동안 네트워크 통신 최적화를 위해 오랜 연구가 진행되어왔습니다. 규모적인 면에서 보았을 때, 모든 전화기마다 고유한 주파수를 제공할 정도로 충분한 대역폭을 갖춘 무선 중계기는 존재하지 않기 때문에 통신회사들은 하나의 주파수에 여러 대의 전화기를 사용할 수 있도록 “다중 접속 기술"을 개발하였습니다.

시분할다중접속(TDMA, Time Division Multiple Access)는 데이터 통신에서 대규모 확장성을 갖출 수 있게 해주는 기술입니다. TDMA는 하나의 중계기를 매개로 하여 동일 주파수대를 시간적으로 분할하고, 이 시간대를 각 전화 통화(phone call)에 할당해 줍니다. 이러한 방식을 통해, 기지국은 네트워크를 위해 전세계적으로 사용 가능한 시계(clock)를 제공하게 됩니다. 이는 각 주파수가 다중 동시 데이터 채널을 지원하도록 함으로써 제한된 대역폭의 확장성을 크게 높이고, 동시에 동일한 주파수로 브로드캐스트 되는 여러 전화기의 간섭을 최소화시켜줍니다.

오늘날의 블록체인 네트워크에는 시계 문제(clock problem)가 있습니다. 블록체인 네트워크의 시계는 새로운 블록이 생겨날 때마다 “틱"하고 시간이 흐릅니다. 이더리움의 경우 15초에 한 번씩 블록이 생성되지만, 이때 생성된 블록에 넣을 수 있는 정보의 양은 상당히 제한적입니다. 블록체인 네트워크에 적합한 TDMA는 모든 벨리데이터 노드가 동의하는데 2초보다 적은 시간이 걸리는 세분성을 갖춘 시계로, 이를 통해 거래를 보다 효율적으로 처리할 수 있습니다.

솔라나의 핵심적인 혁신은 전 세계적으로 이용 가능한 기술인 역사증명(POH, Proof of History)입니다. POH는 합의 이전에 작동하는 네트워크 상 시간의 무허가성 자원을 뜻합니다. 즉, POH는 단순히 합의 프로토콜과 안티-Sybil 메커니즘이 아닌, 시계 문제를 위한 솔루션입니다.

다른 블록체인은 시간이 경과되었음을 동의하기 위해 벨리데이터 간 소통이 필요하지만, 솔라나의 벨리데이터들은 순차적인-해싱 확인 지연 함수(VDF) SHA-256 상의 시간 경과를 인코딩하여 자체적인 시계를 유지관리합니다. 솔라나는 단순히 임의성을 위해 VDF를 사용하지 않지만, 각 벨리데이터는 VDF를 사용하여 자체 시계를 유지관리합니다. 그렇기 때문에 벨리데이터의 리더 선정은 전반적인 에포크(epoch) 보다 먼저 이루어지게 됩니다.

텐더민트와 비슷하게, 에포크 스케쥴은 수천 블록 동안 이루어집니다. 하지만 텐더민트와 달리 네트워크는 장애가 발생한 노드를 기다려주지 않으며, 각 벨리데이터가 VDF를 실행하여 블록 및 벨리데이터 전송을 위한 슬롯을 확보했음을 증명하게 됩니다. 그리고 각 블록 프로듀서는 블록 생성에 대한 보상을 획득하기 때문에 벨리데이터 또한 보상받게 됩니다.

역사증명을 사용함으로써, 리더는 계속 순차적으로 변경되며 네트워크 상태와는 관계없이 네트워크 전체가 발전하게 됩니다. 이는 즉 네트워크가 절대 중단되지 않는다는 것을 의미합니다. 네트워크는 벨리데이터 간 의사결정 없이 벨리데이터 교체를 결정할 수 있습니다. 이러한 경우는 다른 블록체인에서는 찾아볼 수 없는 메커니즘으로 작지만 중요한 차이입니다. 왜냐하면 기존의 블록체인에서는 이러한 의사 결정을 위해 소통이 이뤄져야 하기 때문입니다. 하지만 솔라나에서의 리더 교체 결정은 비동기적으로 이루어집니다.

이러한 핵심 혁신을 통해 스택 상에 디자인 가능한 공간을 만들었습니다. 타임스탬프에 사용 가능한 시계를 제공하는 것 외에도, 솔라나는 POH를 통해 네트워크 상에서 블록 시간(800ms), 블록 전파 (log200(n)), 처리량 (50K-80=K TPS) 그리고 원장 저장 공간 (petabytes)을 최적화하였습니다.

타워 BFT

역사증명을 통해 솔라나는 동기적인 시계의 장점을 갖출 수 있는, PBFT(Practical Byzantine Fault Tolerance)와 같은 합의 알고리즘 타워 합의(Tower Consensus)를 구현했습니다. PBFT와 달리, 타워 합의는 일관성보다 활성도를 중시하고 있습니다. PBFT처럼 노드들은 타임아웃을 기하급수적으로 늘리며 합의를 이루지만, 장부 또한 무신뢰성을 가진 시간의 출처가 될 수 있기에, 노드들은 네트워크 상 다른 모든 벨리데이터들의 타임아웃을 볼 수 있습니다.

터빈

솔라나 컨센서스 레이어에 P2P 메시징에 대한 종속성이 없다고 가정했을 때, 솔라나는 합의와는 무관하게 네트워크를 통해 블록이 전송되는 방식을 최적화할 수 있게 됩니다. 솔라나의 블록 전파 기술인 터빈(Turbine)은 비트토렌트(BitTorrent)로부터 많은 아이디어를 빌려왔습니다.

블록이 스트리밍 됨에 따라 블록은 이레이저 코드(erasure code)와 함께 작은 패킷으로 나누어지게 됩니다. 그다음 무작위의 큰 피어 집합들 사이에서 팬아웃 됩니다. 200개가 팬아웃되면, 네트워크의 세컨드 레이어는 40,000개의 벨리데이터를 커버할 수 있습니다. 따라서 벨리데이터는 완결성(finality)에 log200(n) 만큼의 영향과 함께 블록을 전파할 수 있습니다. 실용성 측면에서, 40,000개의 노드가 있을 때 각 연결이 100ms인 경우, 복제는 400ms, 완결성은 500ms를 달성할 수 있습니다.

팬아웃 메커니즘은 장애(fault)를 견딜 수 있어야 하며, 벨리데이터는 리드-솔로몬(Reed-Solomon) 이레이저 코드를 사용하여 데이터를 인코딩하고 어느 정도 수준의 내결함성을 제공하게 됩니다.

걸프 스트림

고성능 네트워크에서 멤풀(Mempool) 관리는 다른 체인들이 다뤄보지 않은 새로운 종류의 문제입니다. 걸프스트림(Gulf Stream)은 트랜잭션 캐시(Transaction Caching)를 네트워크의 말단으로 푸시하는 기능을 수행합니다. 모든 벨리데이터들은 솔라나 아키텍처에서 다음의 리더가 누군지를 알 수 있기 때문에, 클라이언트와 벨리데이터는 트랜잭션을 미래에 예상되는 리더에게 앞서 전달하게 됩니다. 때문에 벨리데이터는 시간에 앞서 트랜잭션를 처리할 수 있게 되고, 확정에 소요되는 시간을 단축하며, 리더의 변경도 더욱 빠르게 이루어지고, 미확정 트랜잭션 풀에서 오는 메모리 압박 또한 줄어들게 됩니다.

지갑과 같은 클라이언트들은 특정 블록을 해시(Hash)하는 트랜잭션에 서명합니다. 클라이언트는 네트워크에서 확정 완료된 최근의 블록 해시를 선택합니다. 블록들은 약 800ms마다 제시되며, 매번 추가되는 블록마다 기하급수적으로 증가하는 타임아웃을 롤백 방지를 위해 요구하게 됩니다. 저희의 기본 타임아웃 커브에서 봤을 때, 최악의 상황 속에서 확정 완료되는 블록 해시들은 32 블록만큼의 경과시간을 가집니다. 블록 타임을 800ms로 가정했을 때, 이는 25.6초입니다.

한 트랜잭션이 어느 벨리데이터에게 전달되었을 때, 벨리데이터는 이를 예상되는 다음의 리더들 중 하나에게 전송합니다. 클라이언트는 벨리데이터로부터 거래 확정 사실을 알 수 있습니다. 클라이언트는 블록 해시가 정해진 시간 내에 만료되거나, 트랜잭션이 네트워크에서 확정됨을 알 수 있습니다. 이를 통해 클라이언트는 확정적으로 처리되거나 실패할 트랜잭션들에 서명할 수 있습니다. 트랜잭션이 레퍼런스하는 블록해시가 만료될 정도로 네트워크 진행이 롤백 지점을 넘어서게 되면, 클라이언트는 해당 트랜잭션이 이제 무효하며 체인에서 절대로 실행되지 않음을 확정적으로 알게 됩니다.

씨레벨

솔라나의 고성능 네트워크라는 이점을 살리기 위해 GPU와 SSD를 활용하고 수평적으로 확장할 수 있도록 설계된 초고속 병렬 트랜잭션 처리 엔진 씨레벨(Sealevel)을 개발했습니다. 이때 주목할 점은 다른 블록체인들은 싱글 스레드(Single-threaded)의 컴퓨터와 같다는 것입니다. 솔라나는 단일 샤드(Shard)에서 서명 검증뿐만이 아닌 트랜잭션 실행을 지원하는 유일한 블록체인입니다.

씨레벨은 운영체제 드라이버에 활용되는 스캐터-게더(Scatter-gather)라는 테크닉에서 많은 부분을 빌려온 솔루션입니다. 트랜잭션 실행 중 어떤 상태(State)에서 읽고 쓸지를 처음부터 정확하게 표기합니다. 런타임은 RAID 0 SSD 어레이에 걸쳐 스케줄 된 상태에 대한 읽기와 쓰기 방식을 최적화하면서, 블록에서 서로 겹치지 않는 상태 변화 함수들을 찾아내고, 이를 병렬처리할 수 있게 합니다.

씨레벨은 트랜잭션들을 스케줄 하는 가상머신(Virtual Machine, VM)이지만, 사실 트랜잭션은 가상머신에서 처리되지 않습니다. 대신, 씨레벨의 트랜잭션은, 고성능 패킷 필터를 목표로 디자인된 버클리 패킷 필터(Berkeley Packet Filter, BPF)라는, 업계에서 검증된 바이트코드를 기본값으로 실행하는 하드웨어로 넘어가게 됩니다. BPF 바이트코드는 90년대 초부터 최적화가 이루어졌으며, 전 세계 수백만 스위치 헙(Switching hubs)들에 적용되어 왔고, 단일 스위치 상에서 초당 6천만 패킷을 40 기가비트 네트워크 상에서 다루고 있습니다.

엔비디아(Nvidia)가 사용 가능한 SIMD 레인을 두 배씩 늘릴 때마다, 솔라나 네트워크의 연산 능력도 두 배씩 증가하게 됩니다. 실질적으로 단일 스레드 컴퓨터처럼 디자인된 다른 모든 블록체인들은 이와 같은 확장을 절대로 할 수 없습니다.

WASM을 타겟으로, LLVM을 활용해 개발자들이 GPU에서 실행되는 고성능의 스마트 컨트랙트를 C/C++, 그리고 러스트(Rust)로 작성할 수 있도록 툴을 제공하고 있습니다. 솔라나는 WASM을 사용하지 않지만, 개발자들은 WASM 컴파일러를 위해 작성된 C와 러스트 코드를 솔라나 컴파일러에서 최소한의 변경을 통해 재컴파일 할 수 있습니다. 따라서, 개발자들은 디피니티(Dfinity), EOS, 폴카닷(Polkadot), 그리고 이더리움 2.0과 같은 WASM을 활용하는 다른 주요 블록체인 상의 애플리케이션을 솔라나로 마이그레이션할 수 있습니다.

파이프라이닝

솔라나 네트워크 상 트랜잭션 검증 처리는 파이프라이닝(Pipelining)이라 불리는 최적화 방식을 광범위하게 사용하며, 이는 CPU 설계에서 흔히 쓰이는 방식입니다. 파이프라이닝은 단계적으로 처리되어야 할 데이터가 계속적으로 입력되고, 이를 위해 별개의 하드웨어가 존재하는 상황에 적합한 프로세스입니다.

솔라나 네트워크에서 파이프라인 메커니즘은 — 트랜잭션 처리 유닛(Transaction Processing Unit, TPU) — 커널 레벨의 데이터의 데이터 불러오기, GPU 레벨의 서명 검증, CPU 단계의 뱅킹, 그리고 커널 스페이스의 쓰기 단계를 걸쳐 진행됩니다. TPU가 밸리데이터에게 블록들을 내보내기 시작할 때쯤 이미 다음 패킷의 세트를 불러와 서명을 검증하고, 토큰 반영을 시작하게 됩니다.

솔라나 TPU는 4단계로 이루어진 파이프라인의 GPU 병렬 처리 중 언제나 50,000건의 거래를 동시에 처리할 수 있습니다. 이 모든 것은 시중에서 판매하는 5,000달러 이하 가격대의 컴퓨터로 이뤄낼 수 있습니다. 솔라나의 TPU에 GPU 오프로딩을 통해 네트워크는 단일 노드와 같은 효율성을 갖출 수 있습니다.

클라우드브레이크

단순히 컴퓨팅 파워를 증가시키는 것만으로는 확장성을 확보할 수 없습니다. 계정 트래킹에 사용되는 메모리는 사이즈와 접근 속도 면에서 모두 빠른 병목현상이 나타날 수 있습니다. 예를 들어, 최근 블록체인에서 많이 사용되는 로컬 데이터베이스 엔진 LevelDB는 약 5,000 TPS 이상을 지원할 수 없다는 것이 보편적인 견해입니다.

이 문제에 대한 임시방편으로 글로벌 상태를 RAM에서 관리하는 방법이 있습니다. 그러나, 글로벌 상태를 저장할 만큼의 RAM이 내장된 기기는 시중에서 쉽게 구할 수 없습니다. 솔라나는 RAID 0 사양 SSD에 걸쳐 동시의 읽기와 쓰기에 최적화된 상태 아키텍처, 클라우드브레이크(Cloudbreak)를 개발했습니다. 블록체인 상 프로그램이 쓸 수 있는 저장용량이 추가될수록, 프로그램 실행 중 처리 가능한 동시 읽기 및 쓰기의 수도 증가하게 됩니다.

솔라나의 트랜잭션 설계와 함께, 클라우드브레이크 아키텍처는 AOT(Ahead Of Time) 트랜잭션 처리를 지원합니다. 밸리데이터가 트랜잭션을 감지하면, 씨레벨은 디스크 상의 모든 계정들을 미리 불러올 수 있고, 실행을 위한 런타임을 준비하게 됩니다. 밸리데이터와 블록 프로듀서들은 트랜잭션이 블록에 코딩되기 전부터 트랜잭션을 실행할 수 있어, 블록 타임과 확정에 걸리는 지연시간을 더욱 최적화할 수 있습니다.

아카이버

1GBPS일 때, 블록체인 네트워크는 연간 4 petabytes를 원장용 데이터 생성에 사용합니다. 데이터를 저장하는 것은 빠르게 1차적으로 중앙화된 벡터가 되는 것을 의미하며, 이 과정에서 블록체인을 구현한다는 것은 목적과 알맞지 않습니다.

솔라나에서는 데이터 저장 공간이 벨리데이터들에게 아카이버(Archivers)라는 노드 네트워크로 오프로드됩니다. 아카이버는 합의에 참여하지 않습니다. 상태의 내역(history)은 여러 조각과 이레이저 코드로 나뉘어져 있습니다. 아카이버는 상태의 작은 부분을 저장합니다. 네트워크는 종종 아카이버에 그들이 저장해야 할 데이터를 증명해 줄 것을 요청하게 됩니다. 이때, 솔라나는 파일코인에서 본 따온 복제증명(PoRep, Proofs of Replication)을 활용하게 됩니다.

솔라나는 PoRep이 이루어지는 방법을 최적화하기 위해 합의 전의 시계인 역사증명을 사용할 수 있습니다. 합의에 참여하지 않는 아카이버 노드는 PoH를 사용하여 원장의 조각이 복제된 경량화된 증명을 생성하고, 벨리데이터는 GPU를 통해 대규모 검증을 할 수 있습니다.

아카이버는 랩탑과 같이 경량화된 노드와 같습니다. 이레이저 코드와 중복성을 갖춘 아카이버 네트워크는 AWS나 GCE보다 훨씬 우수한 데이터 가용성을 보장할 수 있습니다.

주요 인물

에릭 윌리엄스(Eric Williams)
솔라나 수석과학자
칼 린(Carl Lin)
솔라나 소프트웨어 엔지니어

참고자료

같이 보기


  검수요청.png검수요청.png 이 솔라나 문서는 암호화폐 종류에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.