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

스테이트 샤딩

위키원
이동: 둘러보기, 검색

스테이트 샤딩(state sharding)은 상태가 지정된 상황에서, 특정 노드가 특정 상태값만 저장하고 있는 샤딩 기술을 말한다. 상태 샤딩이라고도 한다.

개요

스테이트 샤딩은 계정 기반 모델(account-based model)로, 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지하지만, 교차분할 트랜잭션을 수행하지 못하도록 제한되어 있다. 스테이트 샤딩은 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랜잭션의 유효성을 검사하지 못하게 된다. 만약 오프라인 샤드를 유지하기 위해 백업 노드를 갖게 된다면 중앙화되어 보안에 위협이 될 수 있다. 네트워크가 한 번씩 재편성될 때 한 번에 네트워크를 전환하게 되면 일부 동기화가 완료될 때까지 전체 시스템을 사용할 수 없게 된다.[1]

예를 들어, 이더리움의 총 블록 개수는 5,823,023개이다.(2018년 6월 20일 오후 기준) 만약 블록 한 개당 크기가 1KB라면 이더리움 블록체인의 총 크기는 5.8GB가 되며, 블록 한 개당 크기가 1GB라면 이더리움 블록체인의 총 크기는 5.8TB이다. 블록타임은 계속 줄어드는 추세이며 블록이 계속 쌓인다면 블록체인은 굉장히 무거워지게 될 것이다. 1만 명이 해당 블록을 나눠갖는다고 가정해보면, 한 사람당 582개의 블록을 가지고 있으면 된다. 혹은 1인당 블록을 1,000개를 가지게 된다고 하면, 5,823명이 블록을 나눠서 가지고 있으면 된다. 이것이 바로 스테이트 샤딩의 기본 원리이다. 원하는 데이터가 있다면 해당 샤드에 접근하여 보다 빠르게 열람할 수 있게 되어, 블록체인에 대한 부담을 덜어주고 보다 빠른 데이터 검색이 가능해진다.[2]

특징

계정 기반 모델을 이어가면 스테이트 샤드 블록체인의 경우에 특정 샤드는 상태의 일부만을 유지한다. 예를 들어, 만약 두 개의 샤드와 두 개의 사용자 계정만을 가진다면, 이들을 각각 엘리스(Alice)와 밥(Bob)이라 하고, 각 샤드는 한 명의 사용자 잔고를 보유한다. 엘리스가 밥에게 지불하는 트랜잭션을 생성하면, 이 트랜잭션은 첫 번째 샤드가 처리하게 된다. 일단 트랜잭션이 검증되면 밥의 새로운 계좌에 대한 정보가 그의 두 번째 샤드와 공유돼야 하고, 두 계정이 서로 다른 샤드에 의해 처리되면, 빈번한 샤드 간 커뮤니케이션과 상태 교환을 수반해야 한다. 샤드간 소통이 스테이트 샤드로 얻는 퍼포먼스를 해치지 않도록 하는 것은 스테이트 샤딩의 연구 과제이다.

  • 커뮤니케이션 오버헤드(communication overhead)
샤드 간의 커뮤니케이션이 너무 빈번하게 일어나면 커뮤니케이션으로 인한 지연시간의 문제가 발생할 수 있다. 샤드 간 커뮤니케이션 오버헤드, 즉 자원 소모를 줄이는 한 가지 방법은 사용자들의 샤드간 트랜잭션을 제한하는 것이다. 이는 앨리스가 밥과 직접 거래하는 것이 허용되지 않는다는 것을 의미하는데, 그럼에도 불구하고 앨리스가 밥과 거래를 해야 한다면 그녀는 그 샤드에 계정을 보유해야 한다. 앨리스가 샤드에 계정을 보유하므로써 샤드간 소통을 완전히 제거하지만 이는 곧 플랫폼의 사용성을 제한할 수 있다.
  • 데이터 유효성(data availability)
