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

"북키퍼"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (북키퍼 응용 사례)
(참고자료)
 
(사용자 4명의 중간 판 38개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''북키퍼'''(BookKeeper)는 야후(yahoo)가 2009년에 만들었으며,  2011년에 소스를 오픈했다.
+
[[파일:네오 글자.png|썸네일|300픽셀|'''[[네오]]'''(NEO)]]
  
북키퍼는 시스템에서 발생하는 일지(또는 다른 데이터일 수도 있음)를 북키퍼 클러스터에 기록하기 위해 북키퍼라는 제3자 스토리지(Storage)로부터 데이터 저장의 신뢰성과 일치성을 보장하는 기록 시스템이다. 전형적인 경우는 시스템이 write-ahead 로그에 대해 즉 먼저 로그를 북키퍼에 쓴 다음 로그를 처리한다. 예를 들어 메모리의 데이터 구조에 로그를 쓰는 것과 같다. 북키퍼는 임의의 단일 포인트 기입, 고성능과 데이터가 분실(Strong Durabilty Guarantees)되지 않게 보장하도록 요구하는 경우에 동시에 적용된다.<ref name="CSDN">wateray, 〈[https://blog.csdn.net/wateray/article/details/51757425 BookKeeper 设计介绍及应用], 《CSDN博客》, 2016-06-25</ref>
+
'''북키퍼'''(BookKeeper)<!--Book Keeper-->는 [[네오]](NEO) 블록체인 네트워크를 구성하는 [[블록 생성자]](BP)를 말한다. 블록 생성자는 블록체인에서 체인의 맨 끝에 새로운 블록을 생성하여 추가할 수 있는 사람을 말하며, 간략히 BP(비피)라고도 한다. [[채굴자]], 암호화폐 보유자, 대표자(증인) 등이 블록 생성자가 될 수 있는데, 네오(NEO)의 경우 이 블록 생성자를 북키퍼라고 부른다. 
  
== 북키퍼 탄생 ==
+
== 북키퍼 선출 ==
북키퍼는 Hadoop 2.0의 namenode HA에서 탄생했다. Hadoop에서 고장 복구를 위해 Namenode가 기록을 수정하기 전에 먼저 수정하려고 하는 조항일지를 디스켓에 기록한다. 그러나 문제점이 하나 있는데 바로 Namenode가 고장 났을 때 로컬 디스크도 방문하지 못할 가능성이 높으며, 이때 그 전 기록의 일지도 쓸모없게 된다. 이러한 상황을 고려할 때 Namenode의 일지 정보를 하나의 믿을 수 있는 외부 Storage에 저장할 수 있다. 최초로 업계는 NFS와 같은 Share Storage를 통해 일지를 동기화했다. NFS를 선택하는 이유는 데이터 공유를 편리하게 할 수 있고, NFS가 상대적으로 안정적이고 성숙하기 때문이다. 그럼에도 불구하고 NFS는 HDFS의 온라인 스토리지 업무를 충족시키지 못한다는 단점이 있다. 공유일지의 고가용성을 충족하기 위해 커뮤니티에 북키퍼가 도입되었다. 그 외에도 묵시적인 HA방안인 QJM가 있다.<ref name="CSDN"></ref>
+
네오 코인을 가진 사람들은 직접적으로 검증에 참여하지 않으며 대신 대표자를 뽑을 수 있는 투표권을 받는데 대표자로 뽑힌 사람들이 블록을 검증하고 생성하는 검증 노드의 역할을 하게 되는데 일명 북키퍼이다.  
  
== 기본개념 ==
+
중국 최초의 암호화폐 네오는 '[[작업증명]](PoW·Proof of Work)' 방식이 아닌 [[위임 비잔틴 장애 허용]](DBFT·Delegated Byzantine Fault Tolerant) 방식을 적용하고 있다. 네오를 보유한 모든 사람들이 투표를 통해 협의체인 북키퍼(노드)를 뽑는다. 비유를 들자면 국민들이 국회의원을 뽑고, 국회의원들이 나라의 일을 결정하는 대의 민주주의와 비슷하다고 보면 된다.  
=== 북키퍼 ===
 
* entry – 매개 일지
 
* ledgers – 일지의 흐름
 
* bookies – 매개 독립적으로 ledges를 저장하는 서버
 
=== Entries ===
 
Entries는 진정한 데이터를 포함하고 있으며 그중 일부 메타데이터를 포함하고 있다.  
 
매개의 entry는 아래와 같은 fields이 있다.
 
=== Ledgers ===
 
Leggers는 북키퍼에 있는 기본 메모리 유닛이다.
 
Leggers는 한 그룹의 Entries로, 각각의 Entry에는 질서가 있으며 Leggers에 한번만 기입할 수 있다. 일단 Leggers에 기입하면 더 이상 수정할 수 없다. 그러므로 순차적인 쓰기를 유지하는 것은 클라이언트 애플리케이션이 고려해야 할 부분이다.
 
=== Bookies와 Ensemble ===
 
Bookie는 독립적인 북키퍼 서버로, Leggers 스크립트를 처리한다. (각 Bookie는 각 Ledgers의 필드를 저장하며 완전한 Ledgers가 아니기 때문이다)
 
하나의 Ensemble은 하나의 Bookies 집합이며 이들은 하나의 Legger에 대한 모든 entries를 공동으로 저장한다. 보통 하나의 Ensemble은 전체 Bookies 클러스터의 서브넷 집합이다.<ref>张哈希, 〈[https://blog.csdn.net/zhxdick/article/details/83090190 BookKeeper 全解(1)-BookKeeper简介和快速上手]〉, 《CSDN博客》, 2018-10-16</ref>
 
  
== 소개 ==
+
네오 플랫폼에서 대표자로 뽑힌 사람들의 3분의 2가 찬성하면 거래내역을 의미하는 블록이 생성되고 블록체인에 연결되는 방식이다.이러한 이유로 네오 블록체인에서는 한번에 두개의 블록이 생성되어 포크가 일어날 수 없게 된다. 정확한 데이터를 기록해야 하는 기업들에게는 네오가 매력적인 플랫폼으로 다가올 수 밖에 없다. 만약 노드가 맘에 들지 않을 경우 네오의 보유자들은 투표를 통해 노드를 바꿀 수 있다.<ref>kimjaeh9, 〈[https://steemit.com/coinkorea/@kimjaeh9/7 네오(NEO)는 무엇인가?]〉, ''Steemit'', 2018-04-30</ref>
북키퍼(BookKeeper)는 여러 개의 읽고 쓰는 일지를 가진 서버로 북키즈(bookies)라고 한다. 매 하나의 북키즈는 북키퍼의 스토리지 서비스로서 북키퍼에 씌어진 write-ahead 일지와 데이터 내용을 저장한다. 로그(log, 북키퍼가 기록한 것은 byte[])는 ledgers라 한다. 하나의 ledger는 하나의 일지 파일이며, 매개 일지의 유닛은 ledger entry이다. 즉 북키즈는 ledgers를 저장하는 것이다. ledger는 append 조작만 지원하며 동시에 단일 트랙만 쓸 수 있다. ZK는 북키퍼의 메타데이터 스토리지 서비스를 담당하며, ZK에서는 현재 사용 가능한 북키즈, ledger의 분포위치 등을 포함하여 ledger 관련 메타데이터를 저장한다.
 
  
북키퍼는 여러 개 스토리지 노드를 읽고 쓰는 것을 통해 고가용성을 실현하는 한편, 이상으로 인한 여러 노드 데이터의 불일치를 복구하기 위해 데이터 일관성 알고리즘을 도입했다.
+
DBFT는 디지털 인증 기술과 결합될 수 있으며 북키퍼가 일반 개인이 될 수도 있지만 기관이 될 수도 있기에 합의를 통해 북키퍼를 동결하거나 취소, 회수, 사법적 조치도 가능하다고 한다.<ref>유병철 기자, 〈[http://news.g-enews.com/view.php?ud=201802121809505698581e5800d6_1&md=20180213175246_K 네오, 중국판 이더리움…가지고 있으면 이자도 주네]〉, 《글로벌이코노믹》, 2018-02-14</ref>
북키퍼의 가용성은 또한 충분히 많은 북키즈를 이용할 수 있는 전체 서비스를 이용할 수 있다는 점에서 구현된다. 실제로 하나의 entry의 기입은 N개의 일지를 N개의 bookie가 성공적으로 기입하도록 확보가 필요하며, N개의 bookie가 서비스를 제공해야 한다. 북키퍼를 작동시킬 때는 하나의 ensemble값, 즉 bookie가 사용할 수 있는 최소 바이트 수를 지정해야 하며, quorums값도 지정해야 한다. 북키퍼의 확장성은 bookie 수량을 늘리고 bookies를 추가하면 읽고 쓰는 양을 높일 수 있게 된다.<ref name="CSDN"></ref>
 
  
== 북키퍼 응용 사례 ==
+
== DBFT 2.0 ==
* [[Yahoo]] CMS(야후  다세대 분산형 콘텐츠 시스템)은 클라우드 콘텐츠 서비스라고도 한다. CMS는 yahoo 내부에서 60개가 넘는 애플리케이션에 사용되며 모바일 스토리지 시스템, 날씨 시스템과 광고 플랫폼, 개성화된 플랫폼, 홈 페이지와 스토리지 시스템이 포함된다.  
+
=== 배경 ===
CMS는 최선의 배달(Best-Effort)과 보증 배달(Guaranteed message delivery)을 제공한다. 배달수요를 보장하려면 네트워크, 디스크 및 서버 고장에 적응하고 대응해야 한다. CMS의 경우 북키퍼를 사용하여 콘텐츠를 저장하며 또한 북키퍼에서 각각의 콘텐츠의 소비 위치를 최소 한 번(at-least-once) 배달 장면에서 보호한다.<ref name="CSDN"></ref>
+
네오(NEO)의 DBFT 1.0 알고리즘은 드물게 [[네트워크]] 지연 시간에서 단일 블록 [[포크]]에 취약했다. 이 문제는 꽤 오랫동안 알려져 왔고 문서화되었다. [[노드]]가 PrepareResponse 메시지를 보낸 후 시간 초과하도록 허용되었기 때문에 분기 된 블록이 발생할 수 있다. 이 문제는 [[블록 스포크]](Block spork)라고 불린다. 이 문제는 합의를 지연시키지 않고 발생할 수 있지만, 많은 네오 전체 네트워크 노드는 잠재적으로 이식된 블록을 수용하고 정지할 수 있으며, 결국 최종 사용자가 의존하는 네트워크 노드와의 운영 문제로 이어질 수 있었다.
* [[네오]]의 합의체계([[위임 비잔틴 장애 허용]], DBFT, Delegated Byzantine Fault Tolerant)에서 암호화폐를 가진 사람은 투표를 통해 북키퍼(Bookkeeper)를 선택하며 합의체계에 따라 선택된 북키퍼가 협의를 통해 블록을 생성한다. DBFT는 디지털 인증 기술과 결합될 수 있으며 북키퍼가 일반 개인이 될 수도 있지만 기관이 될 수도 있기에 합의를 통해 북키퍼를 동결하거나 취소, 회수, 사법적 조치도 가능하다고 한다.<ref>유병철 기자, 〈[http://news.g-enews.com/view.php?ud=201802121809505698581e5800d6_1&md=20180213175246_K 네오, 중국판 이더리움…가지고 있으면 이자도 주네]〉, 《글로벌이코노믹》, 2018-02-14</ref>
+
 
 +
=== 문제 해결 ===
 +
DBFT 2.0 에서는 [[PBFT]](Practical Byzantine Fault Tolerance) 문서에 기술된 것과 유사한 커밋 단계를 추가하여 이 문제를 해결했다. 네트워크 스톨을 방지하기 위해 DBFT 2.0은 합의 프로토콜에 복구 메시지 구현도 추가한다. 복구 메커니즘은 합의된 노드와 함께 다양한 작동 문제가 발생할 경우 블록 시간을 개선하는 추가적인 이점을 갖는다. DBFT 2.0 구현은 합의 노드의 잘못된 동작을 감사할 수 있는 가시성을 제공한다. CN(Consensus 노드)은 발생한 모든 커밋을 추적하고 다른 CN이 주어진 높이에서 하나 이상의 잠재적 블록에 서명하도록 커밋 할 수 없도록 한다. CN 합의 로그는 CN이 정보를 CN 노드 운영자는 물론 컨센서스 감시 전용 모드를 활성화하는 모든 노드에서 이 정보를 즉시 사용할 수 있도록 한다.
 +
 
 +
=== 테스트 및 품질 보증 ===
 +
DBFT 2.0 구현의 품질을 보장하기 위해 코드 변경은 여러 단계의 테스트를 거쳤다. 네오 핵심 개발자는 사설망에서 네오의 [[P2P]] 플러그인을 사용하여 네트워크 장애를 시뮬레이터 하는 광범위한 테스트를 수행했다. [[NGD]]가 관리하는 사설망에서도 유사한 자동화 및 수동 테스트가 수행되었다. 마지막으로 코드는 [[네오 퍼블릭 테스트넷]](Neo public TestNet)에서 테스트 되었다.
 +
 
 +
== 생성 시간 및 처리량 ==
 +
매 블록 생성 시간은 15~20초가 소요되며 평균처리 속도는 1,000TPS이다. 다른 암호화폐 처리량을 보면 비트코인은 7TPS, 이더리움은 15~20TPS 수준이고, 이오스는 3,000~4,000TPS이다.<ref>부자아빠, 〈[https://cobak.co.kr/community/16/post/210626 (펌)개발자의 시선) 좋은 블록체인의 기준은 무엇일까]〉, 《코박》, 2019-07-09</ref>
 +
 
 +
== 문제점 ==
 +
현재 네오 투표 시스템에는 1개의 네오 토큰이 1표이고 자체 투표에 최소 1000개의 네오 토큰이 필요한 결함이 있지만 각 북키퍼는 선택 후 한 표의 투표권을 갖는다. [[카르텔]]은 각각에 동의하고 서로 투표 할 수 있다. <ref>thellimist, 〈[https://github.com/thellimist/bitses_public/blob/master/coins/Neo.md 네오]〉, 《GitHub》, 2018-07-14</ref>
  
 
{{각주}}
 
{{각주}}
  
 
== 참고자료 ==
 
== 참고자료 ==
* wateray, 〈[https://blog.csdn.net/wateray/article/details/51757425 BookKeeper 设计介绍及应用]〉, 《CSDN博客》, 2016-06-25
+
* kimjaeh9, 〈[https://steemit.com/coinkorea/@kimjaeh9/7 네오(NEO)는 무엇인가?]〉, 《스팀잇》, 2018-04-30
* 张哈希, 〈[https://blog.csdn.net/zhxdick/article/details/83090190 BookKeeper 全解(1)-BookKeeper简介和快速上手]〉, 《CSDN博客》, 2018-10-16
 
 
* 유병철 기자, 〈[http://news.g-enews.com/view.php?ud=201802121809505698581e5800d6_1&md=20180213175246_K 네오, 중국판 이더리움…가지고 있으면 이자도 주네]〉, 《글로벌이코노믹》, 2018-02-14
 
* 유병철 기자, 〈[http://news.g-enews.com/view.php?ud=201802121809505698581e5800d6_1&md=20180213175246_K 네오, 중국판 이더리움…가지고 있으면 이자도 주네]〉, 《글로벌이코노믹》, 2018-02-14
* Matt's Blog, 〈[https://www.colabug.com/4965202.html BookKeeper 集群搭建及使用]〉, 《酷辣虫 CoLaBug》, 2018-10-19
+
* Jeff s, 〈[https://medium.com/neo-smart-economy/neos-dbft-2-0-single-block-finality-with-improved-availability-6a4aca7bd1c4 NEO's dBFT 2.0-Single Block Finality with Improved Availability]〉, 《미디엄》, 2019-06-05
 +
* thellimist, 〈[https://github.com/thellimist/bitses_public/blob/master/coins/Neo.md 네오]〉, 《깃허브》, 2018-07-14
 +
* 〈[https://namu.wiki/w/NEO(%EC%95%94%ED%98%B8%ED%99%94%ED%8F%90) NEO(암호화폐)]〉, 《나무위키》
  
== 같이보기 ==
+
== 같이 보기 ==
* [[위임된 비잔틴 장애 허용]]
+
* [[위임 비잔틴 장애 허용]]
* [[Yahoo]]
+
* [[블록 생성자]]
 +
* [[채굴자]]
 
* [[네오]]
 
* [[네오]]
  
{{블록체인 기술|토막글}}
+
{{블록체인 기술|검토 필요}}

2019년 8월 6일 (화) 10:17 기준 최신판

네오(NEO)

북키퍼(BookKeeper)는 네오(NEO) 블록체인 네트워크를 구성하는 블록 생성자(BP)를 말한다. 블록 생성자는 블록체인에서 체인의 맨 끝에 새로운 블록을 생성하여 추가할 수 있는 사람을 말하며, 간략히 BP(비피)라고도 한다. 채굴자, 암호화폐 보유자, 대표자(증인) 등이 블록 생성자가 될 수 있는데, 네오(NEO)의 경우 이 블록 생성자를 북키퍼라고 부른다.

북키퍼 선출[편집]

네오 코인을 가진 사람들은 직접적으로 검증에 참여하지 않으며 대신 대표자를 뽑을 수 있는 투표권을 받는데 대표자로 뽑힌 사람들이 블록을 검증하고 생성하는 검증 노드의 역할을 하게 되는데 일명 북키퍼이다.

중국 최초의 암호화폐 네오는 '작업증명(PoW·Proof of Work)' 방식이 아닌 위임 비잔틴 장애 허용(DBFT·Delegated Byzantine Fault Tolerant) 방식을 적용하고 있다. 네오를 보유한 모든 사람들이 투표를 통해 협의체인 북키퍼(노드)를 뽑는다. 비유를 들자면 국민들이 국회의원을 뽑고, 국회의원들이 나라의 일을 결정하는 대의 민주주의와 비슷하다고 보면 된다.

네오 플랫폼에서 대표자로 뽑힌 사람들의 3분의 2가 찬성하면 거래내역을 의미하는 그 블록이 생성되고 블록체인에 연결되는 방식이다.이러한 이유로 네오 블록체인에서는 한번에 두개의 블록이 생성되어 포크가 일어날 수 없게 된다. 정확한 데이터를 기록해야 하는 기업들에게는 네오가 매력적인 플랫폼으로 다가올 수 밖에 없다. 만약 노드가 맘에 들지 않을 경우 네오의 보유자들은 투표를 통해 노드를 바꿀 수 있다.[1]

DBFT는 디지털 인증 기술과 결합될 수 있으며 북키퍼가 일반 개인이 될 수도 있지만 기관이 될 수도 있기에 합의를 통해 북키퍼를 동결하거나 취소, 회수, 사법적 조치도 가능하다고 한다.[2]

DBFT 2.0[편집]

배경[편집]

네오(NEO)의 DBFT 1.0 알고리즘은 드물게 네트워크 지연 시간에서 단일 블록 포크에 취약했다. 이 문제는 꽤 오랫동안 알려져 왔고 문서화되었다. 노드가 PrepareResponse 메시지를 보낸 후 시간 초과하도록 허용되었기 때문에 분기 된 블록이 발생할 수 있다. 이 문제는 블록 스포크(Block spork)라고 불린다. 이 문제는 합의를 지연시키지 않고 발생할 수 있지만, 많은 네오 전체 네트워크 노드는 잠재적으로 이식된 블록을 수용하고 정지할 수 있으며, 결국 최종 사용자가 의존하는 네트워크 노드와의 운영 문제로 이어질 수 있었다.

문제 해결[편집]

DBFT 2.0 에서는 PBFT(Practical Byzantine Fault Tolerance) 문서에 기술된 것과 유사한 커밋 단계를 추가하여 이 문제를 해결했다. 네트워크 스톨을 방지하기 위해 DBFT 2.0은 합의 프로토콜에 복구 메시지 구현도 추가한다. 복구 메커니즘은 합의된 노드와 함께 다양한 작동 문제가 발생할 경우 블록 시간을 개선하는 추가적인 이점을 갖는다. DBFT 2.0 구현은 합의 노드의 잘못된 동작을 감사할 수 있는 가시성을 제공한다. CN(Consensus 노드)은 발생한 모든 커밋을 추적하고 다른 CN이 주어진 높이에서 하나 이상의 잠재적 블록에 서명하도록 커밋 할 수 없도록 한다. CN 합의 로그는 CN이 정보를 CN 노드 운영자는 물론 컨센서스 감시 전용 모드를 활성화하는 모든 노드에서 이 정보를 즉시 사용할 수 있도록 한다.

테스트 및 품질 보증[편집]

DBFT 2.0 구현의 품질을 보장하기 위해 코드 변경은 여러 단계의 테스트를 거쳤다. 네오 핵심 개발자는 사설망에서 네오의 P2P 플러그인을 사용하여 네트워크 장애를 시뮬레이터 하는 광범위한 테스트를 수행했다. NGD가 관리하는 사설망에서도 유사한 자동화 및 수동 테스트가 수행되었다. 마지막으로 코드는 네오 퍼블릭 테스트넷(Neo public TestNet)에서 테스트 되었다.

생성 시간 및 처리량[편집]

매 블록 생성 시간은 15~20초가 소요되며 평균처리 속도는 1,000TPS이다. 다른 암호화폐 처리량을 보면 비트코인은 7TPS, 이더리움은 15~20TPS 수준이고, 이오스는 3,000~4,000TPS이다.[3]

문제점[편집]

현재 네오 투표 시스템에는 1개의 네오 토큰이 1표이고 자체 투표에 최소 1000개의 네오 토큰이 필요한 결함이 있지만 각 북키퍼는 선택 후 한 표의 투표권을 갖는다. 카르텔은 각각에 동의하고 서로 투표 할 수 있다. [4]

각주[편집]

  1. kimjaeh9, 〈네오(NEO)는 무엇인가?〉, Steemit, 2018-04-30
  2. 유병철 기자, 〈네오, 중국판 이더리움…가지고 있으면 이자도 주네〉, 《글로벌이코노믹》, 2018-02-14
  3. 부자아빠, 〈(펌)개발자의 시선) 좋은 블록체인의 기준은 무엇일까〉, 《코박》, 2019-07-09
  4. thellimist, 〈네오〉, 《GitHub》, 2018-07-14

참고자료[편집]

같이 보기[편집]


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