7 분 소요

블록체인 인프라 아키텍처


CAP이론

1

CAP이론은 분산 데이터베이스 시스템을 바탕으로, 네트워크 분할 허용이 이루어지는 경우에 일관성, 가용성을 동시에 만족하는 것은 불가능하며, 일관성과 가용성 중 하나만 가질 수 있다는 이론이다.

CAP 요소


  • 분할 허용(P : Partition Tolerance) : 여러 개의 네트워크가 동작하고 있을 때 접속이 단절되어 서로 메시지를 주고받지 못하더라도 서비스가 잘 동작해야 한다.
  • 일관성(C : Consistency) : 분산 시스템에서의 요청 및 응답 과정에서, 노드가 여러 개 있더라도 마치 한 노드에서 실행되는 것처럼 동작해야 한다.
  • 가용성(A : Availability) : 분산 시스템이 지속해서 가용하기 위해서 장애 없는 노드에 수신된 모든 요청은 반드시 응답돼야 한다.

CAP의 상관관계

  • CA : 일관성과 가용성을 충족하지만 분할 허용을 충족하지 못한다. 데이터에 대한 강한 신뢰를 부여할 수 있지만, 네트워크 문제가 시스템 중단을 야기할 수 있다.
  • CP : 일관성과 분할 허용을 충족하지만 가용성을 충족하지 못한다. 높은 확장성으로부터 성능을 확보할 수 있지만 일부 데이터가 비가용할 수 있다.
  • AP : 가용성과 분할 허용을 충족하지만 일관성을 충족하지 못한다. 부정확한 응답을 허용하는 고성능 시스템에 적합하다.

P : 네트워크 분할 허용


  • 노드 간의 통신이 실질적으로 어려운 상태에 도달하여 네트워크가 사실상 분할되었을 때도 마치 단일네트워크처럼 네트워크가 정상적으로 작동한다.

네트워크 분할 허용을 전제하는 네트워크는 노드 간의 통신이 완전히 불가능하거나 비동기성 네트워크에서 메시지가 유실될 수 있고, 현실성이 떨어지는 시간에 메시지가 전달될 수 있다.

모든 분산 네트워크는 네트워크 분할 허용성을 보유할 수 밖에 없다. 따라서 CAP이론에서는 네트워크 분할 허용(P)를 기본으로 전제한다.

C : 일관성


  • 모든 요청은 최신 데이터 또는 에러 응답을 받는다

일관성은 즉, 한 노드에서 특정 데이터의 처리가 완료되었을 때 다른 노드가 동시다발적으로 업데이트된 정보에 접근할 수 있어야 한다.(Linearizability 기준)

A : 가용성


  • 정상적으로 이루어진 모든 요청은 정상적으로 작동하고 있는 모든 노드로부터 응답을 받는다.

일반적으로 높은 가용성은 시스템 자체가 모든 요청에 대한 정상적인 응답을 할 수 있다는 것을 전제한다. 따라서 하나의 정상 노드만 응답해도 시스템은 가용하다고 판단되며, 여기서는 현실적인 응답시간을 고려한다.

그러나 CAP이론에서의 가용성은 오류가 없는 노드가 발송한 메시지는 오류가 없는 모든 노드로부터 응답을 받을 수 있어야 하고, 데이터 저장소에 대한 모든 동작이 오류가 없는 모든 노드로부터 성공적으로 리턴받아야 하기 때문에 일반적인 높은 가용성보다 훨씬 높은 난이도를 요구한다. 그리고 CAP이론의 가용성은 응답시간에 제한을 걸어두지 않아 실제 사용에 부적합할 수 있다는 단점이 있다.

PACELC 이론

