Slide 1

Slide 1 text

오정균 JK.Oh Krustuniverse Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao. Snapshot Sync Implementation if(kakao)2022

Slide 2

Slide 2 text

য়੿Ӑ JK 자기소개 경력사항 [16~19] BSc. University of Groningen [19~22] GroundX (Klaytn, KAS) [22~] Krustuniverse (Klaytn Core Dev, Storage Part)

Slide 3

Slide 3 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 4

Slide 4 text

https:/ /if.kakao.com/2020/session/34 https:/ /if.kakao.com/2020/session/44

Slide 5

Slide 5 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 6

Slide 6 text

블록 동기화(Sync) 최신 블록을 처리하기 위해 이미 네트워크에서 처리한 블록들을 다운로드하고 검증 및 처리하는 과정 동기화 종류 Full Fast Snap 다운로드 데이터 블록헤더, 트랜잭션 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie 노드 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie Leaf 노드 특징 모든 트랜잭션을 재실행하고 모든 블록에 대해서 State 전이가 일어남 모든 State Trie 노드를 네트워크를 통 해서 다운로드 함 State Trie Leaf노드만 다운로드하고 로컬에서 재구성함 걸리는 시간 (~96M) 3 Weeks X 4 - 5 Days

Slide 7

Slide 7 text

블록 동기화(Sync) 최신 블록을 처리하기 위해 이미 네트워크에서 처리한 블록들을 다운로드하고 검증 및 처리하는 과정 동기화 종류 Full Fast Snap 다운로드 데이터 블록헤더, 트랜잭션 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie 노드 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie Leaf 노드 특징 모든 트랜잭션을 재실행하고 모든 블록에 대해서 State 전이가 일어남 모든 State Trie 노드를 네트워크를 통 해서 다운로드 함 State Trie Leaf노드만 다운로드하고 로컬에서 재구성함 걸리는 시간 (~96M) 3 Weeks X 4 - 5 Days

Slide 8

Slide 8 text

블록 동기화(Sync) 최신 블록을 처리하기 위해 이미 네트워크에서 처리한 블록들을 다운로드하고 검증 및 처리하는 과정 동기화 종류 Full Fast Snap 다운로드 데이터 블록헤더, 트랜잭션 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie 노드 블록헤더, 트랜잭션, 영수증 
 특정블록의 모든 State Trie Leaf 노드 특징 모든 트랜잭션을 재실행하고 모든 블록에 대해서 State 전이가 일어남 모든 State Trie 노드를 네트워크를 통 해서 다운로드 함 State Trie Leaf노드만 다운로드하고 로컬에서 재구성함 걸리는 시간 (~96M) 3 Weeks X 4 - 5 Days

Slide 9

Slide 9 text

블록과 상태(State) ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY … ࠶۾ ৔ࣻૐ 2 ৔ࣻૐ 1

Slide 10

Slide 10 text

블록과 상태(State) ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY … ࠶۾ ৔ࣻૐ 2 ৔ࣻૐ 1

Slide 11

Slide 11 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 12

Slide 12 text

- 헤더를 다운로드 및 검증한다 - 트랜잭션 데이터를 다운로드 및 검증한다 - 트랜잭션을 실행한다 - 상태전이가 일어난다 - 영수증을 리턴한다 - 최신블록까지 동기화한다 Full synchronization

Slide 13

Slide 13 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State … ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY

Slide 14

Slide 14 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State … ׮਍۽٘ ߂ Ѩૐ ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY

Slide 15

Slide 15 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State … ׮਍۽٘ ߂ Ѩૐ ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY

Slide 16

Slide 16 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 200 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 400 KLAY … प೯ ৔ࣻૐ 2 ৔ࣻૐ 1

Slide 17

Slide 17 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 200 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 400 KLAY … ৔ࣻૐ 2 ৔ࣻૐ 1

Slide 18

Slide 18 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 19

Slide 19 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 20

Slide 20 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 21

Slide 21 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 2

Slide 22

Slide 22 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 2 State 3

Slide 23

Slide 23 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 2 State 3 State 4

Slide 24

Slide 24 text

Full synchronization State 1 ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 2 State 3 State 4

Slide 25

Slide 25 text

- 헤더를 다운로드 및 검증한다 - 트랜잭션 데이터를 다운로드 및 검증한다 - 트랜잭션을 실행한다 (오래걸림) - 상태전이가 일어난다 - 영수증을 리턴한다 - 최신블록까지 동기화한다 Full synchronization

Slide 26

Slide 26 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 27

Slide 27 text

- 헤더를 다운로드 및 검증한다 - 트랜잭션 데이터를 다운로드 및 검증한다 - 특정블록까지 영수증 데이터를 다운로드한다 - 모든 상태 노드들을 다운로드한다 - Full 동기화로 전환 한다 - 최신블록까지 동기화한다 Fast synchronization

Slide 28

Slide 28 text

Full synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 200 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 400 KLAY … प೯ ߂ Ѩૐ ৔ࣻૐ 2 ৔ࣻૐ 1

Slide 29

Slide 29 text

Fast synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 100 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 300 KLAY … ৔ࣻૐ 2 ৔ࣻૐ 1 ׮਍۽٘

Slide 30

Slide 30 text

Fast synchronization ࠶۾ ೻؊ … ౟ے੥࣌ 1 ౟ے੥࣌ 2 State ৔ഐ: 200 KLAY ৔ࣼ: 200 KLAY ৠࣽ: 400 KLAY … ৔ࣻૐ 2 ৔ࣻૐ 1 ׮਍۽٘

Slide 31

Slide 31 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 32

Slide 32 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 33

Slide 33 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 34

Slide 34 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4

Slide 35

Slide 35 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 4

Slide 36

Slide 36 text

Fast synchronization ࠶۾ 1 ࠶۾ 2 ࠶۾ 3 ࠶۾ 4 State 4 pivot ࠶۾

Slide 37

Slide 37 text

Fast synchronization State State

Slide 38

Slide 38 text

Fast synchronization State State ׮਍۽٘

Slide 39

Slide 39 text

- 헤더를 다운로드 및 검증한다 - 트랜잭션 데이터를 다운로드 및 검증한다 - 특정블록까지 영수증 데이터를 다운로드한다 - 모든 상태 노드들을 다운로드한다 (오래걸림) - Full 동기화로 전환 한다 - 최신블록까지 동기화한다 Fast synchronization

Slide 40

Slide 40 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 41

Slide 41 text

- 헤더를 다운로드 및 검증한다 - 트랜잭션 데이터를 다운로드 및 검증한다 - 특정블록까지 영수증 데이터를 다운로드한다 - 모든 Leaf 노드들만 다운로드 한다 - 다운로드받은 Leaf 노드들로 로컬에서 트라이를 재구성한다 - Full 동기화로 전환 한다 - 최신블록까지 동기화한다 Snap synchronization

Slide 42

Slide 42 text

Fast synchronization State State ׮਍۽٘

Slide 43

Slide 43 text

Snap synchronization State ׮਍۽٘ State

Slide 44

Slide 44 text

Snap synchronization State State Trie ੤ҳࢿ State

Slide 45

Slide 45 text

- 기존 자료구조로 Account, Storage 데이터를 얻기 위해서 - 모든 Trie들을 순회하여 Leaf 노드에 도달해야 함 - O(log(n)) - LevelDB 읽기 성능이 굉장히 느림 - 이를 개선하기 위해서 새로운 데이터 레이어가 필요하다 State snapshot

Slide 46

Slide 46 text

- State snapshot 레이어 - 최신 블록(128개)들의 모든 Leaf 노드들을 저장 - Disk 레이어 (디스크) - 특정 State Trie의 모든 Leaf 노드들을 디스크에 Key/Value 형태로 저장한다 - O(log(n)) -> O(1) - Diff 레이어 (메모리) - 오직 특정 블록에서 바뀐 Leaf 노드들을 메모리에 저장한다 - 매 블록 처리할 때마다 하나의 레이어가 생성된다 - 128개이상의 Diff 레이어가 생기면, Disk 레이어로 머지한다 State snapshot

Slide 47

Slide 47 text

