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

스테이트 샤딩

위키원
leejia1222 (토론 | 기여)님의 2019년 8월 28일 (수) 16:32 판
이동: 둘러보기, 검색

스테이트 샤딩(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)
스테이트 샤드가 가진 두 번쩨 문제는 데이터 유효성이다. 어떤 이유로 특정 샤드가 공격을 받았고 제어 불능 상태에 빠진다고 생각해보자. 이때 시스템의 상태는 모든 샤드에 걸쳐 복제를 하지 않기 때문에, 네트워크는 제어 불능 샤드에 속한 트랜잭션을 검증할 수 없고, 결과적으로 블록체인은 사용 불능이 된다. 이 문제에 해결하기 위해서는 데이터 불능으로부터 네트워크를 조정하고 복구할 수 있는 기록 또는 백업 노드를 유지하는 것이다. 그러나 이러한 노드들이 시스템 전체 상태를 저장해야 하기 때문에 중앙화의 위험을 불러올 수 있다.
  • 네트워크 재편
모든 샤딩 메커니즘에서 고려해야 할 점은 샤드들이 공격이나 실패점에서 회복 중에 있을 때 멈추지 말하야 한다는 것이다. 즉 네트워크는 새로운 노드들을 계속해서 수용하고, 그들을 임의적으로 서로 다른 샤드에 할당하는, 네트워크 재편을 해야 한다. 그러나 스테이트 샤딩의 경우 재편을 하기가 매우 까다롭다. 각각의 샤드가 상태의 일부만을 유지하기 때문에 네트워크를 모두 함께 재구성하는 것은 동기화가 완성될 때까지 전체 시스템의 불능을 불러올 수 있다. 이런 정지상태를 피하기 위해 네트워크는 노드가 제거되기 전에 충분히 오래된 노드들을 가질 수 있도록 점진적으로 재구성되어야 한다.[3]

활용

쿼크체인(quark chain)

쿼크체인(QuarkChain)

쿼크체인(QuarkChain)은 빠른 트랜잭션 처리 속도와 안정성을 보장하는 플랫폼을 위한 암호화폐이다. 쿼크체인은 수평 확장성 기술을 활용하여 블록체인의 확장성 문제를 해결하려는 것을 목표로 하고 있다. 가기.png 쿼크체인에 대해 자세히 보기

현존 블록체인 모델을 고려하여 쿼크체인은 다음과 같은 설계를 통해 기존 샤딩 모델을 개선하고자 한다.

  • 분할한 상태 : 쿼크체인은 스마트 계약을 분할한다. 만약 재샤드(reshard)가 일어난다면 스마트 계약을 다른 샤드에 옮긴다. 스마트 계약은 코드와 저장소를 포함하고 있기 때문에 사용자 계정보다 데이터의 크기가 더 커질 수 있다. 사용자의 계정을 분할하지는 않기 때문에 사용자 계정의 상태는 샤드 간 트랜잭션을 통해 다른 샤드로 쉽게 옮길 수 있다. 이를 통해 사용자는 자신의 프라이빗 키를 통해 전체 샤드에 있는 모든 리소스로 쉽게 접속할 수 있다.
  • 원자성(Atomicity) : 스마트 계약은 fullShardID라고 하는 코드베이스에 기반한 샤드 키(shard key)를 각각 가지고 있으며, 모든 스마트 계약에 있는 같은 샤드키를 통해 처리되는 일괄처리(batch operation)는 원자성을 띤다. 더불어 다른 샤드 키를 통한 또 다른 스마트 계약으로의 접속시도는 차단된다.
  • 균등한 부하/크기 : 스마트 계약의 샤드키가 균등하게 분포되어 있다는 가정을 통해 서로 다른 샤드의 스마트 계약 또한 균등하게 분할되어 있다고 예측할 수 있다.
  • 재샤드(reshard) : 저렴한 마이그레이션 비용으로 더 많은 샤드를 추가하기 위해 스마트 계약에 있는 샤드 키에 따라 재샤드 시의 샤드를 두 개의 샤드로 분열시킨다. 이는 다른 사전 재샤드한 샤드의 데이터의 마이그레이션을 고려할 필요가 없기 때문에 보다 단순하게 재샤드할 수 있다. 스마트 계약에 따른 행위는 재샤드 이전과 이후에도 같다. 즉, 같은 값에 의한 스마트 계약의 실행 결과와, 또는 같은 시스템의 상태 변화에 의한 스마트 계약의 쓰기 결과는 재샤드 전이나 재샤드 후의 결과 값은 같아야 한다.