CAP이론에 따르면 일관성과 가용성은 완전한 대립 관계에 있지만, 사실 완벽한 CP 시스템과 AP 시스템은 쓸모가 없다. 또한, CA 시스템은 가질 수 없다.

  • 완벽한 CP : 완벽한 일관성을 갖는 분산 시스템에서는 하나의 트랜잭션에 대한 복사본을 모든 노드가 가져야 한다. 시스템의 전체 성능은 네트워크에서 가장 낮은 성능의 노드에 종속되며, 만일 단 하나의 노드라도 문제가 발생하면 트랜잭션 처리는 실패한다. 또한, 노드 수가 많아질 수록 지연시간이 길어진다.
  • 완벽한 AP : 완벽한 가용성을 갖는 분산 시스템은 네트워크 분할로 인해 고립된 노드가 발생하더라도 서비스를 제공한다. 고립된 노드는 업데이트를 반영하지 못해 일관성이 결여된 잘못된 정보를 가지고 있지만, 완벽한 AP 시스템에서는 어찌됐든 가용한다. 이 때, 사용자는 잘못된 정보를 받고 활용하게 된다.
  • 완벽한 CA : 완벽한 CA 시스템을 위해서는 절대로 장애가 발생하지 않는 네트워크를 구성해야 한다. 불가하다.

-> 실제로는 일관성과 가용성의 절충안에 해당하는 연속적인 중간 영역이 존재한다. 이를 고려하여 네트워크의 정상 상황과 분할 상황을 모두 담아 낼 수 있는 PACELC 이론이 있다.

2

위와 같이 PACELC는 분할 시, 가용성과 일관성 사이의 트레이드 오프가, 그렇지 않다면, 지연시간과 일관성 사이의 트레이드 오프가 있음을 의미한다.

  • 네트워크 분할 상황(P) : 단절된 노드에 접근할 수 없기 때문에 일관성을 포기하고 가용성을 제공할 지(PA), 가용성을 포기하고 일관성을 유지할지(PC)의 정도를 결정해야 한다.
  • 네트워크 정상 상황(E) : 모든 노드에 업데이트를 반영해 일관성을 유지하기 위한 긴 대기 및 응답시간을 가질지(EC), 일관성을 포기하고 짧은 지연시간을 가질지(EL)의 정도를 결정해야 한다.

각 이론에서의 블록체인

CAP 관점에서의 블록체인


CAP 관점에서의 블록체인은 가용성과 분할 허용을 충족하는 AP 시스템이다. 그러나 통상 AP 시스템은 고성능을 위하지만, 블록체인 시스템은 자가 제한을 통해 성능을 제한한다는 점이 특이하다. 이를 통해 블록체인에서는 과거 블록의 위/변조를 어렵게 만들고 궁극적 일관성을 확보했다. 이러한 특징은 블록체인 트릴레마로 이어진다.

PACELC 관점에서의 블록체인


PACELC 관점에서의 블록체인은 일관성보다 가용성과 지연시간을 중시한 분산 시스템이다. 그러나 마찬가지로 시간이 지남에 따라 과거의 블록 및 트랜잭션에 대한 궁극적 일관성을 확보한다.

  • 네트워크 분할 상황(P) : 분할 상황에서 블록체인은 일관성보다는 가용성에 초점을 둔다. 채굴자는 자신이 참조하고 있는 블록이 네트워크에서 아직 합의를 이루지 못했다고 해도 이전 블록으로 삼아 채굴을 이어간다.
  • 네트워크 정상 상황(E) : 정상 상황에서 블록체인은 일관성보다는 짧은 지연시간에 초점을 둔다. 블록체인에서는 채굴된 새 블록 혹은 더 무거운 체인 등을 통해 원장의 업데이트가 제안되는데, 모든 노드가 이를 따를 필요는 없다.

샤딩

샤딩이란 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각(shard)을 나누어 분산 저장하여 관리하는 것을 말한다. 이를 통해 노드에 무겁게 가지고 있는 데이터를 빠르게 검증할 수 있어, 트랜잭션 속도를 향상시킬 수 있다.

샤딩의 특징


  • 샤딩은 관계형 데이터베이스에서 대량의 데이터를 처리하기 위해 데이터를 파티셔닝하는 기술이다.
    • 파티셔닝은 DBMS 레벨에서 데이터를 나누는 것이 아닌 데이터베이스 자체를 분할하는 방식으로 애플레이케이션 레벨에서 구현한다.
  • 공개형 블록체인의 맥락에서는, 네트워크에 올려진 트랜잭션은 네트워크 상의 서로 다른 노드들로 이루어진 여러 샤드로 분할하고 각각의 노드는 들어오는 트랜잭션들의 일부만을 처리할 수 있게 되고, 네트워크 상에서 병렬식으로 다른 노드들에서도 똑같이 실행된다.
    • 네트워크를 여러 샤드로 쪼개면 동시에 더 많은 트랜잭션을 처리하고 증명할 수 있어 네트워크가 커질수록 점점 더 많은 트랜잭션 처리가 가능하게 되는 속성인 병렬식 확장을 가진다.