스테이트 샤드가 가진 두 번쩨 문제는 데이터 유효성이다. 어떤 이유로 특정 샤드가 공격을 받았고 제어 불능 상태에 빠진다고 생각해보자. 이때 시스템의 상태는 모든 샤드에 걸쳐 복제를 하지 않기 때문에, 네트워크는 제어 불능 샤드에 속한 트랜잭션을 검증할 수 없고, 결과적으로 블록체인은 사용 불능이 된다. 이때 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랜잭션의 유효성을 검사하지 못하게 된다. 오프라인 샤드를 유지하기 위해 백업 노드를 갖게 된다면 중앙화가 되어 보안에 위협이 생겨 51% 공격의 문제가 발생할 가능성이 생긴다. 이 문제를 해결하기 위해서는 데이터 불능으로부터 네트워크를 조정하고 복구할 수 있는 기록 또는 백업 노드를 유지하는 것이다. 그러나 이러한 노드들이 시스템 전체 상태를 저장해야 하기 때문에 중앙화의 위험을 불러올 수 있다.
  • 네트워크 재편
모든 샤딩 메커니즘에서 고려해야 할 점은 샤드들이 공격이나 실패점에서 회복 중에 있을 때 멈추지 말하야 한다는 것이다. 즉 네트워크는 새로운 노드들을 계속해서 수용하고, 그들을 임의적으로 서로 다른 샤드에 할당하는, 네트워크 재편을 해야 한다. 그러나 스테이트 샤딩의 경우 재편을 하기가 매우 까다롭다. 각각의 샤드가 상태의 일부만을 유지하기 때문에 네트워크를 모두 함께 재구성하는 것은 동기화가 완성될 때까지 전체 시스템의 불능을 불러올 수 있다. 이런 정지상태를 피하기 위해 네트워크는 노드가 제거되기 전에 충분히 오래된 노드들을 가질 수 있도록 점진적으로 재구성되어야 한다.[3]

활용

쿼크체인

쿼크체인(QuarkChain)

쿼크체인(QuarkChain)은 빠른 트랜잭션 처리 속도와 안정성을 보장하는 플랫폼을 위한 암호화폐이다. 쿼크체인은 수평 확장성 기술을 활용하여 블록체인의 확장성 문제를 해결하려는 것을 목표로 하고 있다. 쿼크체은 확장성 문제를 해결하기 위한 분산형 샤딩 솔루션을 제공하는데, 쿼크체인의 샤딩 기술은 두 가지 장점을 가진다. 첫 번째는 재사용 가능한 두 계층 블록체인을 통해 보안을 보장한다는 것이다. 쿼크체인 네트워크는 51% 공격을 피하기 위해 두 개의 블록체인으로 구성된다. 첫 번째 레이어는 샤드를 적용하고, 두 번째 레이어는 루트 블록체인을 사용하여 보안 및 확장성을 보장한다. 쿼크체인 샤딩 기술의 또 다른 특징은 스테이트 샤딩을 지원한다는 것이다. 스테이트 샤딩은 각 샤드의 데이터가 하위 상태로 분할되고, 각 노드가 작동하기 위해 다른 노드에 배치됨을 의미한다. 전체 네트워크의 데이터는 각 노드에 저장되고, 각 노드에서 스토리지 메모리 요구사항이 줄어든다. 가기.png 쿼크체인에 대해 자세히 보기

  • 샤딩 설계 개요
  • 분할한 상태 : 쿼크체인은 스마트 계약을 분할한다. 만약 재샤드(reshard)가 일어난다면 스마트 계약을 다른 샤드에 옮긴다. 스마트 계약은 코드와 저장소를 포함하고 있기 때문에 사용자 계정보다 데이터의 크기가 더 커질 수 있다. 사용자의 계정을 분할하지는 않기 때문에 사용자 계정의 상태는 샤드 간 트랜잭션을 통해 다른 샤드로 쉽게 옮길 수 있다. 따라서 사용자는 자신의 프라이빗 키를 통해 전체 샤드에 있는 모든 리소스로 쉽게 접속할 수 있다.
  • 원자성(Atomicity) : 스마트 계약은 fullShardID라고 하는 코드베이스에 기반한 샤드 키(shard key)를 각각 가지고 있으며, 모든 스마트 계약에 있는 같은 샤드키를 통해 처리되는 일괄처리(batch operation)는 원자성을 띤다. 더불어 다른 샤드 키를 통한 또 다른 스마트 계약으로의 접속시도는 차단된다.
  • 균등한 부하/크기 : 스마트 계약의 샤드 키가 균등하게 분포되어 있다는 가정을 통해 서로 다른 샤드의 스마트 계약 또한 균등하게 분할되어 있다고 예측할 수 있다.
  • 재샤드(reshard) : 저렴한 마이그레이션 비용으로 더 많은 샤드를 추가하기 위해 스마트 계약에 있는 샤드 키에 따라 재샤드 시의 샤드를 두 개의 샤드로 분열시킨다. 이는 다른 사전 재샤드한 샤드의 데이터의 마이그레이션을 고려할 필요가 없기 때문에 보다 단순하게 재샤드할 수 있다. 스마트 계약에 따른 행위는 재샤드 이전과 이후에도 같다. 즉, 같은 값에 의한 스마트 계약의 실행 결과와, 또는 같은 시스템의 상태 변화에 의한 스마트 계약의 쓰기 결과는 재샤드 전이나 재샤드 후의 결과 값은 같아야 한다.[4]
  • 시스템 상태와 쿼크체인의 상태 분할