이더리움(ethereum)

이더리움(Ethereum)

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

엘론드

엘론드질리카(zilliqa)와 비교하여 트랜잭션 샤딩 뿐만 아니라 스테이트 샤딩도 사용하여 샤딩의 한계를 넓혔다. 엘론드는 작업증명(PoW) 메커니즘을 완전히 제거하고 합의를 위해 확률적 지분증명(SPoS)을 사용한다. 두 아키텍처 모두 자체 스마트 계약 엔진을 구축하고 있지만, 엘론드는 블록체인 간의 상호운용성을 달성하기 위해 이더리움(EVM)을 목표로 한다. 질리카가 구현해낸 샤딩은 네트워크 샤딩(network sharding)으로 네트워크만 샤딩을 진행하고, 네트워크에 들어온 노드들을 여러 샤드에 할당하고 연산 능력을 높여 TPS를 높이는 것이다. 트랜잭션 처리는 샤딩을 통해 분할적/병렬적으로 하여 저장은 스테이트 샤딩과 다르지만, 기존의 방식과는 다르지 않다. 이더리움이 구현하고자 하는 샤딩과는 다른 샤딩으로 이더리움의 샤딩은 스테이트 샤딩이며, 차이점으로는 누가 더 샤딩을 진행 하는 것에 있다.[5]

  • 스테이트 샤딩 아키텍처 검증
엘론드 프로토 이프 PoC-v0.5는 기본적으로 직접 메시징, 정보 방송 및 채널 통신을 위한 통신 p2p 모듈이 포함된 기술 백본으로 슈노르(schnorr)방식, 발라레(bellare)및 네븐(neven)의 블록에 대한 다중 서명 방법과의 거래에 대한 서명 및 확인을 처리하는 암호화 모듈, 서로 다른 데이터 유형(블록, 트랜잭션, 계정 등)이 서로 연결되어 시스템에 저장되는 방법을 정의하고 설명하는 데이터 모듈, 일관성과 보안을 보장하기 위해 네트워크를 통해 상태를 복제하면서 트랜잭션을 처리하고 블록을 조립하는 데 사용되는 실행 엔진돠 체계적인 부트스트랩 프로세스와 적절한 타임아웃을 보장하는 동기화 및 시간 통과 관점에 사용되는 연대기 모듈, 라운드 로빈 환경에서 기본 컨센서스를 사용하는 컨센서스 모듈로, 모든 샤드에서 독립적인 컨센서스 그룹을 실행하여 블록을 제안하고 검증 할 수 있으며, 통신 주제를 사용하고 샤드 및 크로스 샤드 트랜잭션을 모두 사용할 수 있는 샤딩 모듈이 있다.[6]

문제점

중앙화의 문제와 보안성의 문제를 가지게 되고, 보안의 문제는 1% 어택(attack)의 문제가 생길 수 있으며, 100개의 샤드 시스템에서는 오직 1%의 해시 비율(hash rate)로 샤드를 지배할 수 있다. 샤드 간의 커뮤니케이션이 너무 빈번하게 일어난다면 커뮤니케이션으로 인한 지연시간의 문제가 발생하고, 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랙재션의 유효성을 검사하지 못한다. 오프라인 샤드를 유지하기 위해 백업 노드를 갖게 된다면 중앙집중식이 되어 보안성에 위협이 있으며, 네트워크가 한 번씩 재편성될 때 한 번에 네트워크를 전환하게 되면 일부 동기화가 완료될 때 까지 전체 시스템을 사용할 수 없게 될 수도 있고, 계정 기반 모델(account-based model)로 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지하며, 교차분할 트랜잭션을 수행하지 못하도록 제한이 되어 있다.