- State snapshot 레이어 - 최신 블록(128개)들의 모든 Leaf 노드들을 저장 - Disk 레이어 (디스크) - 특정 State Trie의 모든 Leaf 노드들을 디스크에 Key/Value 형태로 저장한다 - O(log(n)) -> O(1) - Diff 레이어 (메모리) - 오직 특정 블록에서 바뀐 Leaf 노드들을 메모리에 저장한다 - 매 블록 처리할 때마다 하나의 레이어가 생성된다 - 128개이상의 Diff 레이어가 생기면, Disk 레이어로 머지한다 State snapshot

Slide 48

Slide 48 text

- State snapshot 레이어 - 최신 블록(128개)들의 모든 Leaf 노드들을 저장 - Disk 레이어 (디스크) - 특정 State Trie의 모든 Leaf 노드들을 디스크에 Key/Value 형태로 저장한다 - O(log(n)) -> O(1) - Diff 레이어 (메모리) - 오직 특정 블록에서 바뀐 Leaf 노드들을 메모리에 저장한다 - 매 블록 처리할 때마다 하나의 레이어가 생성된다 - 128개이상의 Diff 레이어가 생기면, Disk 레이어로 머지한다 State snapshot

Slide 49

Slide 49 text

State snapshot ৠࣽ: 100KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 ୭न࠶۾ 1 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য

Slide 50

Slide 50 text

State snapshot ৠࣽ: 100KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 1 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য ৠࣽ: 500KLAY 130 ୭न࠶۾

Slide 51

Slide 51 text

State snapshot ৠࣽ: 200KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 2 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য ৠࣽ: 500KLAY 130 ୭न࠶۾

Slide 52

Slide 52 text

- 데이터 읽기 - 요청된 블록의 Diff 레이어부터 가장 오래된 Diff 레이어까지 순차적으로 데이터를 찾는다 - Diff 레이어에 존재하지 않는다면 Disk 레이어에서 찾는다 State snapshot

Slide 53

Slide 53 text

State snapshot ৠࣽ: 200KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 2 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য ৠࣽ: 500KLAY 130 ୭न࠶۾ ୭न ҅ઝ ੿ࠁ ઑഥ ৠࣽ ৔୍ ୍࢚

Slide 54

Slide 54 text

State snapshot ৠࣽ: 200KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 2 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য ৠࣽ: 500KLAY 130 ୭न࠶۾ 3ߣ ࠶۾੄ ҅ઝ ੿ࠁ ઑഥ ৠࣽ ৔୍ ୍࢚

Slide 55

Slide 55 text

State snapshot ৠࣽ: 200KLAY ৔୍: 200KLAY ୍࢚: 300KLAY ৠࣽ: 200KLAY ৔୍: 300KLAY … ৠࣽ: 400KLAY 129 2 ࠶۾ֈߡ 2 3 Diff ۨ੉য Disk ۨ੉য झշࢫ ۨ੉য ৠࣽ: 500KLAY 130 ୭न࠶۾ 1ߣ ࠶۾੄ ҅ઝ ੿ࠁ ઑഥ ࠛоמ

Slide 56

Slide 56 text

- State snapshot 동기화 - Trie 생성 외 다른 과정은 Fast Sync와 동일함 - 해시 범위 기반 요청 - 0x000…000 ~ 0xfff…fff - 스냅샷 데이터 검증 - 요청된 구간 내 첫번째 계좌와 마지막 계좌의 머클증명을 통한 검증 - State Trie 재구성 - 동적 피봇팅 - Heal 단계 Snap synchronization

Slide 57

Slide 57 text

- State snapshot 동기화 - Trie 생성 외 다른 과정은 Fast Sync와 동일함 - 해시 범위 기반 요청 - 0x000…000 ~ 0xfff…fff - 스냅샷 데이터 검증 - 요청된 구간 내 첫번째 계좌와 마지막 계좌의 머클증명을 통한 검증 - State Trie 재구성 - 동적 피봇팅 - Heal 단계 Snap synchronization

Slide 58

Slide 58 text

- State snapshot 동기화 - Trie 생성 외 다른 과정은 Fast Sync와 동일함 - 해시 범위 기반 요청 - 0x000…000 ~ 0xfff…fff - 스냅샷 데이터 검증 - 요청된 구간 내 첫번째 계좌와 마지막 계좌의 머클증명을 통한 검증 - State Trie 재구성 - 동적 피봇팅 - Heal 단계 Snap synchronization

Slide 59

Slide 59 text

