샤딩 편집하기

이동: 둘러보기, 검색

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 아이디(ID)으로 기록되고, 다른 장점도 있습니다.

편집을 되돌릴 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 저장해주세요.
최신판 당신의 편집
20번째 줄: 20번째 줄:
  
 
* '''샤딩의 문제점'''
 
* '''샤딩의 문제점'''
: 블록체인 시스템의 확장성 문제를 해결하기 위해 등장한 기술이지만 샤딩을 적용할 경우 한 샤드 내에서의 전송이 아닌 여러 샤드 간의 전송은 절차가 훨씬 복잡하고 느려진다. 여러 샤드로 쪼갤수록 인터샤드 트랜잭션은 확률적으로 많아지는데 각 샤드는 자기 샤드의 데이터만 있고, 다른 샤드의 데이터는 가지고 있지 않으므로 샤드간 데이터를 어떻게 참조할 것인지, 어떻게 검증할 것인지 문제가 생겨서 알고리즘이 복잡해진다. 만약 이 단계에서 거래결과가 뒤집어지면 (비확정적합의) 상황은 더욱 복잡해지기 때문에 확정합의가 거의 필수이다.
 
 
: 또한 샤딩이 들어가게 되면 전체의 안정성은 보장이 된다고 하더라도 시간이 지나면 샤드간 불균형이 일어나 일부 샤드의 안정성이 취약해지는 문제가 발생할 수 있다. 샤드마다 트랜잭션의 빈도, 노드의 수, 밸리데이터의 비율 등에서 차이가 나기 때문에 한 번 샤드가 정해진 다음에도 샤드의 구성원을 재배치하여 샤드간 균형을 맞추는 알고리즘이 필요하다. 뿐만 아니라 예상했던 것보다 전체 트래픽이 높아질 경우, 처음 설정해둔 샤드의 수를 늘릴 필요가 있다. 한 번 쓰여진 데이터를 해쉬나 서명으로 묶어 위변조나 조작을 하지 못하도록 만들어진 분산원장구조에서는 샤드를 중간에 추가하는 등의 동적 샤딩 기술을 구현하기가 매우 어렵다.
 
 
 