CRUD(Create, Read, Update, Delete) 일괄 처리(batch operation)에 대한 원자성을 지원하기 위해 쿼크체인은 사용자의 계정과 스마트 계약의 각 주소에 32비트 샤드 키(shard key)를 더하는 방법을 통해 재정의 했다.
 주소 : RIPEMD160(공개 키) + 샤드키
여기에서 더하기(+)는 곱집합(cartesian product) 연산이며, 이 연산을 통한 쿼크체인은 총 192비트 데이터의 주소체계를 가지게 된다. 이 중 첫 160비트 주소는 쿼크체인에서 수신자(recipient)의 주소로 참조할 수 있다. 쿼크체인 네트워크에서 샤드의 숫자, 즉 샤드의 크기는 2의 거듭제곱의 형태 (2)ⁿ이다. 그리고 재샤드 작업은 네트워크 내 샤드 갯수의 두 배이다. 주어진 샤드의 크기를 통해 샤드의 인덱스는 다음과 같이 주어진다.
 Shard Id = Shard key % Shard size
샤드 내의 상태는 수신자의 주소값을 지닌 키(key)와 아래와 같은 값(value)들 간의 연결(mapping)이다.
 * 잔고 
 * 난수(Nonce) 
 * 코드 
 * 저장소 
 * 샤드키(ShardKey)
