KR102314495B1 - 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템 - Google Patents

라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템 Download PDF

Info

Publication number
KR102314495B1
KR102314495B1 KR1020200000788A KR20200000788A KR102314495B1 KR 102314495 B1 KR102314495 B1 KR 102314495B1 KR 1020200000788 A KR1020200000788 A KR 1020200000788A KR 20200000788 A KR20200000788 A KR 20200000788A KR 102314495 B1 KR102314495 B1 KR 102314495B1
Authority
KR
South Korea
Prior art keywords
log
node
new
block
new node
Prior art date
Application number
KR1020200000788A
Other languages
English (en)
Other versions
KR20210087721A (ko
Inventor
안재석
Original Assignee
주식회사 블로코
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 블로코 filed Critical 주식회사 블로코
Priority to KR1020200000788A priority Critical patent/KR102314495B1/ko
Publication of KR20210087721A publication Critical patent/KR20210087721A/ko
Application granted granted Critical
Publication of KR102314495B1 publication Critical patent/KR102314495B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/128Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1065Discovery involving distributed pre-established resource-based relationships among peers, e.g. based on distributed hash tables [DHT] 

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명은 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템에 관한 것으로서, 더욱 상세히는 라프트 합의를 이용한 블록체인 시스템 운영 과정에서 상기 블록 체인 시스템에 신규 노드 참여시 해당 신규 노드에 전송되는 로그로 인한 부하를 감소시켜 신규 노드의 동기화에 대한 효율성을 높일 수 있는 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템에 관한 것이다. 본 발명은 라프트 합의를 이용한 블록체인 운영시 신규 노드가 참여하거나 신규 노드가 장시간 동안 오프 상태에서 온 상태로 전환한 경우 라프트 합의에 의해 선출된 리더 노드가 신규 노드가 수신하지 못한 대량의 로그들을 신규 노드에 모두 전송하는 비효율적인 동기화 과정을 거치지 않고, 상기 리더 노드의 메모리 상에 저장되는 로그 엔트리가 소정의 개수 초과시마다 갱신되는 로그 저장 상태에 대한 스냅샷 로그를 신규 노드에 제공하면 신규 노드에서 상기 스냅샷 로그를 기초로 동기화하지 않은 블록별 블록 해시값을 리더 노드로부터 수집한 후 이를 블록 체인에 참여하는 다수의 팔로워 노드에게 분할 전송하고, 다수의 팔로워 노드로부터 동기화되지 않은 블록들을 분산하여 수집하여 동기화함으로써 기존에 리더 노드에게 집중되는 동기화 부하를 다수의 팔로워 노드에 분산하여 다수의 팔로워 노드가 신규 노드의 동기화 과정에 협업하여 참여하도록 지원할 수 있어 리더 노드의 부하를 방지함과 아울러 신규 노드의 블록체인 참여시에도 신속한 동기화를 통해 블록체인 시스템의 효율성을 유지할 수 있는 효과가 있다.

Description

라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템{Blockchain synchronization method using Raft and blockchain system using the same}
본 발명은 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템에 관한 것으로서, 더욱 상세히는 라프트 합의를 이용한 블록체인 시스템 운영 과정에서 상기 블록 체인 시스템에 신규 노드 참여시 해당 신규 노드에 전송되는 로그로 인한 부하를 감소시켜 신규 노드의 동기화에 대한 효율성을 높일 수 있는 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템에 관한 것이다.
최근 블록체인 시스템이 보안 분야에서 각광 받고 있으며, 이러한 블록체인 시스템은 일반적으로 블록 생성 주체 결정을 위해 작업 증명과 같은 합의 알고리즘이 사용되고 있다.
그러나, 이러한 작업 증명과 같은 합의 알고리즘은 낮은 처리량, 에너지 낭비, 분기 발생과 같은 문제가 존재함으로 인해 보안이 확보되지 않은 퍼블릭 네트워크(public network)에 적합하나, 기업의 서비스 환경과 같이 참여 노드의 신뢰성이 보장된 프라이빗 네트워크(private network)에서 적용되는 블록체인 시스템에서 작업 증명과 같은 알고리즘은 효율성이 높지 않다.
따라서, 최근 프라이빗 네트워크에서 블록 체인 시스템에 라프트 합의를 적용하여 블록체인 시스템의 효율을 높이는 시도가 있다.
이러한 라프트 합의는 일반적으로 기간을 의미하는 시대별로 블록체인에 참여하는 복수의 노드 중에서 블록 생성 권한을 가진 노드인 리더가 결정되며, 해당 리더에 블록 생성 권한이 해당 리더의 시대에 해당되는 기간 동안 전적으로 부여되는 방식으로 결정되어 참여 노드의 수가 제한적인 블록 체인 시스템의 효율성을 높이고 있다.
또한, 라프트 합의 방식이 적용된 블록 체인 시스템에서의 리더 노드는 해당 리더 노드가 리더로서 동작하는 시대(term) 동안 발생한 트랜잭션에 대응되는 블록과 더불어 블록이 생성된 주기의 시스템 운영 정보를 포함하는 로그를 생성하고, 해당 로그에 블록을 포함시킨 후 로그를 다른 노드에게 전송한다.
그러나, 이러한 라프트 합의로 운영되는 블록체인 시스템에 있어서, 신규 노드가 참여하는 경우 신규 노드가 블록체인 시스템에 참여하지 않은 기간 동안 발생한 로그를 모두 수신해야 한다.
이로 인해, 상기 신규 노드의 참여로 대량의 로그 전송이 필요한 경우 리더 노드의 부하가 증가하여 신규 노드 뿐만 아니라 기존 노드에게 로그를 전송하는데에도 지장을 받게 되며, 이로 인해 리더 노드로부터 로그를 전송받는 기존 노드들 역시 피해를 받게 되어 블록체인 시스템의 운영 효율성이 저하되는 문제가 발생한다.
한국등록특허 제10-2017739호
본 발명은 블록체인에 라프트 합의가 적용된 블록체인에 신규로 참여하거나 장시간 동안 오프 상태를 유지하다가 온 상태로 전환하여 블록 체인에 참여한 신규 노드에 대해 리더 노드가 신규 노드가 블록체인에 참여하지 못한 기간 동안 발생한 대량의 로그를 전송하여 동기화하는 과정에서 발생하는 문제를 해결하여 리더 노드의 부하를 줄일 수 있도록 하는데 그 목적이 있다.
또한, 본 발명은 신규 노드의 동기화 과정에서 발생하는 부하를 감소시킴과 아울러 동기화 과정에서 블록체인을 구성하는 블록들이 정확하게 연결되도록 하여 블록체인 본연의 보안성을 보장하는데 그 목적이 있다.
본 발명의 실시예에 따른 복수의 서로 다른 단말 상호간 네트워크를 통해 연결되며, 상기 단말이 블록체인의 노드로서 동작하기 위한 어플리케이션부가 상기 복수의 서로 다른 단말 각각에 구성된 블록체인 시스템에서 라프트 합의를 이용한 블록체인 동기화 방법은, 상기 복수의 단말 중 상기 라프트 합의를 통해 리더 노드로 선출된 단말의 어플리케이션부가 신규 블록을 포함하는 신규 로그를 전송하는 공유 단계와, 상기 블록체인 시스템에 신규로 참여하거나 다시 참여한 단말인 신규 노드의 어플리케이션부가 상기 신규 로그와 상기 신규 노드에 가장 마지막에 저장된 기존 로그를 비교하여 상기 신규 로그의 저장 차례가 아닌 경우 거부 정보를 전송하는 요청 단계와, 상기 리더 노드의 어플리케이션부가 상기 거부 정보에 대응되어 상기 신규 로그 이전에 생성된 최신 로그 및 상기 최신 로그가 적용된 최신 블록 정보가 포함된 스냅샷 로그를 상기 신규 노드에 전송하는 스냅샷 전송 단계 및 상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그 수신시 상기 신규 노드에 미리 저장된 블록체인을 위한 공유 원장의 가장 마지막 블록의 다음 블록부터 상기 최신 블록 정보에 대응되는 최신 블록까지의 블록별 해시값을 상기 리더 노드에 요청하여 수신하고, 상기 블록체인 시스템을 구성하는 상기 리더 노드를 제외한 모든 팔로워 노드에게 상기 블록별 해시값을 미리 설정된 개수로 분할 전송하며, 상기 블록별 해시값에 대응되어 상기 팔로워 노드 각각으로부터 분산 수집된 블록을 순서대로 상기 공유 원장에 저장하여 동기화하는 동기화 단계를 포함할 수 있다.
본 발명과 관련된 일 예로서, 상기 스냅샷 전송 단계는 상기 리더 노드의 어플리케이션부가 상기 신규 노드로부터 상기 거부 정보 수신시 상기 거부 정보를 기초로 상기 신규 노드에 대응되어 식별된 로그가 상기 리더 노드의 메모리에 저장된 로그 엔트리에 포함되지 않은 경우 상기 스냅샷 로그를 전송하고, 상기 신규 노드에 대응되어 식별된 로그가 상기 리더 노드의 메모리에 저장된 상기 로그 엔트리에 포함된 경우 상기 신규 노드에 대응되어 식별된 로그부터 상기 로그 엔트리에 포함되는 하나 이상의 로그를 상기 메모리에 저장된 저장 순서대로 상기 리더 노드의 메모리로부터 추출하여 상기 신규 노드에 전송하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
본 발명과 관련된 일 예로서, 상기 동기화 단계는 상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그 수신시 상기 리더 노드를 제외한 모든 팔로워 노드와 각각 P2P 연결을 수행하는 단계 및 상기 신규 노드의 어플리케이션부가 상기 P2P를 통해 상기 모든 팔로워 노드 각각으로부터 팔로워 노드별로 전송한 블록별 해시값에 대응되는 블록을 상기 블록별 해시값을 수신한 팔로워 노드로부터 수신하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
본 발명과 관련된 일 예로서, 상기 동기화 단계 이후 상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그를 상기 신규 노드에 저장하고, 상기 리더 노드로부터 상기 스냅샷 로그에 포함되지 않은 상기 신규 로그를 수신하여 저장하고, 상기 신규 로그를 기초로 상기 공유 원장을 타 노드의 공유 원장과 동기화하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
본 발명과 관련된 일 예로서, 상기 동기화 단계는 상기 신규 노드의 어플리케이션부가 상기 블록 수신 도중 상기 팔로워 노드와의 연결에 실패한 경우 상기 공유 원장에서 동기화 완료된 블록을 확인하고, 상기 스냅샷 로그를 이용하여 상기 동기화 완료된 블록 이후의 블록부터 동기화를 수행하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
본 발명의 실시예에 따른 네트워크를 통해 상호 연결된 복수의 서로 다른 단말 각각에 구성되며, 상기 단말이 블록체인의 노드로서 동작하기 위한 라프트 합의 알고리즘이 설정된 어플리케이션부를 포함하는 블록체인 시스템은, 상기 복수의 단말 중 상기 라프트 합의를 통해 리더 노드로 선출된 단말의 어플리케이션부는 신규 블록을 포함하는 신규 로그를 상기 블록체인 시스템에 신규로 참여하거나 다시 참여한 단말인 신규 노드로 전송하고, 상기 신규 노드로부터 거부 정보 수신시 상기 신규 로그 이전의 최신 로그 및 상기 최신 로그가 적용된 최신 블록 정보를 포함하는 스냅샷 로그를 미리 설정된 기준에 따라 상기 신규 노드에 선택적으로 전송하며, 상기 신규 노드의 어플리케이션부는 상기 신규 로그 최초 수신시 상기 신규 로그와 상기 신규 노드에 가장 마지막에 저장된 기존 로그를 비교하여 상기 신규 로그의 저장 차례가 아닌 경우 상기 거부 정보를 전송하고, 상기 거부 정보에 대응되어 상기 스냅샷 로그 수신시 상기 신규 노드에 미리 저장된 블록체인을 위한 공유 원장의 가장 마지막 블록의 다음 블록부터 상기 최신 블록 정보에 대응되는 최신 블록까지의 블록별 해시값을 상기 리더 노드에 요청하여 수신하고, 상기 블록체인 시스템을 구성하는 상기 리더 노드를 제외한 모든 팔로워 노드에게 상기 블록별 해시값을 미리 설정된 개수로 분할 전송하며, 상기 블록별 해시값에 대응되어 상기 팔로워 노드 각각으로부터 분산 수집된 블록을 순서대로 상기 공유 원장에 저장하여 동기화하는 것을 특징으로 할 수 있다.
본 발명은 라프트 합의를 이용한 블록체인 운영시 신규 노드가 참여하거나 신규 노드가 장시간 동안 오프 상태에서 온 상태로 전환한 경우 라프트 합의에 의해 선출된 리더 노드가 신규 노드가 수신하지 못한 대량의 로그들을 신규 노드에 모두 전송하는 비효율적인 동기화 과정을 거치지 않고, 상기 리더 노드의 메모리 상에 저장되는 로그 엔트리가 소정의 개수 초과시마다 갱신되는 로그 저장 상태에 대한 스냅샷 로그를 신규 노드에 제공하면 신규 노드에서 상기 스냅샷 로그를 기초로 동기화하지 않은 블록별 블록 해시값을 리더 노드로부터 수집한 후 이를 블록 체인에 참여하는 다수의 팔로워 노드에게 분할 전송하고, 다수의 팔로워 노드로부터 동기화되지 않은 블록들을 분산하여 수집하여 동기화함으로써 기존에 리더 노드에게 집중되는 동기화 부하를 다수의 팔로워 노드에 분산하여 다수의 팔로워 노드가 신규 노드의 동기화 과정에 협업하여 참여하도록 지원할 수 있어 리더 노드의 부하를 방지함과 아울러 신규 노드의 블록체인 참여시에도 신속한 동기화를 통해 블록체인 시스템의 효율성을 유지할 수 있는 효과가 있다.
또한, 본 발명은 신규 노드의 동기화 과정에서 발생하는 부하를 감소시킴과 아울러 동기화 과정에서 블록체인을 구성하는 블록들이 정확하게 연결되도록 하여 블록체인 본연의 보안성을 보장하는 효과가 있다.
도 1은 본 발명의 실시예에 따른 라프트 합의를 이용한 블록체인 시스템의 구성도.
도 2는 본 발명의 실시예에 따른 라프트 합의를 이용한 블록체인 동기화 방법에 대한 순서도.
도 3 내지 6은 본 발명의 실시예에 따른 라프트 합의를 이용한 블록체인 시스템의 동작 예시도.
이하, 도면을 참고하여 본 발명의 상세 실시예를 설명한다.
설명에 앞서, 본 발명에 적용되는 라프트와 관련하여 간단히 설명한다.
본 발명은 블록체인(Blockchain) 시스템에서 합의 알고리즘에 관련된 기술이다. 블록 체인의 합의 알고리즘으로 라프트(RAFT) 합의를 적용하였을 때 로그(Log)가 계속해서 늘어 나는 경우 이에 대한 처리 방법을 제안 한다.
즉, 본 발명은 블록체인에 라프트 합의가 적용된 블록체인에 신규 참여한 신규 노드에 대해 리더 노드가 신규 노드가 블록체인에 참여하지 못한 기간 동안 발생한 대량의 로그에 대응되어 동기화하는 과정에서 발생하는 문제를 해결하여 리더 노드의 부하를 줄일 수 있도록 한다.
이때, 본 발명에서 설명하는 신규 노드란 블록 체인에 처음 참여하는 노드 뿐만 아니라 기존에 블록 체인에 참여한 이후 장시간 동안 꺼져 있는 상태(또는 오프(OFF) 상태)에서 다시 시작하여 온(ON) 상태로 전환되어 블록 체인에 다시 참여한 노드(대량의 로그 동기화가 필요한 노드) 역시 포함하며, 이외에도 로그를 대량으로 동기화할 필요가 있는 다양한 상태의 노드도 포함한다.
우선, 블록체인 시스템에서는 네트워크로 연결된 여러 대의 노드(node)들이 동일한 블록의 리스트를 확장 시켜 나가기 위해 노드들 사이의 프로토콜(protocol)이 필요하다. 이를, 블록체인의 합의 알고리즘 이라고 한다.
가장 널리 알려진 블록체인 합의 알고리즘은 비트코인(Bitcoin), 이더리움(Ethereum)에 사용된 작업 증명(POW: Proof of work)이며, 이러한 작업 증명에는 낮은 처리량, 에너지 낭비, 분기가 발생가능 한 문제와 같은 단점이 존재하고, 따라서 이러한 작업증명은 보안이 확보되지 않은 퍼블릭 네트워크(public network)에 적합한 합의 알고리즘 이다.
이에 대한 대안으로 PBFT, POS, DPOS, PAXOS, RAFT등의 합의(consensus) 알고리즘이 존재한다.
이중 라프트(RAFT) 합의(또는 라프트, 또는 라프트 합의 알고리즘)는 기업의 서비스 환경과 같이 블록체인 시스템에 참여하는 노드의 신뢰성이 보장된 프라이빗 네트워크(private network)에서 최적화된 합의로 프로토콜(protocol)이 쉽고 효율적이며, 비잔틴 장애 허용(BFT: Byzantine Fault Tolerance)을 고려하지 않은 대신 기존 합의 알고리즘 보다 속도를 높인 CFT(Crash Fault Tolerance) 방식의 합의 알고리즘이다. 하지만, POW, POS, PBFT와 같은 합의 알고리즘과 달리 모든 노드가 정직하게 동작한다는 가정하에 동작한다는 특징을 가진다.
라프트(RAFT)는 네트워크로 연결된 여러대의 노드들이 동일한 로그(Log)를 적용 시키도록 관리하는 합의 알고리즘이다.
라프트를 이용하는 분산 key/value 저장소라면 로그에 key/value를 담아 이를 적용하게 할 것이다.
라프트를 블록 체인에 이용하기 위해서는 로그에 블록(Block)을 담아 합의를 이루게 하여 전체 노드들이 동일한 블록을 추가시켜 나갈수 있게 한다.
라프트 상에서 블록체인 시스템을 구성하는 노드는 리더(Leader), 팔로워(Follower), 후보(Candidate)의 3가지 상태 중 하나를 가진다.
이중 블록(Block)을 생성하고 이를 로그로 만드는 일을 하는 역할은 리더(Leader)만이 수행할 수 있다.
팔로워(Follower)는 리더(Leader)의 지시대로 로그에 포함된 블록을 적용하는 일만 수행하고, 후보(Candidate)는 리더(Leader)에 문제가 생겼을 때 팔로워(Follower)가 새로운 리더(Leader)가 되기 위한 선출 과정에서 필요한 상태이다.
라프트 합의는 크게 다음 과정을 거쳐 각 로그에 대한 합의 과정을 거친다.
리더 노드가 트랜잭션(Transaction)을 모아 블럭을 생성하고, 해당 블록을 로그에 담아 모든 노드(Follower) 들에 전송한다.
이에 따라, 각 팔로워 노드는 블록을 검증하고 저장소에 저장 후 확인 메시지를 리더 노드에게 전송한다.
또한, 리더 노드는 과반수의 팔로워 노드로부터 확인 메시지 응답을 받으면 이 로그의 블럭이 확정 완료(commit)된 것으로 처리하여 블록체인(공유 원장)에 추가할 수 있다.
또한, 리더 노드는 완료(commit)된 로그 번호를 heartbeat 메시지를 통해 주기적으로 전체 노드에 전송하며, 팔로워 노드는 완료(Commit) 정보를 받으면 저장해 놓은 로그의 블록을 자신의 공유 원장에 포함된 블록 체인에 추가한다.
이러한, 라프트 기반 블록 체인에서 로그가 점점 커지게 되면 최신의 N개 로그를 제외한 나머지는 그 시점까지의 로그가 적용된 스냅샷(snapshot)을 만들어 두고 로그를 삭제하여 로그가 무한히 커지는 문제를 막는다. 이를 로그 압축(Log compaction)이라고 한다.
또한, 라프트로 인해 발생한 로그는 노드의 메모리 상에 저장되어 필요한 다른 노드에 전송되는데 메모리의 한계로 모든 로그를 메모리 상에 로딩해 있을 수 없다. 이때에, 스냅샷 로그(snapshot log)를 이용하여 오래 전의 로그 대신 스냅샷 로그를 전달하고, 스냅샷 로그를 기반으로 스냅샷을 전달하여 블록체인이 동기화 되어야 한다.
일반적으로, 스냅샷은 현재 로그들을 적용한 상태(State) 전체를 저장소에 별도 복사본을 만드는 것이다.
그러나, 이러한 스냅샷을 이용할 때는 다음과 같은 문제점이 발생할 수 있다.
첫째로, 블록체인에서 전체 블록체인을 복사해서 스냅샷을 만드는 것은 너무 느리고 디스크 소모량이 커 효율적인 처리 방법이 필요하다.
또한, 스냅샷을 이용해 블록체인을 전달하는 과정은 전달해야 할 데이터가 너무 방대할 수 있어 이는 라프트 합의의 이점인 속도를 저하시키는 문제를 야기하므로, 이를 효율적으로 처리할 방법이 필요하다.
이러한 스냅샷으로 인한 문제를 야기하는 대표적인 사례로서, 블록체인 시스템을 구성하는 복수의 노드가 존재하는 상태에서 신규 노드가 상기 블록체인 시스템에 참여하는 경우, 상기 신규 노드는 상기 블록체인 시스템에 참여하지 않은 기간 동안 로그가 저장되지 않은 상태이다.
따라서, 이러한 신규 노드는 블록 동기화가 필요하며, 이를 위해 상기 신규 노드가 블록체인 시스템에 참여할 때 리더로 설정된 리더 노드는 상기 신규 노드에게 블록체인에 기록된 로그 중 상기 신규 노드가 블록체인 시스템에 참여하지 않은 기간 동안에 발생한 모든 로그를 스냅샷으로 생성하여 전송하게 된다.
이 경우, 상술한 바와 같이 참여 기간이 길수록 스냅샷의 데이터 용량이 증가하게 되므로 스냅샷을 생성하기 위해 데이터 복사를 하기 위한 리더 노드의 부하가 증가하게 되고, 리더 노드가 주기적으로 트랜잭션을 모아 생성한 블록을 로그에 포함시켜 팔로워 노드에게 전송할 때 상기 신규 노드의 참여로 인해 발생하는 부하로 인해 리더 노드가 팔로워 노드에게 로그를 전송하는데 있어서도 영향을 미치게 되어 블록체인 시스템의 전체 효율이 저하되는 문제가 발생한다.
따라서, 본 발명은 상술한 바와 같이 신규 노드가 블록체인 시스템에 참여할 때 이러한 라프트 기반의 블록 동기화 과정에서 부하를 낮추어 라프트를 사용하는 블록체인 시스템의 효율을 높일 수 있는데, 이를 도면을 참고하여 상세히 설명한다.
우선, 도 1은 본 발명의 실시예에 따른 라프트 합의를 이용한 블록체인 동기화 방법이 적용된 블록체인 시스템의 구성도이다.
도시된 바와 같이, 본 발명의 실시예에 따른 블록체인 시스템은 네트워크를 통해 상호 통신 가능하도록 연결된 복수의 단말로 구성되며, 복수의 단말 각각에는 단말이 블록체인의 노드로서 동작하기 위한 어플리케이션부(10)가 구성될 수 있다.
또한, 상기 블록체인 시스템을 구성하는 특정 단말의 상기 어플리케이션부(10)는 상기 블록체인 시스템을 구성하는 타 단말의 어플리케이션부(10)와 상호 통신할 수 있다.
이때, 상기 블록체인 시스템은 복수의 서로 다른 단말에 각각 구성된 상기 어플리케이션부(10)를 포함하여 구성될 수 있으며, 상기 어플리케이션부(10)는 라프트 합의 알고리즘이 설정될 수 있다.
또한, 본 발명에서 설명하는 블록체인(blockchain)이란 다수의 트랜잭션 정보를 블록으로 구성하고, 해시(hash)를 이용하여 여러 블록(block)들을 체인처럼 연결하여, 피투피(P2P) 네트워크 분산 환경에서 중앙 관리 서버가 아닌 참여자(피어, peer)인 노드들의 디지털 장비에 정보를 분산시켜 저장함으로써, 보안 정보를 공동으로 관리하는 알고리즘이다. 이러한, 블록체인을 이용하면 데이터의 위변조가 불가능하여 권위 있는 중개기관이 없더라도 신뢰할 수 있는 안전한 거래와 데이터 처리를 할 수 있다.
이와 같은 블록체인을 구현하기 위해, 상기 복수의 서로 다른 단말 각각에는 어플리케이션부(10)가 구성될 수 있으며, 상기 복수의 단말 각각에 구성된 어플리케이션부(10)는 상기 단말에 저장되며 블록체인의 노드로서 동작하는데 필요한 알고리즘을 포함하는 어플리케이션(application)을 실행한 상태의 제어부로 구성될 수 있다.
이때, 상기 알고리즘은 상술한 라프트 합의 알고리즘을 포함할 수 있다.
또한, 상기 제어부는 단말에 구성되는 저장부에 저장된 프로그램 및 데이터를 이용하여 상기 단말의 전반적인 제어 기능을 실행한다. 제어부는 RAM, ROM, CPU, GPU, 버스를 포함할 수 있으며, RAM, ROM, CPU, GPU 등은 버스를 통해 서로 연결될 수 있다. CPU는 저장부에 액세스하여, 저장부에 저장된 O/S(Operating System)를 이용하여 부팅을 수행할 수 있으며, 저장부에 저장된 각종 프로그램, 콘텐츠, 데이터 등을 이용하여 상기 어플리케이션부(10)로 동작하면서 본 발명에서 설명하는 다양한 동작을 수행할 수 있다.
또한, 상기 단말은 상기 제어부 이외에도 타 단말과의 통신을 위한 통신부, 각종 정보를 표시하는 표시부, 상기 어플리케이션 관련 데이터를 비롯한 각종 데이터를 저장하는 저장부, 사용자 입력을 수신하는 사용자 입력부 등과 같은 다양한 구성부를 포함하여 구성될 수 있으며, 상기 제어부는 상기 단말을 구성하는 구성부를 제어할 수 있다.
이때, 상기 저장부는 데이터베이스(이하, DB)로 구성되거나, 물리적인 하드디스크(hard disk), SSD(Solid State Drive), 웹하드(web hard), 메모리(memory) 등과 같은 다양한 저장 수단으로 구성될 수 있다.
또한, 상기 복수의 노드 각각을 구성하는 상기 단말은 블록을 블록체인에 저장하기 위한 공유 원장이 미리 저장될 수 있으며, 블록체인 시스템을 구성(참여)하는 복수의 노드별(단말별)로 상기 공유 원장이 저장될 수 있다. 또한, 상기 공유 원장은 상기 저장부에 저장될 수 있다.
또한, 상기 복수의 노드별로 구성된 어플리케이션부(10)는 상기 로그를 상기 공유 원장과 별도로 단말(노드)의 저장부에 저장할 수 있으며, 상기 로그를 상기 저장부를 구성하는 디스크 및 메모리 중 적어도 하나에 저장할 수 있다.
또한, 복수의 노드 각각을 구성하는 상기 단말은 스마트폰(Smart Phone), 휴대폰, PDA(Personal Digital Assistant), PMP(Portable Multimedia Player), 태블릿 PC 등과 같이 무선 통신망을 통하여 외부 서버와 연결될 수 있는 모든 종류의 핸드헬드(Handheld) 기반의 무선 통신 장치를 포함할 수 있으며, 이 외에도 데스크탑 PC, 태블릿 PC, 랩탑 PC, 셋탑 박스를 포함하는 IPTV와 같이, 네트워크를 통하여 외부 서버와 연결될 수 있는 통신 장치도 포함할 수 있다.
또한, 복수의 노드 각각을 구성하는 단말은 특정 업체에서 운영하는 서버로 구현될 수도 있다.
복수의 노드 각각을 구성하는 단말은 블록체인 상에서 공유되는 정보를 메모리의 보안 영역에 저장하거나, 데이터베이스의 보안 영역에 저장할 수 있다.
즉, 본 발명에서는 블록체인에 노드로서 참여하는 참여자가 동종 장치로 구성되거나 이종 장치로 구성되는 등 다양한 형태의 블록체인을 기반으로 하여 복수의 노드를 구성할 수 있다.
이하 설명에서는 노드와 단말을 설명 양태에 따라 중복 사용하면서도 노드와 단말이 상호 동일한 것으로 설명될 수 있다.
상술한 구성을 토대로 도 2에 도시된 본 발명의 실시예에 따른 블록체인 동기화 방법에 대한 순서도 및 이하 도면을 참고하여 본 발명의 상세 실시예를 설명한다.
우선, 상기 복수의 단말 중 상기 라프트 합의를 통해 리더 노드로 선출된 단말의 어플리케이션부(10)는 블록을 포함하는 로그를 블록체인 시스템을 구성하는 팔로워 노드에게 전송하여 블록체인 동기화가 이루어지도록 할 수 있다.
일례로, 도 3에 도시된 바와 같이, 상기 리더 노드의 어플리케이션부(10)는 블록 생성 주기 동안 블록체인 시스템에서 노드간 발생하는 트랜잭션을 수집하여 상기 트랜잭션의 해시값을 기반으로 신규 블록을 생성할 수 있다.
또한, 상기 리더 노드의 어플리케이션부(10)는 상기 신규 블록의 생성 시점에 대응되는 블록 체인의 운영 상태를 식별하기 위한 신규 로그를 생성할 수 있으며, 이때 상기 신규 로그는 상기 신규 로그를 생성한 생성 주체이며 라프트 합의를 통해 선출된 리더 노드의 식별정보, 상기 신규 로그의 로그 식별번호(로그 인덱스(index)), 블록체인에 참여한 노드의 수, 상기 신규 블록 정보 등과 같은 다양한 정보를 포함할 수 있다.
또한, 상기 리더 노드의 어플리케이션부(10)는 블록의 생성 시점에 로그를 생성하고, 상기 로그에 블록을 포함시켜 상기 팔로워 노드별로 전송할 수 있다(S1).
이때, 상기 팔로워 노드의 어플리케이션부(10)는 로그에서 블록을 추출할 수 있으며, 블록을 상기 팔로워 노드의 저장부에 저장된 공유 원장에 상기 블록을 이전 블록과 연결하여 블록체인 방식으로 저장(또는 기록)할 수 있다.
또한, 특정 단말에 구성된 어플리케이션부(10)는 상기 로그 수신시 상기 로그를 상기 공유 원장과 별도로 상기 어플리케이션부(10)가 구성된 상기 특정 단말의 저장부에 저장할 수 있다.
한편, 상기 블록체인 시스템에 신규로 참여하거나 다시 참여한 단말인 신규 노드의 어플리케이션부(10)는 상기 리더 노드로부터 상기 신규 로그 수신시 상기 신규 노드의 저장부에 가장 마지막에 저장된 기존 로그를 식별할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 상기 신규 로그와 상기 신규 로그에 대응되어 식별된 상기 기존 로그를 비교하여 상기 신규 로그의 저장 차례가 아닌 경우 상기 신규 로그의 거부에 대한 거부 정보를 생성하여 상기 리더 노드에 전송할 수 있다(S2).
이에 대한 일례로, 도 4에 도시된 바와 같이, 상기 리더 노드의 어플리케이션부(10)는 2번에 해당되는 노드가 리더 노드로서 동작할 때 101번부터 103번에 해당되는 신규 로그를 블록체인 시스템을 구성하는 팔로워 노드별로 전송하면, 블록체인 시스템에 신규 참여한 신규 노드의 어플리케이션부(10)는 팔로워 노드로서 동작하여 상기 신규 로그를 수신한다.
이때, 팔로워 노드인 상기 신규 노드의 어플리케이션부(10)는 상기 신규 로그 수신시 상기 신규 로그 이전의 기존 로그를 상기 신규 노드의 저장부에서 확인하고, 상기 신규 로그 이전에 가장 마지막에 저장된 기존 로그를 50번으로 확인한다.
이에 따라, 상기 신규 노드의 어플리케이션부(10)는 신규 로그의 이전 로그(log)인 상기 2번에 해당되는 리더 노드가 전송한 100번에 해당되는 기존 로그가 상기 신규 노드에 존재해야 하나, 가장 마지막에 저장된 기존 로그가 50번이므로, 상기 신규 로그의 이전 로그가 존재하지 않아 상기 신규 로그의 저장 차례가 아닌 것으로 판단하고, 상기 신규 로그에 대응되어 상기 리더 노드가 전송한 신규 로그의 거부 및 동기화 요청을 위한 거부 정보를 생성하여 상기 리더 노드에게 전송한다.
또한, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보 수신시 상기 신규 로그 이전에 생성되어 저장된 최신 로그 및 상기 최신 로그가 적용된 최신 블록 정보가 포함된 스냅샷 로그를 상기 신규 노드에 전송할 수 있다(S3).
이때, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보 수신시 상기 거부 정보와 미리 설정된 기준에 따라 상기 스냅샷 로그를 상기 신규 노드에 선택적으로 전송할 수 있다.
이를 더욱 상세히 설명하면, 상기 리더 노드의 어플리케이션부(10)는 상기 리더 노드에 포함된 메모리에 가장 최근의 N 개의 신규 로그를 저장하여 상기 N 개의 신규 로그를 로그 엔트리(Log entry)로서 관리할 수 있으며, 로그 생성에 따라 상기 리더 노드의 메모리에 저장되는 신규 로그가 N개를 초과할 때마다(로그 엔트리에 포함된 신규 로그의 개수가 N개 초과시마다) 상기 리더 노드의 메모리 상에 저장된 N 개의 신규 로그를 압축(log compaction)하여 상기 스냅샷 로그를 생성한 후 상기 리더 노드의 메모리에 저장할 수 있으며, 상기 스냅샷 로그 생성시 상기 리더 노드의 메모리에 기존 스냅샷 로그가 존재하는 경우 새로 생성된 상기 스냅샷 로그로 상기 기존 스냅샷 로그를 갱신할 수 있다.
이때, 상기 리더 노드의 어플리케이션부(10)는 상기 스냅샷 로그의 생성과 관여된 로그 엔트리(하나 이상의 신규 로그)를 메모리에서 삭제하고, 상기 스냅샷 로그에 포함된 최신 로그 이후에 생성되는 하나 이상의 신규 로그를 신규 로그 엔트리로서 메모리에 저장하여 관리할 수 있다.
상술한 구성에 따라, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보 수신시 상기 거부 정보를 기초로 상기 거부 정보를 전송한 상기 신규 노드의 저장 차례인 로그를 식별하고, 상기 거부 정보를 기초로 상기 신규 노드에 대응되어 식별된 로그(저장 차례인 로그)가 상기 리더 노드의 메모리 상에 상기 스냅샷 로그와 함께 저장된(저장 중인) 로그가 아닌 경우 상기 스냅샷 로그를 상기 신규 노드에 전송할 수 있다.
즉, 상기 리더 노드의 어플리케이션부(10)는 상기 신규 노드에 대응되어 식별된 로그가 상기 리더 노드의 메모리 상에 상기 스냅샷 로그와 함께 메모리에 현재 저장 중인 상태의 로그 엔트리에 포함되지 않은 경우 상기 스냅샷 로그를 상기 신규 노드에 전송할 수 있다.
또한, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보를 기초로 상기 거부 정보를 전송한 상기 신규 노드에 대응되어 식별된 로그(저장 차례인 로그)가 상기 리더 노드의 메모리에 저장된 로그 엔트리를 구성하는 하나 이상의 신규 로그(또는 로그) 중 어느 하나인 경우(로그 엔트리에 포함된 경우) 상기 신규 노드에 대응되어 식별된 로그부터 상기 메모리에 저장된 저장 순서대로 상기 리더 노드의 메모리로부터 추출하여 상기 신규 노드에 전송할 수 있다.
즉, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보를 기초로 상기 신규 노드가 저장해야 하는 로그가 상기 메모리에 저장된 로그 엔트리(Log entry)(하나 이상의 로그(또는 신규 로그))의 이전 로그인 경우 상기 스냅샷 로그를 상기 신규 노드에 전송하고, 상기 신규 노드가 저장해야 하는 로그가 상기 메모리에 저장된 로그 엔트리에 포함된 신규 로그로서 동기화 대상인 로그의 개수가 적은 경우 상기 메모리에서 동기화 대상인 로그를 추출하여 상기 신규 노드에 전송할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 상기 거부 정보에 대응되어 상기 리더 노드로부터 상기 스냅샷 로그가 아닌 상기 신규 로그를 수신하는 경우 상기 신규 로그를 저장하여 동기화 과정을 완료할 수 있다.
상술한 구성에서, 블록체인(공유 원장)은 모든 블록(또는 블록 데이터)이 영구적으로 저장되며, 삭제되지 않아야 한다.
또한, 어플리케이션부(10)는 노드의 메모리 상에 로그가 일정 개수를 넘어가면 로그를 압축(compaction)하고 압축된 부분까지는 스냅샷 로그를 생성하며, 스냅샷 로그를 최신의 1개만 저장하고 기존 스냅샷 로그에 덮어쓴다. 또한, 어플리케이션부(10)는 스냅샷 로그를 인덱스(index)를 가지지 않는 별도 로그로 처리한다.
또한, 노드의 메모리에는 스냅샷 로그와 이후의 로그 엔트리(entry)들이 저장되며, 스냅샷 로그에는 상기 신규 로그의 직전에 전송된 최신 로그(index/term)와 그 최신 로그가 적용된 블록체인의 최신 블록 정보가 저장 된다. 따라서, 스냅샷 생성시 오버헤드(overhead)가 거의 없고, 크기가 작아 저장 공간을 거의 소모하지 않는다.
즉, 본 발명의 어플리케이션부(10)에 의해 생성되는 스냅샷 로그는 기존과 달리 최신 로그와 최신 로그가 적용된 최신 블록 정보만을 포함할 수 있어, 스냅샷 로그의 용량이 작아 노드의 부하를 최소화할 수 있다.
이때, 상기 최신 블록 정보는 최신 블록의 식별번호(블록 인덱스), 최신 블록의 해시 정보 등을 포함할 수 있다. 또한, 상기 최신 로그는 상기 신규 로그의 직전에 전송된 로그를 의미할 수 있다.
한편, 상술한 바와 같이 리더 노드는 팔로워 노드인 신규 노드에 전송해야할 로그가 상기 리더 노드의 메모리 상에 저장된 로그 엔트리에 포함되지 않는 경우, 상기 리더 노드의 어플리케이션부(10)는 상기 거부 정보를 기초로 이를 확인하고 상기 거부 정보에 대응되어 상기 스냅샷 로그를 메시지로 상기 신규 노드에 전송할 수 있으며, 상기 신규 노드의 어플리케이션부(10)는 상기 스냅샷 로그를 기초로 블록체인 시스템에 참여하는 노드별로 설정된 공유 원장과 동기화되도록 하여 블록체인 동기화를 수행할 수 있는데, 이를 상술한 구성을 토대로 도 5 및 도 6을 참고하여 설명한다.
도시된 바와 같이, 상기 신규 노드의 어플리케이션부(10)는 상기 스냅샷 로그 수신시 상기 신규 노드에 미리 저장된 블록체인을 위한 공유 원장의 가장 마지막 블록의 다음 블록부터 상기 스냅샷 로그에 따른 상기 최신 블록 정보에 대응되는 최신 블록까지의 블록별 해시값을 상기 리더 노드에 요청하여 수신하고(S4), 상기 블록체인 시스템을 구성하는 상기 리더 노드를 제외한 모든 팔로워 노드에게 상기 블록별 해시값을 미리 설정된 개수로 분할 전송하며(S5), 상기 블록별 해시값에 대응되어 상기 팔로워 노드 각각으로부터 분산 수집된 블록을 순서대로 상기 공유 원장에 저장하여 동기화할 수 있다(S6).
이때, 상기 신규 노드에 미리 저장된 공유 원장은 상기 신규 노드의 저장부에 저장될 수 있다.
일례로, 상기 신규 노드의 어플리케이션부(10)는 상기 스냅샷 로그 수신시 동기화를 시작한다.
이때, 상기 스냅샷 로그를 수신한 신규 노드의 어플리케이션부(10)는 스냅샷 로그를 저장하기 이전에 블록체인 동기화를 시작하며, 스냅샷 로그에는 동기화해야할 높이와 해시(hash)가 포함되어 있기 때문에 라프트 프로토콜(Raft Protocol)을 이용하지 않고, 블록체인 동기화를 수행할 수 있다.
우선, 상기 신규 노드의 어플리케이션부(10)는 동기화 시작시 상기 스냅샷 로그를 기초로 상기 신규 노드의 공유 원장에 저장된 가장 마지막 블록의 다음 블록부터 상기 스냅샷 로그에 포함된 최신 블록 정보에 대응되는 최신 블록 까지의 블록별 해시값(블록해시)을 상기 리더 노드에 요청하기 위한 요청 정보를 전송할 수 있다.
이때, 상기 신규 노드의 어플리케이션부(10)는 공유 원장의 가장 마지막 블록의 다음 블록부터 블록별 해시값을 배치(batch)로 미리 설정된 N개씩(ex:128) 요청할 수 있으며, 상기 N개 설정된 요청 정보를 전송할 수 있다.
또한, 상기 리더 노드의 어플리케이션부(10)는 상기 요청 정보 수신시 상기 요청정보에 따른(대응되는) 블록별 해시값을 상기 리더 노드의 저장부에 저장된 공유 원장으로부터 추출하여 상기 신규 노드에 전송할 수 있다.
또한, 도 5에 도시된 바와 같이, 상기 신규 노드의 어플리케이션부(10)는 상기 스냅샷 로그 수신시 상기 리더 노드를 제외한 모든 팔로워 노드와 각각 P2P 연결을 수행할 수 있다.
이때, 상기 모든 팔로워 노드는 상기 리더 노드에 대응되는 블록 체인 시스템에 참여한 복수의 팔로워 노드들(또는 하나 이상의 팔로워 노드)을 포함할 수 있으며, 상기 신규 노드와 연결된 팔로워 노드를 의미할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 상기 리더 노드로부터 상기 요청 정보에 대응되어 수신한 하나 이상의 상기 블록별 해시값을 미리 설정된 개수로 분할 전송할 수 있다.
일례로, 상기 신규 노드의 어플리케이션부(10)는 블록별 해시값을 배치로 받으면 이를 P2P를 이용해 전체 팔로워 노드에 미리 설정된 M(ex:16)개씩 나누어 분할 전송하여 블록별 해시값에 대응하는 블록을 요청할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 상기 P2P를 통해 상기 모든 팔로워 노드 각각으로부터 팔로워 노드별로 전송한 블록별 해시값에 대응되는 블록을 상기 블록별 해시값을 수신한 팔로워 노드 각각으로부터 수신할 수 있다.
이때, 상기 블록 요청에 따른 블록별 해시값을 수신한 팔로워 노드 각각에 구성된 어플리케이션부(10)는 상기 블록 요청에 대응되어 자신의 공유 원장에서 블록 요청에 대응되는 해시값을 읽어, 블록 요청 관련 블록별 해시값에 대응되는 블록들을 공유 원장에서 추출한 후 신규 노드에게 전송할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 팔로워 노드별로 수신한 블록을 상기 신규 노드의 저장부에 미리 저장된 공유 원장에 순서대로 저장하여 블록체인 동기화 과정을 수행할 수 있다.
또한, 도 6에 도시된 바와 같이, 상기 신규 노드의 어플리케이션부(10)는 상기 블록체인 동기화 과정이 완료되면, 완료 정보를 생성하여 상기 리더 노드에게 전송할 수 있다(S7).
또한, 상기 리더 노드의 어플리케이션부(10)는 상기 완료 정보 수신시 상기 완료 정보에 대응되어 상기 스냅샷 로그에 따른 마지막 로그(일례로, 최신 로그)의 다음 로그부터 상기 신규 노드에 전송할 수 있다.
또한, 상기 신규 노드의 어플리케이션부(10)는 상기 리더 노드로부터 수신한 스냅샷 로그를 상기 신규 노드에 저장하고, 상기 리더 노드로부터 상기 스냅샷 로그에 포함되지 않은 다음 로그에 해당되는 상기 신규 로그를 수신하여 저장할 수 있으며, 상기 신규 로그를 기초로 상기 공유 원장을 타 노드의 공유 원장과 동기화할 수 있다(S8).
일례로, 상기 리더 노드의 어플리케이션부(10)는 상기 완료 정보 수신시 상기 완료 정보에 대응되는 상기 스냅샷 로그에 기록된 상기 최신 로그의 다음 로그이며 상기 리더 노드의 메모리 상에 저장된 로그 엔트리에 포함되는 하나 이상의 로그를 순서대로 상기 신규 노드에 전송할 수 있으며, 상기 신규 노드의 어플리케이션부(10)는 상기 완료 정보에 대응되어 상기 리더 노드로부터 수신되는 하나 이상의 로그를 순차 저장하여 다른 팔로워 노드와 블록 체인(또는 공유 원장)을 동기화할 수 있다.
즉, 상기 신규 노드의 어플리케이션부(10)는 상기 동기화 완료 이후 상기 신규 로그 수신시 상기 신규 로그에 포함된 신규 블록을 추출한 후 상기 공유 원장에 저장하여 상기 공유 원장을 상기 블록체인 시스템에 참여하는 모든 노드의 공유 원장과 동기화할 수 있다.
이때, 상기 신규 노드의 어플리케이션부(10)는 상기 스냅샷 로그를 상기 신규 노드의 저장부를 구성하는 디스크 및 메모리 중 적어도 하나에 저장할 수 있다.
상술한 바와 같이, 본 발명은 라프트 합의를 이용한 블록체인 운영시 신규 노드가 참여하거나 신규 노드가 장시간 동안 오프 상태에서 온 상태로 전환한 경우 라프트 합의에 의해 선출된 리더 노드가 신규 노드가 수신하지 못한 대량의 로그들을 신규 노드에 모두 전송하는 비효율적인 동기화 과정을 거치지 않고, 상기 리더 노드의 메모리 상에 저장되는 로그 엔트리가 소정의 개수(일례로, N개) 초과시마다 갱신되는 로그 저장 상태에 대한 스냅샷 로그를 신규 노드에 제공하면 신규 노드에서 상기 스냅샷 로그를 기초로 동기화하지 않은 블록별 블록 해시값을 리더 노드로부터 수집한 후 이를 블록 체인에 참여하는 다수의 팔로워 노드에게 분할 전송하고, 다수의 팔로워 노드로부터 동기화되지 않은 블록들을 분산하여 수집하여 동기화함으로써 기존에 리더 노드에게 집중되는 동기화 부하를 다수의 팔로워 노드에 분산하여 다수의 팔로워 노드가 신규 노드의 동기화 과정에 협업하여 참여하도록 지원할 수 있어 리더 노드의 부하를 방지함과 아울러 신규 노드의 블록체인 참여시에도 신속한 동기화를 통해 블록체인 시스템의 효율성을 유지할 수 있다.
이때, 상기 신규 노드의 어플리케이션부(10)는 상기 리더 노드의 부하를 줄이면서 다수의 팔로워 노드를 이용한 동기화의 병렬성을 강화하기 위해 상기 리더 노드로부터 수신 대상인 전체 블록별 해시값을 미리 설정된 개수 단위로 나누어서 수신할 수 있다.
일례로, 상기 신규 노드의 어플리케이션부(10)는 상기 리더 노드로부터 최초 1000개의 블록 해시를 수신한 후 100개씩 팔로워 노드에게 분산하여 블록을 분산 수집할 수 있으며, 상기 최초 1000개 이후의 순서에 해당하는 다음 1000개의 블록 해시를 상기 리더 노드로부터 수신한 후 100개씩 팔로워 노드에게 분산하여 블록을 분산 수집하는 과정을 반복할 수 있다.
여기서, 상기 리더 노드의 어플리케이션부(10)가 상기 신규 노드의 어플리케이션부와 통신하여 상기 전체 블록별 해시값을 미리 설정된 개수 단위로 나누어서 분할 전송할 수도 있으며, 상기 신규 노드의 어플리케이션부(10)에서 상기 리더 노드로부터 분할 전송된 미리 설정된 개수의 블록별 해시값에 대해 팔로워 노드(들)로부터 블록 수신이 완료되는 경우 상기 리더 노드의 어플리케이션부(10)는 상기 신규 노드와의 통신을 통해 이전 분할 전송된 블록별 해시값에 대한 블록 수신 완료 여부를 판단하여 판단 결과 완료시 나머지 블록별 해시값 중 미리 설정된 개수만큼 상기 신규 노드의 어플리케이션부(10)에 전송할 수 있다.
또한, 본 발명은 블록체인의 높이 및 해시(hash) 정보만을 포함하는 저용량의 스냅샷 로그를 이용한 동기화를 수행할 수 있어, 라프트 합의 과정에 노드의 디스크(Disk)나 메모리(memory)에 써야 할 데이터의 오버헤드(overhead)가 줄어들어 성능상 이점을 제공할 수 있다.
또한, 본 발명은 블록 체인의 동기화 과정을 라프트 합의를 이용하지 않고 라프트 합의와 분리하여 동작하게 함으로써, 병렬적(parallel)인 동기화 수행이 가능하도록 지원하여, 신속한 동기화를 통한 블록체인 시스템의 성능상 이점을 제공할 수 있다.
또한, 본 발명은 신규 노드의 동기화 과정에서 발생하는 부하를 감소시킴과 아울러 동기화 과정에서 블록체인을 구성하는 블록들이 정확하게 연결되도록 하여 블록체인 본연의 보안성을 보장할 수 있다.
한편, 본 발명은 동기화 과정 중 특정 노드에 장애가 발생하여도 일관되게 작업을 이어서 재수행하여 동기화 효율성을 보장할 수 있다.
즉, 상기 신규 노드의 어플리케이션부(10)는 상기 팔로워 노드로부터 블록 수신 도중 상기 팔로워 노드와의 연결에 실패한 경우, 상기 팔로워 노드와의 연결 실패 시점에 상기 공유 원장에서 동기화 완료된 블록을 확인하고, 상기 스냅샷 로그를 이용하여 상기 동기화 완료된 블록 이후의 블록부터 동기화를 수행할 수 있다.
일례로, 블록체인 동기화 과정 중에 팔로워 노드에 오류(crash)가 발생하여 해당 팔로워 노드가 상기 신규 노드로 블록을 전송하지 못하는 경우 스냅샷 로그는 어디에도 저장되지 않은 상태에서 상기 신규 노드는 블록 체인을 구성하는 공유 원장에 일부 블럭이 추가로 확장된 상황이 된다.
따라서, 오류가 발생한 해당 팔로워 노드가 재시작해도 로그 상황은 바뀌지 않았기 때문에, 상기 신규 노드의 어플리케이션부(10)는 다시 스냅샷 로그를 이용한 동기화 과정을 그대로 다시 수행하게 된다.
하지만, 상기 신규 노드의 공유 원장은 오류가 발생한 팔로워 노드의 오류 발생 시점에 일부 블럭이 갱신 되었기 때문에, 상기 신규 노드의 어플리케이션부(10)는 오류 발생 시점에 가장 마지막에 추가된 블록의 다음 블록부터 동기화를 수행할 수 있다.
본 명세서에 기술된 다양한 장치 및 구성부는 하드웨어 회로(예를 들어, CMOS 기반 로직 회로), 펌웨어, 소프트웨어 또는 이들의 조합에 의해 구현될 수 있다. 예를 들어, 다양한 전기적 구조의 형태로 트랜지스터, 로직게이트 및 전자회로를 활용하여 구현될 수 있다.
전술된 내용은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
10: 어플리케이션부

Claims (6)

  1. 복수의 서로 다른 단말 상호간 네트워크를 통해 연결되며, 상기 단말이 블록체인의 노드로서 동작하기 위한 어플리케이션부가 상기 복수의 서로 다른 단말 각각에 구성된 블록체인 시스템에서 라프트 합의를 이용한 동기화 방법에 있어서,
    상기 복수의 단말 중 상기 라프트 합의를 통해 리더 노드로 선출된 단말의 어플리케이션부가 선출된 리더 노드의 식별 정보, 로그 인덱스, 블록체인에 참여한 노드의 수를 포함하는 블록체인 운영상태 식별을 위한 정보에 신규 블록 정보를 더한 신규 로그를 생성한 후 이를 전송하는 공유 단계;
    상기 리더 노드가 가장 최근의 N 개의 신규 로그를 저장하여 상기 N 개의 신규 로그를 로그 엔트리(Log entry)로서 관리하며 신규 로그가 N개를 초과할 때마다 해당 시점까지의 로그가 적용된 스냅샷을 생성하여 이전 스냅샷을 갱신하고 기존 N개의 로그를 삭제하는 스냅샷 생성 단계;
    상기 블록체인 시스템에 신규로 참여하거나 다시 참여한 단말인 신규 노드의 어플리케이션부가 상기 신규 로그와 상기 신규 노드에 가장 마지막에 저장된 기존 로그를 비교하여 상기 신규 로그의 저장 차례가 아닌 경우 거부 정보를 전송하는 요청 단계;
    상기 리더 노드의 어플리케이션부가 상기 거부 정보에 대응되어 상기 신규 로그 이전에 생성된 최신 로그의 인덱스와 텀 및 상기 최신 로그가 적용된 최신 블록에 대한 식별번호와 해시 정보를 포함한 최신 블록 정보 만 포함된 스냅샷 로그를 상기 신규 노드에 전송하는 스냅샷 전송 단계; 및
    상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그 수신시 상기 신규 노드에 미리 저장된 블록체인을 위한 공유 원장의 가장 마지막 블록의 다음 블록부터 상기 최신 블록 정보에 대응되는 최신 블록까지의 블록별 해시값을 상기 리더 노드에 요청하여 수신하고, 상기 블록체인 시스템을 구성하는 상기 리더 노드를 제외한 모든 팔로워 노드에게 상기 블록별 해시값을 미리 설정된 개수로 분할 전송하며, 상기 블록별 해시값에 대응되어 상기 팔로워 노드 각각으로부터 분산 수집된 블록을 순서대로 상기 공유 원장에 저장하여 동기화하는 동기화 단계를 포함하되,
    상기 동기화 단계는
    상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그 수신시 해당 스냅샷 로그를 저장하지 않고, 상기 리더 노드를 제외한 모든 팔로워 노드와 라프트 프로토콜이 아닌 P2P 연결을 수행하는 단계; 및
    상기 신규 노드의 어플리케이션부가 상기 P2P를 통해 상기 모든 팔로워 노드 각각으로부터 팔로워 노드별로 전송한 블록별 해시값에 대응되는 블록을 상기 블록별 해시값을 수신한 팔로워 노드로부터 수신하는 단계;를 더 포함하고,
    상기 동기화 단계 이후
    상기 신규 노드의 어플리케이션부가 상기 스냅샷 로그를 상기 신규 노드에 저장하고, 상기 리더 노드로부터 상기 스냅샷 로그에 포함되지 않은 상기 신규 로그를 라프트 프로토콜을 통해 수신하여 저장하고, 상기 신규 로그를 기초로 상기 공유 원장을 타 노드의 공유 원장과 동기화하는 단계를 더 포함하는 것을 특징으로 하는 라프트 합의를 이용한 블록체인 동기화 방법.
  2. 청구항 1에 있어서,
    상기 스냅샷 전송 단계는
    상기 리더 노드의 어플리케이션부가 상기 신규 노드로부터 상기 거부 정보 수신시 상기 거부 정보를 기초로 상기 신규 노드에 대응되어 식별된 로그가 상기 리더 노드의 메모리에 저장된 로그 엔트리에 포함되지 않은 경우 상기 스냅샷 로그를 전송하고, 상기 신규 노드에 대응되어 식별된 로그가 상기 리더 노드의 메모리에 저장된 상기 로그 엔트리에 포함된 경우 상기 신규 노드에 대응되어 식별된 로그부터 상기 로그 엔트리에 포함되는 하나 이상의 로그를 상기 메모리에 저장된 저장 순서대로 상기 리더 노드의 메모리로부터 추출하여 상기 신규 노드에 전송하는 단계를 더 포함하는 것을 특징으로 하는 라프트 합의를 이용한 블록체인 동기화 방법.
  3. 삭제
  4. 삭제
  5. 청구항 1에 있어서,
    상기 동기화 단계는
    상기 신규 노드의 어플리케이션부가 상기 블록 수신 도중 상기 팔로워 노드와의 연결에 실패한 경우 상기 공유 원장에서 동기화 완료된 블록을 확인하고, 상기 스냅샷 로그를 이용하여 상기 동기화 완료된 블록 이후의 블록부터 동기화를 수행하는 단계를 더 포함하는 것을 특징으로 하는 라프트 합의를 이용한 블록체인 동기화 방법.
  6. 삭제
KR1020200000788A 2020-01-03 2020-01-03 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템 KR102314495B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200000788A KR102314495B1 (ko) 2020-01-03 2020-01-03 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200000788A KR102314495B1 (ko) 2020-01-03 2020-01-03 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템

Publications (2)

Publication Number Publication Date
KR20210087721A KR20210087721A (ko) 2021-07-13
KR102314495B1 true KR102314495B1 (ko) 2021-10-20

Family

ID=76858841

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200000788A KR102314495B1 (ko) 2020-01-03 2020-01-03 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템

Country Status (1)

Country Link
KR (1) KR102314495B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114518973A (zh) * 2022-02-18 2022-05-20 成都西南信息控制研究院有限公司 分布式集群节点宕机重启恢复方法
CN115250277B (zh) * 2022-08-09 2023-09-05 西安邮电大学 将共识机制适用于基于联盟链的边缘缓存系统的方法
CN115495531B (zh) * 2022-11-17 2023-03-24 山东区块链研究院 基于检查点的区块链数据同步方法及系统
CN116074328B (zh) * 2023-03-01 2023-06-27 中国信息通信研究院 区块链网络中的区块传输方法、装置、设备和介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102017739B1 (ko) 2017-05-12 2019-09-03 박경옥 블록체인 시스템 및 블록체인 생성 방법

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"[Go로 구현하는 블록체인] Part 7: 네트워크", https://mingrammer.com/building-blockchain-in-go-part-7(2018.06.18.)*
"A brief overview of the Raft algorithm", https://blog.carlosgaldino.com/a-brief-overview-of-the-raft-algorithm.html(2016.07.11.)*

Also Published As

Publication number Publication date
KR20210087721A (ko) 2021-07-13

Similar Documents

Publication Publication Date Title
KR102314495B1 (ko) 라프트 합의를 이용한 블록체인 동기화 방법 및 블록체인 시스템
CN107193490B (zh) 一种基于区块链的分布式数据存储系统及方法
US20200081805A1 (en) Byzantine agreement using communications having linear complexity
CN109189751B (zh) 基于区块链的数据同步方法及终端设备
US20210126867A1 (en) Data-interoperability-oriented trusted processing method and system
Zhu et al. Blockchain based consensus checking in decentralized cloud storage
CN105512266A (zh) 一种实现分布式数据库操作一致性的方法及装置
CN113704354B (zh) 一种数据同步方法及装置、计算机设备、存储介质
CN111163148B (zh) 一种区块链系统的共识状态的同步方法及相关设备
CN102449616A (zh) 对象存储库在网络上的基于群的同步
WO2016177130A1 (zh) 通讯节点的选择方法及装置
WO2018010501A1 (zh) 全局事务标识gtid的同步方法、装置及系统、存储介质
CN111400112A (zh) 分布式集群的存储系统的写入方法、装置及可读存储介质
CN105511987A (zh) 一种强一致性且高可用的分布式任务管理系统
US20180225183A1 (en) SMB Service Fault Processing Method and Storage Device
CN113010496A (zh) 一种数据迁移方法、装置、设备和存储介质
CN109739435A (zh) 文件存储和更新方法及装置
CN113785281A (zh) 实施操作序列化以实现分布式数据结构的一致性的消息传送
CN112650812A (zh) 一种数据分片存储方法、装置、计算机设备和存储介质
CN112612769A (zh) 文件处理方法、装置及存储介质
KR20140047230A (ko) 분산 시스템에서 분산 트랜잭션의 최적화를 위한 방법 및 트랜잭션을 최적화한 분산 시스템
CN105323271B (zh) 一种云计算系统以及云计算系统的处理方法和装置
CN116232893A (zh) 分布式系统的共识方法、装置、电子设备及存储介质
CN113254511B (zh) 一种分布式向量检索系统及方法
CN114363350A (zh) 一种服务治理系统及方法

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant