Open elon0823 opened 5 years ago
- 한 노드가 propagation 을 대기 했다가 결과를 모아서 return 을 하는것이 아닌 전파되는 도중에 데이터가 다 모이면 바로 리턴해줄 수 있는 구조에 대한 실험
원하는 데이터를 다 모았는지 확인하기 위해서는 어떤 노드가 어떤 데이터를 가지고 있는지 DHT와 같은 방식으로 가지고 있으면 필요한 노드에만 query를 propagate 할 수 있어서 효율적일 것 같습니다.
node discovery, routing 을 적절히 하는 방법을 고안하기 위해서 기존의 p2p 시스템을 조사하고 있음
등등 고려할 부분이 많음. p2p 연결을 형성하고 routing table 을 어떻게 만들고 관리할지에 집중하고있음
위 커멘트에 대한 아이디어 제안
2. source 기준, traffic 기준, locality 기준 등 을 통하여 최대한 연관성이 있는 노드와의 연결 - DHT routing table 을 유지할때 hashing을 통해서 나온 node id의 근사치로 가까움을 판단하는 것이 아닌 time series 처리에 맞는 routing table 형성할 필요성 있음 (어떤 기준을 통해서 노드를 묶고 분류할 수 있는가?)
Time 은 계속 증가만 하므로 blockchain 처럼 앞으로만 뻗어가는 linked list 형태가 적합해보이지만, 시계(CLOCK)는 환(Circle) 형태임
Node 는 endpoint 에 바로 연결되는 것이 아닌 Chord, pastry 처럼 virtual ring 형태로 네트워크가 연결되는 구조
Finger table, Routing table 을 구성하는 것이 핵심
Ring 은 특정한 time cycle(C)로 이루어 짐. 예를 들어 cycle(C)이 60sec 이면 0~59 의 range 를 가질 수 있음 (60개의 노드만 배치될 수 있다는 것은 아니고 coverage 임
Node 의 참여하는 Timestamp, data 가 put 되는 Timestamp 를 C로 mod 연산을 통하여 해당 ring 에 배치할 수 있음
네트워크를 이루기위해 초기 B개의 bootstrap 노드로 ring 을 형성할수 있음. 예를들어 B=5 , C=60 이면 각각의 부트스트랩노드는 0 ~ 11sec, 12 ~ 23, 24 ~ 35, 36 ~ 47, 48 ~ 59 의 range 를 cover 하는 node 가 될 것임
특정 노드가 참여될때 다음과 같은 형식의 node id 를 부여받음 [bootstrap_index][ts mod C][node metadata hash prefix m bit] ex) 1 3 AB84
C가 커질 수록 각 node 가 연속된 time range 를 많이 포함하고 있을 것임 -> 노드의 정책이나 스팩에 따라 노드가 저장하고 포함하는 coverage 를 조정하여 배치가 될 수 있을까?
각 Bootstap 노드는 각 해당 range 에 대하서는 full copy 노드임. 즉 bootstrap 노드가 1 개면 완전 풀복제 네트워크며 Bootstrap 노드가 많아질수록 분산률이 높아짐
모든 요청들이 bootstrap 노드를 통해 중재되는 것이 아닌 기존의 p2p 알고리즘에서 차용하는 라우팅 방식과 비슷하게 가도록 함. bootstrap 은 보조, failure 대비를 위한 안정적인 시스템을 형성하려고 있는 강화노드 같은 느낌
네트워크간의 연결과 수요자와 생산자를 연결해주기 위한 분산저장구조, 라우팅 구조 만 고려할 것이 아닌 네트워크안에서 구성된 노드들을 통해서 operation 을 처리하는 역할도 겸해야함. storage + computation
attach
하고 source meta 정보를 형식에 맞게 작성하여 register
를 함update
되고 key 가 다르면 등록이 안되며 다른 source path 를 사용하여야함 (source path 는 domain을 사는게 우선순위 인 것 처럼 처음 등록한 노드의 소유가 되는 것임) put
요청을 받으면 그 때 부터 첫 소스 데이터를 전송하는 스트림을 열어서 전송
-해당 소스에 대한 수요가 없어지면 notify 를 받아서 connection 을 종료시키고 스트림을 더이상 보내지않음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 노드가 클라이언트 근처로 되어서 땡겨오는게 좋은가 등은 생각해봐야하는 관점
현재 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 등등)
Intro
issue #161 을 진행하면서 block chain의 구조를 만들고 block 끼리 chaining 을 형성하여 validation 을 하고 transaction list 를 block 에 담는 구조를 가질 필요가 있을까에 대한 고민을 함
Problem
장부
의 특성에 맞음. 이전의 거래가 현재 값에 영향이 있음.Approach
Base structure
(비잔틴, 보안 측면을 제외한 분산 데이터 저장관점(PUT) 에서만 생각해본 구조)
Update time
값을 설정하여 매Update time interval
마다 n range 만큼의 data 를 다른 노드에게 query 하여 로컬에 갱신하도록 함 (이빨빠진 time-series) - 짧을수록 full copy 에 가까워지고 길 수록 비어있는 부분이 많아짐Next Experiment point
내가 가지고 있는 데이터가 최신본이라는 것을 확신할 수 있는 algorithm. 해당 노드가 어떤 time range 를 가지고 있는지 등? 에 대한 정보들을 유지하도록 하는 구조가 필요할듯. ex) 1분 1초 10ms 데이터는 node1 에, 1분 1초 20ms 데이터는 node2 에 PUT 이 들어왔을 때, node 1 에 1분1초-2초 QUERY 가 들어온다면? node1은 1분1초~2초 데이터가 있지만 내가 그 사이 전부를 가지고 있는가를 보장할 수 있나? - commit 개념이 필요할것인가?
노드가 참여제외 됬을때를 대비하기 위한 정책. 최소한의 몇개의 노드가 살아있어야지 네트워크가 보장될 수 있는지, 최소한 몇개의 노드가 몇개의 다른 노드와 연결되있어야하는지 등에 대한 가용성 보장 조건 실험. ex)full copy 와 가까운 majority 노드를 최소 몇개 유지해야한다 던가, majority 가 죽었을때 다른 특정 노드를 majority 노드로 유지하기 위한 정책, 방안 등에 대한 실험
Update time 을 threshold 값으로 주는 것 보단 해당 노드의 상태(QUERY range의 시간이 길다던가, space complexity 가 높거나) 에 따라 값을 정할 수 있는 함수 형태로 나올 수 있도록 하는 수식이 필요 - factor 들을 어떤 걸 사용할지도 고민 필요함
short-term 정책에 따른 depth 값 조절하여 최대한 많은 노드에게 바로 업데이트되도록 할 수 있을듯. PUT 시에 전파해서 타고갈 depth 를 깊게 할 수 록 많은 노드들이 최신데이터를 유지할 수 있음 (jayden idea)
해당 노드의 저장공간이 가득찼을때 가지고 있는 데이터를 다른 노드들에게 분산해서 저장하도록 하는 구조 (도중에도 node 의 availability 는 보장해야함)
노드의 상태나, 메타 데이터의 종류에 따른 (데이터의 특성에따른?) 분류로 데이터를 쌓이게 할 수도 있지 않을까? 완전 랜덤하게 저장되는 PUT 보단 어떤 clustering analysis 형태를 띄며 저장되는 구조라면?