P2P 네트워크 연결 관리


이더리움 P2P 네트워크 계층에서는
 각 노드의 품질을 모니터링하고 통계를 낸 후
 좋은 노드 와 나쁜 노드를 구별하고,
 좋은 노드와의 연결을 지속적으로 유지하기 위해 노력한다
 좋은 노드는
 네트워크에 연결되어 작동되는 시간이 길고 다른 노드의 요청에 빠르게 반응하는 노드를 말한다.

노드에는IP 주소, TCP/UDP 포트, 노드 의 공개키인 노드 ID 정보를 담고 있다

type Table struct
 { count int // 노드들의 숫자
 buckets [nBuckets]bucket // 알고 있는 노드들의 목록
 nodeAddedHook func(Node) // 테스팅 목적
 self *Node // 로컬 로드의 메타데이터 }

type Node struct { IP net.IP
 // IP 주소 UDP, TCP uint16
 // TCP/UDP 포트 번호 
ID NodeID // 노드의 공개 
}



 네트워크에 접속한 노드는 부트스트랩 노드에 접속하여 노드ID 목록을 전달받은 후, 해 당 노드들에 findnode 패킷을 보내 접속을 시작하고 부트스트랩 노드와의 접속을 중단한다


이더리움 데이터저장


Key Value의 저장소인 레벨 DB에는
상태트리,
트랜잭션 머클 트리,
리시트머클 트리,
EVM의 비휘발성 저장소 등
[스토리지]에 저장될 필요가 있는 모든 정보가 레벨DB에 저장된다,

 

레벨DB란?


NOSQL 데이터베이스
인덱싱과 멀티태스킹은 지원하지않는다.
구글의 데이터 압축 알고리즘인 스내피를 사용하여 저장공간을 효율적으로 사용한다

스내피(Snappy)는 구글에서 자체 개발한 압축 라이브러리이며, 최고의 압축률 보다는 적정 수준의 압축률을 제공하면서 빠르게 압축하고 해제하는 것을 목표로 한다. 또한 초당 250MB 정도를 압축하고, 다른 압축에 비해 CPU 자원도 덜 소모한다. 스내피의 공식 홈페이지에서 여기서 간단한 소개문서와 라이브러리를 다운로드할 수 있다.


레벨DB의 기능


데이터베이스 생성, 개방

데이터베이스 내의 콘텐츠를 조회, 입력, 삭제

GET,PUT, DELET 명령어를 이용하여 래핑한다

이더리움 데이터베이스

이더리움은 레벨DB를 래핑하여사용한다.

이렇게함으로써 나중에 코드의 변경없이도 레벨DB가 아닌 다른 데이터베이스로 손쉽게 교체할 수 있다.

이더리움이 레벨DB를 사용하는 이유는 결국 
다른데이터베이스로 손쉽게 교체할 수 있고
단순하기 때문에 안정성이 높다는장점때문이다

 

관련된 자세한 내용은 여기서 https://steemit.com/ethereum/@sigmoid/level-db-4-rlp

복사했습니다!