paust-team / paust-db

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

Define paust-db fault #163

Open kwjooo opened 5 years ago

kwjooo commented 5 years ago

Define paust-db fault

Problem

Purpose

Derive

Due date

kwjooo commented 5 years ago

client입장에서의 fault

client 입장에서의 fault는 서버의 오작동을 의미함

  1. tx가 put이 되지 않음(network 문제, byzantin node가 tx처리하지 않는경우)
  2. tx가 put이 되었다고 response가 왔으나 query로 조회가 불가능함(byzantine node가 tx를 위변조하는 경우)
  3. 잘못된 query response(ex.단일 node query 시 byzantine node에 의해 잘못된 response를 받는 경우, 부분 state에서 query response를 받는 경우)

Node입장에서의 fault

node 입장에서의 fault는 client 혹은 peer node의 오작동을 의미 함.

  1. invalid transaction이 전파된 경우(client에서 invalid한 transaction이 오는 경우 혹은 byzantine node가 invalid한 transaction을 전파하는 경우)
  2. 전체 state를 찾을 수 없는 경우
  3. 통신할 peer가 없는 경우
  4. 전체 state가 하나가 아닌 경우
elon0823 commented 5 years ago
1dennispark commented 5 years ago

@elon0823 의 말에 덧붙이자면 사용자가 타임시리즈 디비에서 fault를 받는 시나리오가 무엇이 있는지 고민하고 어떻게 해결하면 좋을지 생각해보는 것에서 시작해야할것같아요.

예를 들어, 처음에 제시한 tendermint의 consensus에서 validator node가 증가함에 따라 latency가 늘어난다고 했는데 그건 어떤 blockchain 이든 full-copy를 기준으로 생각한다면 전부 다 똑같이 latency가 늘어납니다.

오히려 데이터는 중복되어 처리성능을 높이되 모든 노드가 중복되지 않아도 되는 consensus를 생각한다면 tendermint의 consensus 알고리즘에서 조금만 변형을 일으켜도 가능하지 않을까 싶습니다.

그런데 어떤 transaction을 공유해야하고 하지 말아야하는지는 elon이 말했던 것과 같이 룰베이스로 처리할 수 밖에 없습니다.

cockroach db나 google global cache 서버 같이 사용자의 입력에 따라 데이터가 자연스럽게 balance를 갖을 수도 있고 zookeeper와 같이 공평한 관계에서 물리적으로 (수동) master를 바꿀 수 있도록 해도 됩니다.

어쨋든 기존의 discovery 알고리즘들에서 우리 니즈에 맞게 어떻게 변형시킬 것인지 생각해야합니다. 오히려 tendermint나 zookeeper 와 같은 라이브러리를 구현한다와 같은 방식보다는 그 근본을 더 알아야할 필요가 있습니다.

elon0823 commented 5 years ago

@co1god 노드는 full copy 하지 않고 부분적으로 copy를 한 상태로 consensus 가 이루어지는 네트워크를 생각하면서 설계를 해보면 되겠네요. 그러려면 기존의 pbft 기반의 블록을 쌓는데만 사용하는 것 뿐만 아니라 query 요청에 대해서도 합의하는 과정이 필요하겠죠?

kwjooo commented 5 years ago

https://github.com/paust-team/paust-db/issues/163#issuecomment-481974340 대부분의 blockchain consensus는 모든 node가 같은 state를 유지하기 위해 같은 message(block)을 전파받기 위함에 목적이 있습니다. tendermint는 모든 node가 같은 block을 전파받은 후 다 저장합니다. 전체 copy는 어떤 node에 요청을 하던 같은 query response를 바로 얻을 수 있다는 장점이 있습니다. 하지만 단일 node에만 query를 하지 않고 전체 state에 대한 response를 할 수 있는 logic이 있다면 full-copy에 비해 response 속도는 느릴 수 있으나 full-copy를 하지 않아도 됩니다.

kwjooo commented 5 years ago

@co1god 어떤 transaction을 공유하고 하지 말아야 할지에 대한 rule이 있다는 건 network의 모든 node가 같은 message를 받지 않아도 된다고 이해했는데, 이럴 경우 data integrity를 유지하기 어렵지 않을까요? 악의적인 node가 다른 message를 peer에 전달할 경우 정상적인 node입장에서 어떤 message가 올바른 데이터인 지 파악하기 힘들 것 같습니다