한 샤드의 연결이 끊어질 경우 네트워크에 문제가 생길 수 있으며, 보안성 문제로는 하나의 샤드에 악성 노드가 모이는 것을 방지하려면 네트워크를 주기적이고 무작위로 셔플해야 하며, 노드를 셔플하려고 하면 다른 노드의 상태를 알아야 하는데, 스테이트 샤딩은 자신의 상태밖에 모르기 때문에 셔플을 할 수 없고, 악성 노드 방지가 어렵다.[7]

해결방안

빠른 샤드 전환 이 돼야 하는데, 샤드에 대한 공격 성공 가능성을 줄이고자 한다면 검증자를 빠르게 전환해야 한다. 이전부터 미리보기를 두어 검증자가 자신이 맡을 샤드 블록을 미리 동기화시킨다. 미리 동기화하기 위해서는 동기화할 자료를 줄여서 빠르게 검증자를 준비할 수 있는 무국적 고객(stateless client)을 제안하는 이유는 블록 헤더만을 저장하는데 블록 헤더만을 저장하기 때문에 거래에 대한 검증은 불가능하고, 거래 검증을 하려면 거래를 만들 때, 검증에 필요한 증거를 첨부해야 하며, 영지 식을 사용하여, 증거의 크기를 줄이는 방법도 있다. 자료의 가용성으로는 모두가 무국적 고객이라면 블록의 내용을 손실할 수 있어 누군가는 상태를 저장하고 있어야 하며, 적절한 보상과 검증(proof of custody)가 필요하다. 어부(fisherman) 딜레마는 이레이저 코딩(erasure coding)으로 해결 가능하다. 난수 생성으로는 난수를 사용하여 검증자를 샤드에 배정하는데, 공격자가 난수를 예측하거나 조작하여 샤딩보안에 문제가 생기면, 기존의 란다오(RANDAO) 난수 생성방식 VDF(verigiable delay function)을 사용한다.

많은 샤드가 공격이나 실패 점에서 회복 중일 때 멈추지 말아야 한다. 네트워크는 새로운 노드들을 계속 수용하고 그들을 임의로 서로 다른 샤드에 할당해야 하며, 네트워크는 재편되어야 한다. 스테이트 샤딩의 경우에 재편하기가 까다로운데, 각각의 샤드가 상태의 일부만을 유지하며, 네트워크를 모두 함께 재구성하는 것은 동기화가 완성될 때까지 전체 시스템의 불능을 불러와 정지 상태를 피하고자, 네트워크는 노드가 제거되기 전에 오래된 여러 노드를 가질 수 있도록 점진적으로 재구성해야 한다. 새로운 노드가 샤드에 들어오면, 노드가 샤드의 상태와 동기화하기 위한 충분한 시간을 갖도록 하는 이유는 들어온 노드가 모든 단일 트랜잭션을 바로 거부하게 된다.

각주

  1. sobly tv, 〈샤딩이란? 쉽게 이해해보자〉, 《미디엄》, 2018-09-03
  2. 스물네마리, 〈적응형 스테이트 샤딩을 주 무기로 한 Elrond 〉, 《블록체인허브》, 2018-06-21
  3. phuzion7, 〈블록체인 샤딩의 3가지 형태: BlockChain Sharding〉, 《데일리 코인뉴스》, 2018-12-31
  4. 강민승 기자, 〈블록체인 성능 향상에 필수 `샤딩`…"쪼개라, 빨라질 것이니"〉, 《매일경제》, 2018-12-18
  5. 경욱'S DOODLE, 〈질리카 백서 분석하기 (1)〉, 《티코노미》, 2018-09-29
  6. 엘론드 공식 홈페이지 - https://elrond.com/technology
  7. Ki Oh, 〈이더가 샤딩을 구현하면 질리카는?〉, 《Zilliqa Сhats》, 2018-09-17

참고자료

같이보기


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