Upgrade to Pro — share decks privately, control downloads, hide ads and more …

StateDB Pruning & Migration

kakao
December 09, 2022

StateDB Pruning & Migration

#BlockchainStorage

블록체인의 스토리지는 모든 데이터의 정합성 체크를 위해 모든 데이터를 누적해 저장합니다. 지속해서 증가하는 데이터로 인해 로컬 스토리지 데이터는 계속 증가하고, 이에 따라 데이터 액세스 속도는 지속적으로 느려지게 됩니다. 블록체인에서 과거 데이터가 중요하긴 하지만 노드별 역할에 따라 현재 데이터만 필요한 경우도 있고, 과거 데이터가 필요하더라도 최근 데이터만큼 빠른 속도로 액세스 되지 않아도 괜찮은 노드도 존재합니다. 이러한 특성을 이용해서 클레이튼은 과거 데이터를 지우거나 분산 스토리지로 마이그레이션 하는 로직을 만들어 스토리지 활용을 최적화하는 블록체인 스토리지 관리 모듈을 개발 중입니다. 본 세션에서는 이에 대한 이야기를 하고자 합니다.

발표자 : ethan.kr
크러스트유니버스에서 블록체인의 스토리지를 개발하고 있는 이든입니다. 카카오톡의 분산스토리지를 개발했고, 최근에 클레이튼에서 사용하는 블록체인용 스토리지의 최적화와 분산시스템으로의 확장을 고민하고 있습니다.

kakao