여기에서 샤드키는 키(key) - 값(value) 간의 짝이 생성될 때 설정이 되어 이후에는 변경이 불가능하다. 주소내의 추가적인 샤드키를 통해 사용자 혹은 수신자는 단일 프라이빗 키 관리를 통해 모든 샤드의 모든 주소들을 관리할 수 있게 된다.[4]
  • 트랜잭션
  • 잔고 전송 트랜잭션 : 잔고 전송 트랜잭션은 발신 주소와 수신처 주소에 따라 발생한다. 샤드내 트랜잭션(In-Shard Transaction)은 만약 발신/수신 주소가 샤드키는 다를 지라도 같은 샤드 아이디를 가지고 있다면 잔고가 샤드내 트랜잭션으로 전송되는 것이다. 이러한 트랜잭션은 같은 샤드 내의 수신처의 잔고만 업데이트하게 될 것이다. 만약 송수신 주소가 서로 다른 샤드 아이디를 가지고 있다면 이러한 전송을 샤드간 트랜잭션(Cross-Shard Transaction)이라고 하며, 트랜잭션의 원자성을 위한 추가적인 조정이 필요하게 된다. 다행인 것은 두 개의 샤드가 같은 암호화폐인 QKC를 통해 운영되고 있기 때문에 샤드간 트랜잭션은 이전의 체인간 트랜잭션에 비해 훨씬 간단한 구조를 가진다.
  • 스마트 계약 트랜잭션(Smart Contract Transaction) : 스마트 계약 트랜잭션은 동일 샤드내에서 발행이 되어야 한다. 쉽게 말해, 발신자 계정과 수신처의 스마트 계약 샤드 아이디는 반드시 같아야 한다. 스마트 계약은 동일한 샤드 키를 통해 다른 스마트 계약을 호출할 수 있다. EVM 속의 주소와 같이 코드 내의 다른 스마트 계약의 수신자를 기입하여 EVM과의 하위 호환성을 유지한다. 만약 스마트 계약이 다른 샤드에 각각 존재한다면, 아래의 어셈블리 코드와 동등한 형태의 스마트 계약 호출도 실패하게 될 것이다. 같은 샤드키의 스마트 계약은 항상 같은 샤드 내에서 분열이 되기 때문에 스마트 계약에 대한 읽기/쓰기와 같은 행동은 시스템 상태가 어떻게 분열되던지 간에 항상 같다고 보증할 수 있다.[4]
* PUSH 0*0 : 스택을 밀어 낸다.
* DUP1     : 스택 첫 번째 내용을 스택의 최상단으로 복사한다.
* REVERT   : 오류가 날 경우 오류 전으로 되돌린다.
  • 재샤드(Reshard)
재샤드는 하나의 샤드를 두 개의 분리된 샤드로 분열하는 동작이다. 따라서 샤드의 크기는 두 배로 커지게 된다. 샤드의 크기가 두 배로 된 후, 사용자 계정/스마트 계약의 수신처는 새로운 샤드 아이디의 또 다른 중요한 비트 부분을 통해 식별할 수 있다. 사용자 계정/스마트 계약의 샤드키가 균일하게 분포되어 있다는 가정하에, 절반의 사용자 계정/스마트 계약은 새로운 샤드로 분열이 도리 것이다. 또한 분열된 샤드의 코드를 REVERT 코드로 변경하거나 혹은 Null로 채운 저장소로 설정을 통해 분열된 샤드 내에 또 다른 분열된 샤드의 스마트 계약이 포함되어 있을 수 있다. 이러한 모조(Dummy) 스마트 계약은 새로운 샤드의 스마트 계약이 같은 샤드에 있으나, 다른 샤드키를 보유한 스마트 계약의 경우에는 여전히 호출에 실패할 수 있다는 것을 보여둔다.
만약 현재의 노드가 두 개의 분열된 샤드를 동시에 처리할 수 있는 수용력(capacity)이 부족할 경우, 새로운 샤드의 상태를 마이그레이션하여 처리하기 위하여 새로운 노드가 네트워크에 합류하게 된다. 이에 따라 시스템은 샤드 및 노드의 갯수가 증가함에 따라 수용력 또한 증가하게 된다. 이러한 동작은 클러스터(cluster)를 통해서 달성할 수 있다.[4]
  • 샤드 키(shard key) 선정
쿼크체인에서 부하의 균형을 유지하기 위해서는 모든 스마트 계약을 모든 샤드에 고르게 퍼트리는 것이 핵심이다. 스마트 계약이 생성되고 난 후 에 샤드키는 불변의 속성을 지니기 때문에 스마트 계약이 생성되는 도중에 샤드키를 선정하는 것이 무엇보다 중요하다.
  1. 첫째, 만약 스마트 계약이 다른 스마트 계약에 의존하여 생성이 된다면, 샤드 키는 의존하고 있는 다른 스마트 계약의 샤드 키와 반드시 같아야 한다.
  2. 둘재, 만약 스마트 계약이 다른 어떠한 스마트 계약에도 의존하지 않는다면, 사용자 혹은 지갑은 자유롭게 어떠한 샤드 키나 또는 아래의 몇 가지 규칙을 따르는 시스템을 선택할 수 있다.
* 임의로 생성된(Randomly Generated) 샤드키 
* 발신자 주소의 모든 32비트 
* 지갑의 아이피 주소
처음의 두 가지 선정방법은 균등하게 분배된 샤드키의 결과로 초래된다. 그러나 만약 수백 개 혹은 수천 개의 샤드가 있다고 가정한다면, 네트워크에 존재하는 어떠한 스마트 계약에도 접근하고 싶어하는 사용자의 경우는 샤딩의 효율을 감소시키거나 사용자의 경험을 악화시킬 빈번한 샤드간 트랜잭션, 혹은 다중 잔고들을 유지하고 싶을 것이다. 아이피 주소를 사용하게 될 경우 지리적인 정보를 통해 스마트 계약을 그룹화함으로써 문제가 경감될 가능성이 있다. 만약 사용자의 스마트 계약과의 상호작용이 지역 상품, 혹은 서비스와 같이 지리적으로 연관되어 있다면 사용자는 사용자가 거주하고 있거나 여행하는 지역과 관련된 샤드에 잔고를 유지할 수 있으며, 불필요한 샤드 간 트랜잭션을 잠재적으로 크게 줄임으로써 사용자 계정관리를 보다 간편하게 할 수 있다.[4]

이더리움

이더리움(Ethereum)

이더리움(ethereum)은 블록체인 기술을 기반으로 스마트 계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼이다. 2015년 7월 비탈릭 부테린(Vitalik Buterin)이 C++(Go) 언어로 개발했다. 이더해시(Ethash) 알고리즘 기반의 작업증명(PoW) 방식으로 채굴 중이지만, 앞으로 작업증명 방식을 벗어나 지분증명(PoS) 방식으로 변경할 예정이다.[5] 이더리움 이전의 블록체인 기반 기술은 전자화폐에 특화된 기능을 구현했기 때문에, 암호화폐 이외의 영역에서 사용하기에는 어려움이 있었다. 반면 이더리움은 비트코인과 비슷한 전자화폐의 기능과 더불어 솔리디티(Solidity) 등의 튜링완전성(Turing-Completeness)을 갖춘 확장용 언어를 이용해 스마트 계약을 작성함으로 여러 분야에 접목할 수 있다. 덕분에 블록체인 기술을 다양한 비즈니스 분야로 확장할 수 있게 되었다.

이더리움 샤딩은 블록체인 네트워크 참여자의 모든 주소를 일정한 갯수로 잘라 각 덩어리를 하나의 연방으로 구성하는 방식으로, 각 샤드가 계정별로 트랜잭션을 나눠 처리하고 승인한다. 이더리움의 경우에는 전체 계좌에서 0x00부터 시작되는 계정들은 1번 샤드에서 관리하고 0x01부터 시작하는 계정은 2번 샤드에서 관리하는 식이다. 만약 샤드 1에 속하는 요청자가 트랜잭션을 발생시키면 해당 트랜잭션은 샤드 1의 오퍼레이션 노드로 전파되고 블록 제한자, 실행자, 검증자의 검증을 거친다. 이상이 없다면 샤드 1에 들어있는 EVM이 컨트랙트의 코드를 실행시키고 스테이트 변경함수를 통해 기존 스테이트는 새로운 값으로 변경된다. 이더리움은 스테이트를 단일 방식으로 처리하고 있다. 이더리움의 마지막 로드맵인 세레니티에서는 지분증명 합의 알고리즘이 적용됨과 동시에 1024개의 샤드가 연쇄 파이프처럼 건설된다. 스테이트로 통하는 통로가 한 개에서 1024개로 추가 개방돼 스테이트를 구역마다 나눠 관리하게 된다. 지분증명 합의 알고리즘과 샤딩 기술이 적용되면 이더리움의 트랜잭션 처리 속도는 1000배 정도 빨라져 약 1만4000TPS의 성능을 낼 것으로 전망된다. [6] 가기.png 이더리움에 대해 자세히 보기

