"북키퍼"의 두 판 사이의 차이
잔글 (→같이보기) |
잔글 |
||
45번째 줄: | 45번째 줄: | ||
* [[네오]] | * [[네오]] | ||
− | {{블록체인 기술| | + | {{블록체인 기술|검토 필요}} |
2019년 5월 23일 (목) 09:20 판
북키퍼(BookKeeper)는 야후(yahoo)가 2009년에 만들었으며, 2011년에 소스를 오픈했다.
북키퍼는 시스템에서 발생하는 일지(또는 다른 데이터일 수도 있음)를 북키퍼 클러스터에 기록하기 위해 북키퍼라는 제3자 스토리지(Storage)로부터 데이터 저장의 신뢰성과 일치성을 보장하는 기록 시스템이다. 전형적인 경우는 시스템이 write-ahead 로그에 대해 즉 먼저 로그를 북키퍼에 쓴 다음 로그를 처리한다. 예를 들어 메모리의 데이터 구조에 로그를 쓰는 것과 같다. 북키퍼는 임의의 단일 포인트 기입, 고성능과 데이터가 분실(Strong Durabilty Guarantees)되지 않게 보장하도록 요구하는 경우에 동시에 적용된다.[1]
목차
북키퍼 탄생
북키퍼는 Hadoop 2.0의 namenode HA에서 탄생했다. Hadoop에서 고장 복구를 위해 Namenode가 기록을 수정하기 전에 먼저 수정하려고 하는 조항일지를 디스켓에 기록한다. 그러나 문제점이 하나 있는데 바로 Namenode가 고장 났을 때 로컬 디스크도 방문하지 못할 가능성이 높으며, 이때 그 전 기록의 일지도 쓸모없게 된다. 이러한 상황을 고려할 때 Namenode의 일지 정보를 하나의 믿을 수 있는 외부 Storage에 저장할 수 있다. 최초로 업계는 NFS와 같은 Share Storage를 통해 일지를 동기화했다. NFS를 선택하는 이유는 데이터 공유를 편리하게 할 수 있고, NFS가 상대적으로 안정적이고 성숙하기 때문이다. 그럼에도 불구하고 NFS는 HDFS의 온라인 스토리지 업무를 충족시키지 못한다는 단점이 있다. 공유일지의 고가용성을 충족하기 위해 커뮤니티에 북키퍼가 도입되었다. 그 외에도 묵시적인 HA방안인 QJM가 있다.[1]
기본개념
북키퍼
- 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 클러스터의 서브넷 집합이다.[2]
소개
북키퍼(BookKeeper)는 여러 개의 읽고 쓰는 일지를 가진 서버로 북키즈(bookies)라고 한다. 매 하나의 북키즈는 북키퍼의 스토리지 서비스로서 북키퍼에 씌어진 write-ahead 일지와 그 데이터 내용을 저장한다. 로그(log, 북키퍼가 기록한 것은 byte[])는 ledgers라 한다. 하나의 ledger는 하나의 일지 파일이며, 매개 일지의 유닛은 ledger entry이다. 즉 북키즈는 ledgers를 저장하는 것이다. ledger는 append 조작만 지원하며 동시에 단일 트랙만 쓸 수 있다. ZK는 북키퍼의 메타데이터 스토리지 서비스를 담당하며, ZK에서는 현재 사용 가능한 북키즈, ledger의 분포위치 등을 포함하여 ledger 관련 메타데이터를 저장한다.
북키퍼는 여러 개 스토리지 노드를 읽고 쓰는 것을 통해 고가용성을 실현하는 한편, 이상으로 인한 여러 노드 데이터의 불일치를 복구하기 위해 데이터 일관성 알고리즘을 도입했다. 북키퍼의 가용성은 또한 충분히 많은 북키즈를 이용할 수 있는 전체 서비스를 이용할 수 있다는 점에서 구현된다. 실제로 하나의 entry의 기입은 N개의 일지를 N개의 bookie가 성공적으로 기입하도록 확보가 필요하며, N개의 bookie가 서비스를 제공해야 한다. 북키퍼를 작동시킬 때는 하나의 ensemble값, 즉 bookie가 사용할 수 있는 최소 바이트 수를 지정해야 하며, quorums값도 지정해야 한다. 북키퍼의 확장성은 bookie 수량을 늘리고 bookies를 추가하면 읽고 쓰는 양을 높일 수 있게 된다.[1]
북키퍼 응용 사례
- Yahoo CMS(야후 다세대 분산형 콘텐츠 시스템)은 클라우드 콘텐츠 서비스라고도 한다. CMS는 yahoo 내부에서 60개가 넘는 애플리케이션에 사용되며 모바일 스토리지 시스템, 날씨 시스템과 광고 플랫폼, 개성화된 플랫폼, 홈 페이지와 스토리지 시스템이 포함된다.
CMS는 최선의 배달(Best-Effort)과 보증 배달(Guaranteed message delivery)을 제공한다. 배달수요를 보장하려면 네트워크, 디스크 및 서버 고장에 적응하고 대응해야 한다. CMS의 경우 북키퍼를 사용하여 콘텐츠를 저장하며 또한 북키퍼에서 각각의 콘텐츠의 소비 위치를 최소 한 번(at-least-once) 배달 장면에서 보호한다.[1]
- 네오의 합의체계(위임 비잔틴 장애 허용, DBFT, Delegated Byzantine Fault Tolerant)에서 암호화폐를 가진 사람은 투표를 통해 북키퍼(Bookkeeper)를 선택하며 합의체계에 따라 선택된 북키퍼가 협의를 통해 블록을 생성한다. DBFT는 디지털 인증 기술과 결합될 수 있으며 북키퍼가 일반 개인이 될 수도 있지만 기관이 될 수도 있기에 합의를 통해 북키퍼를 동결하거나 취소, 회수, 사법적 조치도 가능하다고 한다.[3]
각주
- ↑ 1.0 1.1 1.2 1.3 wateray, 〈BookKeeper 设计介绍及应用〉, 《CSDN博客》, 2016-06-25
- ↑ 张哈希, 〈BookKeeper 全解(1)-BookKeeper简介和快速上手〉, 《CSDN博客》, 2018-10-16
- ↑ 유병철 기자, 〈네오, 중국판 이더리움…가지고 있으면 이자도 주네〉, 《글로벌이코노믹》, 2018-02-14
참고자료
- wateray, 〈BookKeeper 设计介绍及应用〉, 《CSDN博客》, 2016-06-25
- 张哈希, 〈BookKeeper 全解(1)-BookKeeper简介和快速上手〉, 《CSDN博客》, 2018-10-16
- 유병철 기자, 〈네오, 중국판 이더리움…가지고 있으면 이자도 주네〉, 《글로벌이코노믹》, 2018-02-14
- Matt's Blog, 〈BookKeeper 集群搭建及使用〉, 《酷辣虫 CoLaBug》, 2018-10-19
같이보기