: 확장성의 문제를 해결방책으로 나온 샤딩에 중앙화의 문제와 보안성의 문제를 가지게 되는데 보안의 문제에는 1% attack의 문제가 생길 수 있고, 100개의 샤드의 시스템에서는 오직 1%의 hash rate로 샤드를 지배할 수 있어 샤드 간의 커뮤니케이션이 너무 빈번하게 일어난다면, 커뮤니케이션으로 인한 시간 지연의 문제가 생기게 된다.<ref name="딩"></ref> 데이터 재분배(Rebalancing data)로는 Sharding된 [[DB]] 의 물리적인 용량 한계나 성능 한계에 따르면 샤드의 수를 늘리는 scale-up 작업이 필요하며 서비스 정지 없이 scale-up 할 수 있도록 설계 방향을 잡아야 하며, Global Transaction을 사용하면 샤드 DB 간의 트랜잭션도 가능하여 [[XA]] 임에도 성능 저하의 문제가 있다.<ref>hanburn, 〈[https://genesis8.tistory.com/211 샤딩(sharding)이란?]〉,《티스토리》, 2012-01-17 </ref>
 
: 확장성의 문제를 해결방책으로 나온 샤딩에 중앙화의 문제와 보안성의 문제를 가지게 되는데 보안의 문제에는 1% attack의 문제가 생길 수 있고, 100개의 샤드의 시스템에서는 오직 1%의 hash rate로 샤드를 지배할 수 있어 샤드 간의 커뮤니케이션이 너무 빈번하게 일어난다면, 커뮤니케이션으로 인한 시간 지연의 문제가 생기게 된다.<ref name="딩"></ref> 데이터 재분배(Rebalancing data)로는 Sharding된 [[DB]] 의 물리적인 용량 한계나 성능 한계에 따르면 샤드의 수를 늘리는 scale-up 작업이 필요하며 서비스 정지 없이 scale-up 할 수 있도록 설계 방향을 잡아야 하며, Global Transaction을 사용하면 샤드 DB 간의 트랜잭션도 가능하여 [[XA]] 임에도 성능 저하의 문제가 있다.<ref>hanburn, 〈[https://genesis8.tistory.com/211 샤딩(sharding)이란?]〉,《티스토리》, 2012-01-17 </ref>
  
66번째 줄: 62번째 줄:
  
 
* '''질리카 샤딩'''
 
* '''질리카 샤딩'''
: 질리카의 샤딩 기술은 [[네트워크 샤딩]](network sharding), [[트랜잭션 샤딩]](transaction sharding), [[연산 샤딩]](computational sharding)과 같은 다양한 형태로 구성되어 있고 그중 네트워크 샤딩은 질리카 채굴 네트워크를 샤드라는 작은 노드 그룹으로 나눌 수 있는 메커니즘이다. 이 네트워크 샤딩은 질리카를 확장할 수 있는 도구로서, 이 샤딩을 활용하게 되면 초당 수천 건의 트랜잭션 처리가 가능해진다. 질리카는 샤딩 기술을 통해 노드가 많아질수록 처리 속도가 더욱더 빨라진다. 질리카는 채굴 네트워크를 작은 그룹으로 나눠 병렬로 트랜잭션을 처리하기 때문에 네트워크 크기가 증가할수록 처리할 수 있는 트랜잭션 수가 선형적으로 증가하여 블록체인의 확장성 문제를 해결할 수 있으며, 테스트 넷에서 총 3,600 노드가 참가하여 1초당 2,488개의 트랜잭션을 처리했다. 질리카는 2018년 싱가포르에서 열린 밋업에서 진행된 테스트에서 1개 샤드로 481TPS, 2개 샤드로 995TPS, 4개 샤드로 1,967TPS, 그리고 6개 샤드로 2,828TPS를 달성하면서 네트워크 수 증가에 따른 트랜잭션 수의 선형적 증가 한다.
+
: 질리카의 샤딩 기술은 [[네트워크 샤딩]](network sharking), [[트랜잭션 샤딩]](transaction sharking), [[연산 샤딩]](computational sharking)과 같은 다양한 형태로 구성되어 있고 그중 네트워크 샤딩은 질리카 채굴 네트워크를 샤드라는 작은 노드 그룹으로 나눌 수 있는 메커니즘이다. 이 네트워크 샤딩은 질리카를 확장할 수 있는 도구로서, 이 샤딩을 활용하게 되면 초당 수천 건의 트랜잭션 처리가 가능해진다. 질리카는 샤딩 기술을 통해 노드가 많아질수록 처리 속도가 더욱더 빨라진다. 질리카는 채굴 네트워크를 작은 그룹으로 나눠 병렬로 트랜잭션을 처리하기 때문에 네트워크 크기가 증가할수록 처리할 수 있는 트랜잭션 수가 선형적으로 증가하여 블록체인의 확장성 문제를 해결할 수 있으며, 테스트 넷에서 총 3,600 노드가 참가하여 1초당 2,488개의 트랜잭션을 처리했다. 질리카는 2018년 싱가포르에서 열린 밋업에서 진행된 테스트에서 1개 샤드로 481TPS, 2개 샤드로 995TPS, 4개 샤드로 1,967TPS, 그리고 6개 샤드로 2,828TPS를 달성하면서 네트워크 수 증가에 따른 트랜잭션 수의 선형적 증가 한다.
 
 
* '''로커스체인 샤딩'''
 
: [[로커스체인]](Locus Chain)의 다이내믹 샤딩 기술(또는 동적 샤딩 기술)은 노드가 부담해야 하는 네트워크 부하를 샤드 수만큼 나누고 네트워크 전체의 트랜잭션 처리량을 샤드 수만큼 늘리면서 알고리즘으로 샤드를 재배치하여 서로간의 균형을 유지하는 기술이다. 각 샤드는 독립적으로 BFT합의알고리즘을 수행하고, 한 어카운트는 한번에 하나의 샤드에서만 처리되는 방식이기 때문에 노드의 네트워크 사용량은 줄어들고 트랜잭션 처리량은 노드 숫자가 늘어날수록 이에 비례하여 늘어난다. 또한 로커스체인은 원장 구조가 어카운트 별(AWTC: Account-wise Transaction Chain)로 되어 있어 샤드간 불균형이 일어났을 경우 계정 단위로 샤드를 재배치하여 샤드의 수와 사이즈, 밸리데이터 비율 등을 조절하는 것이 용이하다. 여기에 추가적으로 원장을 쪼개는 스테이트 샤딩을 더해 스토리지 사용량 역시 샤드 수만큼 나눌 계획이라고 한다. 로커스체인은 DAG상에서 BFT합의알고리즘을 구현<ref>여용준, <[http://www.enewstoday.co.kr/news/articleView.html?idxno=1273849 로커스체인, 세계 최초 'DAG-BFT 확정합의 알고리즘' 블록체인 기술 구현 성공]>, 《이뉴스투데이》, 2019-02-21</ref>해냈기 때문에 일반 샤딩이 가졌던 문제점을 해결했다고 주장한다.
 
  
 
== 종류 ==
 
== 종류 ==
* '''[[데이터베이스 샤딩]]'''(database sharding) : 하나의 거대한 [[데이터베이스]] [[테이블]]을 수평 분할(horizontal partitioning)하여 여러 개의 작은 단위로 나눈 후, 물리적으로 다른 위치에 분산하여 저장·관리하는 기술이다. 이때 수평 분할된 1개의 작은 [[테이블]]을 [[샤드]](shard)라고 한다.
+
* '''데이터베이스 샤딩'''(database sharking) : 하나의 거대한 [[데이터베이스]] [[테이블]] 을 수평 분할(horizontal partitioning)하여 여러 개의 작은 단위로 나눈 후, 물리적으로 다른 위치에 분산하여 저장·관리하는 기술이다. 이때 수평 분할된 1개의 작은 [[테이블]] 을 샤드(shard)라고 한다.
* '''[[네트워크 샤딩]]'''(network sharding) : 블록체인 기반 암호화폐를 채굴하기 위한 네트워크를 샤드라는 작은 [[노드]] 그룹으로 나누어 관리하는 기술이다. 네트워크 샤딩은 임의로 네트워크가 무작위로 노드를 샘플링하여 블록 단위로 샤드를 형성하지만, 네트워크가 샤드의 구성원에 대한 동의를 구하지 않아 구성원들이 원하는 방향으로 가지 않는 경우, 구성원들의 불만을 해결하지 못한다는 단점을 가지고 있다.<ref name="딩"></ref>
+
* '''네트워크 샤딩'''(network sharking) : 블록체인 기반 암호화폐를 채굴하기 위한 네트워크를 샤드라는 작은 [[노드]] 그룹으로 나누어 관리하는 기술이다. 네트워크 샤딩은 임의로 네트워크가 무작위로 노드를 샘플링하여 블록 단위로 샤드를 형성하지만, 네트워크가 샤드의 구성원에 대한 동의를 구하지 않아 구성원들이 원하는 방향으로 가지 않는 경우, 구성원들의 불만을 해결하지 못한다는 단점을 가지고 있다.<ref name="딩"></ref>
* '''[[트랜잭션 샤딩]]''' : 트랜잭션[[해시]]의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랜잭션의 유효성을 확인하지만, 사용자가 악의적인 경우, 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있고, 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로 간에 통신이 필요하다.<ref name="딩"></ref>
+
* '''트랜잭션 샤딩''' : 트랜잭션[[해시]]의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랜잭션의 유효성을 확인하지만, 사용자가 악의적인 경우, 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있고, 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로 간에 통신이 필요하다.<ref name="딩"></ref>
* '''[[스테이트 샤딩]]''' : 계정 기반 모델(account-based model)로, 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지하지만, 교차분할 트랜잭션을 수행하지 못하도록 제한되고, 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 오프라인 샤드에 대한 트랜잭션의 요 효성을 검사하지 못하게 되는데 오프라인 샤드를 유지하기 위해 백업 노드를 갖게 된다면 중앙집중식이 되어 보안성에 위협되어 네트워크가 한 번씩 재편성될 때 한 번에 네트워크를 전환하게 되면 일부 동기화가 완료될 때까지 전체 시스템을 사용할 수 없게 된다.<ref name="딩"></ref>
+
* '''스테이트 샤딩''' : account-based model로, 상태가 지정된 블록체인에서 이 특정 샤드는 상태의 일부만을 유지하지만, 교차분할 트랜잭션을 수행하지 못하도록 제한되고, 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 오프라인 샤드에 대한 트랜잭션의 요 효성을 검사하지 못하게 되는데 오프라인 샤드를 유지하기 위해 백업 노드를 갖게 된다면 중앙집중식이 되어 보안성에 위협되어 네트워크가 한 번씩 재편성될 때 한 번에 네트워크를 전환하게 되면 일부 동기화가 완료될 때까지 전체 시스템을 사용할 수 없게 된다.<ref name="딩"></ref>
  
 
== 활용 ==
 
== 활용 ==
100번째 줄: 93번째 줄:
 
== 같이 보기 ==
 
== 같이 보기 ==
 
* [[질리카]]
 
* [[질리카]]
* [[로커스체인]]
 
  
 
{{블록체인 기술|검토 필요}}
 
{{블록체인 기술|검토 필요}}

위키원에서의 모든 기여는 다른 기여자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 사항은 위키원:저작권 문서를 보세요). 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 | 편집 도움말 (새 창에서 열림)