엘론드

엘론드(Elrond)는 보안, 효율성, 확장성 및 상호 운용성을 제공하는 퍼블릭 블록체인이다. 엘론드의 두 가지 가장 중요한 기능은 적응형 상태 샤딩(adaptive state sharding)과 보안지분증명(Secure Proof of Stake) 합의 알고리즘이다. 그 중 적응형 상태 샤딩(adaptive state sharding)이라고 불리는 엘론드의 확장성 및 처리량 증가를 이끄는 접근 방식은 네트워크 샤딩, 트랜잭션 샤딩, 스테이트 샤딩의 세 가지 샤딩 유형의 장점을 모두 결합한 것으로, 샤드 내부의 통신을 개선하고 병렬 처리를 통해 성능을 향상시키며 스토리지를 줄임으로써 거의 선형적으로 확장할 수 있는 솔루션을 말한다. 사용 가능한 리소스와 네트워크 사용량에 따라 샤드 수가 동적으로 변경되도록 허용하는 것은 처리량뿐만 아니라 효율면에서도 큰 영향을 미친다. 엘론드의 적응형 상태 샤딩 메커니즘은 일단 샤드의 수가 계산되면 이진 트리 구조를 기초로 한다. 이 숫자는 샤드에 대한 계정 주소의 결정적 매핑에 사용된다. 샤드에서의 트랜잭션 전송은 전송자 및 수신자 계정 주소를 지정된 샤드에 매핑하여 수행된다. 거의 선형적인 확장성을 보여주는 엘론드의 이러한 솔루션은 중앙 집중식 솔루션의 처리량을 능가한다는 점에서 큰 역할을 한다.

엘론드의 적응형 상태 샤딩은 세 가지 목표를 고려하여 설계되었다. 첫 번째는 가용에 영향을 미치지 않는 확장성이다. 샤드의 수를 늘리거나 줄이는 것은 다운타임을 발생시키지 않고 노드에 무시할 정도로 작은 영향을 주거나 상태를 업데이트하는 동안 노드를 최소화한다. 두 번째는 빠른 전송 및 추적이다. 트랜잭션에 알맞은 샤드를 찾는 것은 결정적이며 계산하기가 쉽고 통신 라운드가 필요하지 않다. 마지막으로 효율성 및 적응성이다. 샤드는 주어진 시간에 가능한 한 균형을 유지해야 한다.[7]

각주

  1. sobly tv, 〈샤딩이란? 쉽게 이해해보자〉, 《미디엄》, 2018-09-03
  2. 스물네마리, 〈적응형 스테이트 샤딩을 주 무기로 한 Elrond 〉, 《블록체인허브》, 2018-06-21
  3. phuzion7, 〈블록체인 샤딩의 3가지 형태: BlockChain Sharding〉, 《데일리 코인뉴스》, 2018-12-31
  4. 4.0 4.1 4.2 4.3 4.4 쿼크체인 QuarkChain, 〈쿼크체인 설명서 Part 3 : 쿼크체인의 상태 분할 샤딩〉, 《네이버 블로그》, 2018-09-03
  5. 블록인프레스, 〈이더리움 지분증명 합의 알고리즘 ‘캐스퍼’, 검토 절차 시작〉, 《블록인프레스》, 2018-04-23
  6. 강민승 기자, 〈블록체인 성능 향상에 필수 `샤딩`…"쪼개라, 빨라질 것이니"〉, 《매일경제》, 2018-12-18
  7. The Elrond Team, 〈Elrond A Highly Scalable Public Blockchain via Adaptive State Sharding and Secure Proof of Stake〉, 《엘론드 공식홈페이지》, 2019-06-19

참고자료

같이 보기


  검수요청.png검수요청.png 이 스테이트 샤딩 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.