샤딩의 장점

  • 필요한 데이터만 빠르게 조회할 수 있기 때문에 쿼리 자체가 가볍다.
  • 오래돼서 조회가 안되는 데이터를 클라우드에 올리거나 별도의 디스크에 저장해서 운영상의 스토리지 이득을 볼 수 있다.

샤딩의 문제점

  • 한 샤드 내에서의 전송이 아닌 여러 샤드 간의 전송은 절차가 훨씬 복잡하고 느려진다.
    • 비확정적합의 상황은 더욱 복잡해지기 때문에 확정 합의가 거의 필수이다.
  • 시간이 지남에 따라 샤드 간 불균형이 일어나 일부 샤드의 안정성이 취약해지는 문제가 발생할 수 있다.
    • 샤드마다 트랜잭션의 빈도, 노드의 수, 밸리데이터의 비율 등에서 차이가 나기 때문에 한 번 샤드가 정해진 다음에도, 샤드의 구성원을 재배치하여 샤드 간 균형을 맞추는 알고리즘이 필요하다.
  • 전체 트래픽이 예상했던 것보다 높아질 경우, 처음 설정해둔 샤드의 수를 늘려야 한다.
    • 이 때, 한 번 쓰인 데이터를 해쉬나 서명으로 묶어 위변조나 조작하지 못하도록 만들어진 분산 원장 구조에서는 샤드를 중간에 추가하는 등의 동적 샤딩 기술을 구현하기가 어렵다.
  • 블록체인에서 중앙화의 문제와 보안성의 문제(1% Attack)가 있다.

샤딩 체인 동작


샤딩 체인 동작 방식

  • Proposer가 되고 싶은 네트워크 참여자는 SMC를 통해 Balance를 예치한다.
  • Collator가 되고 싶은 네트워크 참여자는 SMC를 통해 Deposit을 예치한다.
  • Collator들은 주기적으로 SMC Status를 확인해서, 자신이 Collator에 선정되었는지 여부를 확인한다.
  • Collator들은 SMC에 의해 각 샤드 체인에 Pseudo-Random하게 배정되고, Look Ahead Period 동안에 해당 샤드의 이전 기록을 다운받으면 선택된 Proposal을 제안한 Proposer로부터 Proposal Bid를 받는다.
  • Proposer는 트랜잭션을 담은 Proposal을 Collator에게 제출하는데, Proposal은 아직 검증되지 않은 Collation을 의미하며, 선택된 Proposal을 제출한 Proposer는 트랜잭션 발송자로부터 트랜잭션 Fee를 받는다.
  • Collator들은 해당 Proposal에 속한 트랜잭션들이 Valid한지를 검증하는 투표를 한다.
    • 표에서 2/3이상의 Collator들이 Proposal에 포함된 트랜잭션이 Valid하다고 찬성할 경우, 해당 Proposal은 유효한 Collation이 된다.

