paust-team / paust-db

GNU General Public License v3.0
6 stars 5 forks source link

Simple P2P structure based data storing design #169

Open elon0823 opened 5 years ago

elon0823 commented 5 years ago

Intro

issue #161 을 진행하면서 block chain의 구조를 만들고 block 끼리 chaining 을 형성하여 validation 을 하고 transaction list 를 block 에 담는 구조를 가질 필요가 있을까에 대한 고민을 함

Problem

Approach

Base structure

(비잔틴, 보안 측면을 제외한 분산 데이터 저장관점(PUT) 에서만 생각해본 구조)

  1. 각 노드는 k개의 여러 노드에게 연결되는 p2p 네트워크
  2. 한 노드에 PUT 요청이 들어오면 로컬에 데이터를 저장하고(rocksdb) 그 노드와 연결된 k개의 노드에게 데이터를 저장하게끔 전파(propagation)함. 전파받은 노드는 더 전파 안하고 자신만 저장해놓음 (default depth=1)
  3. 한 노드에게 QUERY 요청이 들어오면 해당 range 의 데이터가 있는지 체크해서 있으면 넘겨주고 없으면 QUERY 를 propagation 하여 필요한 데이터 수집 후 return 함
  4. QUERY 시에 없는 데이터는 로컬에 갱신 (QUERY 가 많이 들어올수록 full copy 에 가까워짐)
  5. QUERY를 받지 못한 노드들은 최신 데이터를 유지하지 못하게 되므로 Node 마다 Update time 값을 설정하여 매 Update time interval 마다 n range 만큼의 data 를 다른 노드에게 query 하여 로컬에 갱신하도록 함 (이빨빠진 time-series) - 짧을수록 full copy 에 가까워지고 길 수록 비어있는 부분이 많아짐
  6. 그러면 노드는 참여할 때 fullcopy 가 아닌 상태로도 사용가능한 상태가됨. 물론 시작할 때 total timerange 에 대해서 propagation query 를 하면 처음부터 full copy 로 시작할 수 있을듯

Next Experiment point

kwjooo commented 5 years ago
elon0823 commented 5 years ago
dragon0170 commented 5 years ago
  • 한 노드가 propagation 을 대기 했다가 결과를 모아서 return 을 하는것이 아닌 전파되는 도중에 데이터가 다 모이면 바로 리턴해줄 수 있는 구조에 대한 실험

원하는 데이터를 다 모았는지 확인하기 위해서는 어떤 노드가 어떤 데이터를 가지고 있는지 DHT와 같은 방식으로 가지고 있으면 필요한 노드에만 query를 propagate 할 수 있어서 효율적일 것 같습니다.

elon0823 commented 5 years ago

5/8 Research Note

node discovery, routing 을 적절히 하는 방법을 고안하기 위해서 기존의 p2p 시스템을 조사하고 있음

Old P2P structure design

Paust-db P2P structure design

등등 고려할 부분이 많음. p2p 연결을 형성하고 routing table 을 어떻게 만들고 관리할지에 집중하고있음

elon0823 commented 5 years ago

5/10 Research Note

위 커멘트에 대한 아이디어 제안

2. source 기준, traffic 기준, locality 기준 등 을 통하여 최대한 연관성이 있는 노드와의 연결 - DHT routing table 을 유지할때 hashing을 통해서 나온 node id의 근사치로 가까움을 판단하는 것이 아닌 time series 처리에 맞는 routing table 형성할 필요성 있음 (어떤 기준을 통해서 노드를 묶고 분류할 수 있는가?)

CLOCK: Circler Timeseries p2p network

Time 은 계속 증가만 하므로 blockchain 처럼 앞으로만 뻗어가는 linked list 형태가 적합해보이지만, 시계(CLOCK)는 환(Circle) 형태임

Summary

elon0823 commented 5 years ago

5/15 Research Note

Summary

elon0823 commented 5 years ago

네트워크간의 연결과 수요자와 생산자를 연결해주기 위한 분산저장구조, 라우팅 구조 만 고려할 것이 아닌 네트워크안에서 구성된 노드들을 통해서 operation 을 처리하는 역할도 겸해야함. storage + computation

elon0823 commented 5 years ago

5/20 Research Note

Source Structure

Source Meta

Source Data

Node Definition

Super Node

Role

Bootstrap Node

Role

Provider Node (Source Node)

Role

to Discuss

Consumer Node

Role

to Discuss

Computing Node (Storage Node, Computation Node)

Role

elon0823 commented 5 years ago

Super node 의 필요성에 대해서는 생각해볼 필요가 있음 모든 노드(cell) 이 유기적으로 flexible 하게 역할을 바꿔갈 수 있는 구조가 필요함 source node, consumer node (sink node) 또한 pdsn 내의 한 노드로써 동작해야함 위에서 써놓은 consumer node 는 client 의미로 써져있고 provider node 는 source provider client 를 의미함 source node pdsn 내에 source node 들이 존재해서 provider 들이 source 를 복사할 point 가 되는 노드가 되어야함. 물론 이 source node 들이 client 의 요청에 따라서 유기적으로 가까운 노드가 source 노드가 되어서 처리될 포인트들을 client 근처로 땡겨오던가, sink 노드가 클라이언트 근처로 되어서 땡겨오는게 좋은가 등은 생각해봐야하는 관점

elon0823 commented 5 years ago

현재 pdsn 내에서 수행되어야 하는 transfer 의 기능과 operation 의 기능 2가지의 실험을 진행하기 위한 base 를 만들고 있음. 토폴로지를 어떻게 구성할 것인가에 대하 많은 고민을 해봤는데 기존에 네트워크가 어떻게 연결되있고 누구랑 연결되고 몇개랑 연결되며 p2p 네트워크를 형성하는 것을 정하기 힘듬. client 의 요청에 따라서 효율적인 path 가 다시 만들어 져야 하기 때문에 미리 연결을 유지해놓는 것이 아닌 torrent 의 tracker server 기능처럼 노드들에 대한 정보를 기록하도록(super node 나 bootstrap node 가) 하여 client 요청에 따라 path 를 정해서 연결이 되도록 하는 구조가 되는 base 를 만들고 있음. 차주 내에 완료하여 transfer 역할을 위한 관점,factor 들을 조사하고 살펴볼 예정(kafka partioning, time windowing, ordering, bath 등등)