- State snapshot 동기화 - Trie 생성 외 다른 과정은 Fast Sync와 동일함 - 해시 범위 기반 요청 - 0x000…000 ~ 0xfff…fff - 스냅샷 데이터 검증 - 요청된 구간 내 첫번째 계좌와 마지막 계좌의 머클증명을 통한 검증 - State Trie 재구성 - 동적 피봇팅 - Heal 단계 Snap synchronization

Slide 60

Slide 60 text

Snap synchronization (해시 범위 기반 요청) Peer 1 Peer 2 0x000…000 0xfff…fff 0x100…000 0x200…000 0x300…000 0x400…000 … Peer 3 Peer 4 root hash

Slide 61

Slide 61 text

Snap synchronization (스냅샷 데이터 검증) 0x000…000 Peer 1 0x100…000

Slide 62

Slide 62 text

Snap synchronization (스냅샷 데이터 검증) 0x000…000 Peer 1 0x100…000 root hash

Slide 63

Slide 63 text

Snap synchronization (스냅샷 데이터 검증) 0x000…000 Peer 1 0x100…000 root hash root hash !=

Slide 64

Slide 64 text

Snap synchronization (스냅샷 데이터 검증) 0x000…000 Peer 1 0x100…000 root hash

Slide 65

Slide 65 text

Snap synchronization (스냅샷 데이터 검증) 0x000…000 Peer 1 0x100…000 root hash root hash ==

Slide 66

Slide 66 text

Snap synchronization (State Trie 재구성) State ୭न࠶۾ Remote Local pivot झշࢫؘ੉ఠ ઓ੤ ҳр

Slide 67

Slide 67 text

Snap synchronization (State Trie 재구성) State ୭न࠶۾ Remote Local pivot झշࢫؘ੉ఠ ઓ੤ ҳр

Slide 68

Slide 68 text

Snap synchronization (State Trie 재구성) State ୭न࠶۾ Remote Local pivot State झշࢫؘ੉ఠ ઓ੤ ҳр

Slide 69

Slide 69 text

Snap synchronization (State Trie 재구성)

Slide 70

Slide 70 text

Snap synchronization (State Trie 재구성)

Slide 71

Slide 71 text

Snap synchronization (State Trie 재구성) ׮਍۽٘

Slide 72

Slide 72 text

Snap synchronization (State Trie 재구성)

Slide 73

Slide 73 text

블록동기화 Full Synchronization Fast Synchronization Snapshot Synchronization 결과 및 이슈

Slide 74

Slide 74 text

단계 설명 걸린 시간 Block 데이터 다운로드 헤더, 트랜잭션, 영수증데이터 등 다운로드 1-2일 State Sync Stage Snapshot 데이터 다운로드 및 Trie 생성 6시간 Heal Stage 수정해야할 State Trie Node 다운로드 4-5일 Snapshot Regeneration Trie 수정 후 snapshot 레이어 수정 2시간 Cypress 네트워크에서 약 96M 블록까지의 싱크를 기준으로함 - 아래와 같이 Heal Stage에서 가장 오래 시간이 소요되며 이를 개선 중 - Heal Stage에서 병목현상이 있음 결과 및 이슈

Slide 75

Slide 75 text

이더리움 기준 파라미터 수정 - number of difflayers (128+) - pivoting block interval (64+) - hash spaces (16+) Klaytn에서는 블록동기화 이외에 노드의 chaindata의 압축버전을 URL을 통해서 제공하고 있음 이를 다운받고 압축해제 하는데 약 1-2일정도 소요됨 Heal stage 성능개선을 통해서 약 snap sync도 1-2일정도 소요될 것으로 예상됨 결과 및 이슈

Slide 76

Slide 76 text

이더리움 기준 파라미터 수정 - number of difflayers (128+) - pivoting block interval (64+) - hash spaces (16+) Klaytn에서는 블록동기화 이외에 노드의 chaindata의 압축버전을 URL을 통해서 제공하고 있음 이를 다운받고 압축해제 하는데 약 1-2일정도 소요됨 Heal stage 성능개선을 통해서 약 snap sync도 1-2일정도 소요될 것으로 예상됨 결과 및 이슈

Slide 77

Slide 77 text

클레이튼에 대해 더 잘 알고 싶다면? 크러스트 유니버스는 지금 채용 중!