주요 용어

  • Collation : 샤드 체인에서 메인 체인의 블록과 같은 역할을 하며, 크게 Collation Header와 트랜잭션 목록으로 구성된다.
  • Collation Header : Collation을 구성하는 정보를 담고 있으며, Proposer의 Sign을 거쳐 메인 체인에 제출하고, 트랜잭션 목록은 Collation에 담긴 트랜잭션들의 목록이다.
  • Proposer : 제안자라는 뜻으로 트랜잭션들을 모아 Proposal을 만들고 Collator에게 제출하며, Proposal은 검증되지 않은 Collation이다.
  • Collator : Proposer가 제출한 Proposal을 검증한다. Period마다 한 샤드에는 여러 Collator들이 배정되는데 이들은 해당 Period에 진입하기 일정 기간 이전에 무작위로 선정된다.
  • Executor(샤딩 Phase 3에 등장) : Collation Header를 메인체인의 SMC(Sharding Manager Contract)에 전달하고, 샤드 체인의 실제 State가 변경된다.
  • Period : 메인 체인에서 샤드 체인의 Collation Header를 제출받는 주기이며, 단위는 메인 체인에서의 블록의 개수로 PERIOD_LENGTH = 5라면 5개의 블록이 생성되는 것이 1Period이다.
  • Look Ahead Period : Collator는 샤드 체인에서 Collation을 검증하기 이전에 SMC에 의해 Pseudo-Random하게 배정되는데, ‘Look Ahead Period’는 Collator가 몇 Period에 앞서서 어떤 샤드 체인에 배정되는지를 나타내고, LOOKAHEAD_PERIODS = 4이면, 4 Period 이전에 Collator는 샤드 체인에 배정되므로 Collator는 사전에 자신이 배정된 샤드 체인의 State 정보를 다운받는 시간을 확보할 수 있다.
  • Sharding Manager Contract(SMC) : SMC는 샤드체인에서 가장 중요한 역할을 하는 스마트 컨트랙트로 SMC는 메인 체인과 샤드 체인을 연결하며, Collator, Proposer, Collation Tree를 관리하며, 샤드 체인이 메인체인에 참여하기 위해서는 SMC의 역할이 필수적이다.

이더리움의 샤딩


이더리움 샤딩은 메인 체인이 처리해야 할 블록들을 조각내어 샤드라고 불리는 오프체인에 할당하는데 오프체인들은 주어진 조각에 대해서만 검증한다. 샤드들이 각자 할당된 조각들의 검증을 모두 끝내면 다시 묶어 이러한 개념을 통해 블록을 검증하는 데 걸리는 시간을 단축한다.

즉, 샤드별로 Merkel Partricia Tree를 만들고 그 샤드의 Root들로 만들어진 Merkel Patricia Tree의 Root만을 블록체인에 올리는 것으로 모든 Miner가 모든 트랜잭션을 실행할 필요없이 샤드별로 Miner를 분산시켜 실행할 수 있기 때문에 전체 실행 속도가 올라간다.

샤딩

이더리움 샤딩의 문제점

  • 난수 생성 : 난수를 사용하여 검증자를 샤드에 배정하는데, 공격자가 난수를 예측하거나 조작할 수 있어, 샤딩 보안에 문제가 생긴다.
  • 빠른 샤드 전환 : 샤드에 대한 공격 성공 가능성을 줄이려면 검증자를 빠르게 전환해야 하는데, 이전부터 Look Ahead Time을 두어 검증자가 자신이 맡을 샤드블록을 미리 동기화시키고, 미리 동기화하기 위해서는 동기화할 자료를 줄여서 빠르게 검증자를 준비할 수 있는 Stateless Client를 제안한다. Stateless Client는 블록 헤더만을 저장하지만 블록헤더만을 저장하기 때문에 거래에 대한 검증은 불가능하여 거래 검증하려면 거래를 만들 때, 검증에 필요한 Witness를 첨부해야 한다.
  • 자료 가용성 : 모두가 Stateless Client라면 블록의 내용을 손실할 수 있기 때문에 누군가는 State를 저장하고 있도록 적절한 보상과 검증이 필요하다. Fisherman 딜레마는 Erasure Coding으로 해결했다.
  • 검증자가 효율적인 통신 : 샤드 배정이 자주 바뀌는 상황에서 샤드 검증자들끼리의 효율적인 P2P 통신은 필수적이며, libs2p의 Flood Sub과 Gossip Sub가 사용된다.
  • 샤드 간 비동기 통신 : 거래 당사자나 스마트 계약이 여러 샤드에 나누어져 잇다면 샤드 간의 통신이 필요하지만, 여러 단계를 거치게 되어 시간이 오래 걸리므로 결국 메인 체인에 무리를 주게 되고 이렇게 샤드 간 통신이 너무 자주 일어난다면 샤딩의 장점이 사라진다. 이에 이더리움은 Cross Link를 가지고 메인체인의 무리를 덜고, Yanking으로 필요한 스마트 계약을 현재 샤드로 가져와 샤드 간의 통신을 줄이고자 현재 지연상태 전이를 통한 샤드 간의 비동기 통신도 구상 중이라고 한다.

본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.