December 09, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. 이동광 ethan.kr 크러스트 유니버스 Copyright 2022. Kakao Corp. All rights

    reserved. Redistribution or public display is not permitted without written permission from Kakao. StateDB Pruning & Migration if(kakao)2022
  2. 자기소개 경력사항 (05~07) Search engine & SEO (07~11) Internet AD

    Server & Analytics (11~19) kage - kakao distributed storage (19~21) kakao enterprise. Data & Contents 팀 리더 (22~) Krustuniverse (Klaytn Core Dev, Storage Part) 관심 분야 - 대용량 데이터 처리 및 분산 처리 기술
  3. - 블록체인 기술은 비즈니스 네트워크 내에서 정보를 투명하게 공유할 수

    있도록 하는 고 급 데이터베이스 메커니즘입니다. 블록체인 데이터베이스는 연쇄적으로 연결된 블록에 데이터를 저장합니다. 네트워크의 합의 없이 체인을 삭제하거나 수정할 수 없으므로 이 데이터는 시간 순서대로 일관성이 있습니다. 그 결과 블록체인 기술을 사용하여 주문, 결 제, 계정, 기타 트랜잭션을 추적하기 위해 불변하거나 변경 불가능한 원장을 생성할 수 있 습니다. 이 시스템에는 무단 트랜잭션 항목을 방지하고 이러한 트랜잭션의 공유 보기에 서 일관되게 생성하는 기본 제공 메커니즘이 있습니다. What is Blockchain AWS: https://aws.amazon.com/ko/what-is/blockchain/
  4. What is Blockchain ࠶۾ 헤더 … 트랜잭션 1 트랜잭션 2

    State Alex : 100 KLAY Bob : 100 KLAY Mike : 300 KLAY … 영수증 2 영수증 1 Michael : 400 KLAY
  5. What is Blockchain 헤더 트랜잭션 1 트랜잭션 2 영수증 2

    영수증 1 RootHash Alex : 100 KLAY Bob : 100 KLAY Mike : 300 KLAY … Michael : 400 KLAY Alex : 100 Bob : 100 Mi ke : 300 chael : 400 …
  6. What is Blockchain ೻؊ ౟ے੥࣌ 1 ౟ے੥࣌ 2 ৔ࣻૐ 2

    ৔ࣻૐ 1 RootHash Alex : 100 Bob : 100 Mi ke : 300 chael : 400 … ೻؊ ౟ے੥࣌ 1 ౟ے੥࣌ 2 ৔ࣻૐ 2 ৔ࣻૐ 1 ೻؊ ౟ے੥࣌ 1 ౟ے੥࣌ 2 ৔ࣻૐ 2 ৔ࣻૐ 1 State Trie Nodes State Trie Nodes
  7. Account DB RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 헤더 트랜잭션 3 트랜잭션 4 영수증 4 영수증 3 RootHash - 2 Bob : 50 Mi chael : 450 - Bob이 Michael에게 
 50 KLAY를 전송하면
  8. Account DB RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 헤더 트랜잭션 3 트랜잭션 4 영수증 4 영수증 3 RootHash - 2 Bob : 50 Mi chael : 450 - Bob이 Michael에게 
 50 KLAY를 전송하면
  9. AccountDB & StorageDB 1 Block’s StateDB Trie nodes : 1.7

    billion nodes 
 All Block’s StateDB nodes : Estimated at 9 billion nodes Save space - same data is referenced to the same hashnode. 
 
 Reference count management is too dif fi cult, So pruning is possible only 
 of fl ine Etheruem : https://blog.ethereum.org/2015/06/26/state-tree-pruning
  10. AccountDB & StorageDB 1 Block’s StateDB Trie nodes : 1.7

    billion nodes 
 All Block’s StateDB nodes : Estimated at 9 billion nodes Save space - same data is referenced to the same hashnode. 
 
 Reference count management is too dif fi cult, So pruning is possible only 
 of fl ine Etheruem : https://blog.ethereum.org/2015/06/26/state-tree-pruning
  11. ExtHash Hash Keccak-256 ( 32 Byte ) 
 Used as

    key string for all data ExtHash Extended Hash ( 40 Byte ) 
 Hash + Ext bytes ( Block number, Hash Index of block ) Used as key string for all data, But there is no duplicate keys type Hash [HashLength]byte type ExtHash struct {
 Hash Hash
 BlockNum uint32
 Idx uint32 }
  12. ExtHash - Hash Function func (h *hasher) makeHashNode(data []byte) hashNode

    { 
 n := make(hashNode, h.sha.Size()) 
 h.sha.Reset() 
 tmpData, err := common.ExtFilter(data) 
 if err == nil { 
 h.sha.Write(tmpData) 
 } else { 
 h.sha.Write(data) 
 } 
 h.sha.Read(n) 
 return n 
 } f86180808080808080a8ca32c18c40a75a837b2c085d332f9ca9ba8bc3136fa373dbc8f5370558cf0429616b1100 ffff 0e008080a842 cde4e2c2be45ea92d4113025489974bc37f556b918a3bd7b042b246d30dcc900000000 ffff 0100808080808080
 
 f85180808080808080a0ca32c18c40a75a837b2c085d332f9ca9ba8bc3136fa373dbc8f5370558cf04298080a042cde4e2c2be45ea 92d4113025489974bc37f556b918a3bd7b042b246d30dcc9808080808080
  13. Trie Update RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 헤더 트랜잭션 3 트랜잭션 4 영수증 4 영수증 3 RootHash - 2 Bob : 50 Mi chael : 450
  14. StateDB Pruning RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 헤더 트랜잭션 3 트랜잭션 4 영수증 4 영수증 3 RootHash - 2 Bob : 50 Mi chael : 450 Hash-24 Hash-23 Delete Queue
  15. StateDB Pruning RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 헤더 트랜잭션 3 트랜잭션 4 영수증 4 영수증 3 RootHash - 2 Bob : 50 Mi chael : 450 Hash-24 Hash-23 Delete Queue
  16. StateDB Migration RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 Hash-24 Hash-23 Migration Queue
  17. StateDB Migration RootHash - 1 Alex : 100 Bob :

    100 Mi ke : 300 chael : 400 … 헤더 트랜잭션 1 트랜잭션 2 영수증 2 영수증 1 Hash-24 Hash-23 Migration Queue
  18. StateDB Pruning & Migration Result 300~500GB 4TB StateDB Size StateDB

    Pruning / Migration 
 최근 1000블럭 기준
  19. Storage for nodes CN Consensus Node 
 Consensus & Block

    generation Latest Data 
 Less latency Nvme 
 Ramdisk PN Proxy Node 
 CN’s proxy for traf fi c distribution Latest Data 
 Less latency Nvme 
 Ramdisk EN End Node 
 Handles most API services All Data Nvme 
 Hdd - ebs 
 Cloud, noSQL