During the last semester of my college, we were asked to read the (chord paper) and implement it without fault tolerance. We built it with the following feature:
- A new node can join.
- A client can query a key in any node.
- A client can query a get request in any node.
- The current system has no replication. Keys are stored in only once place.
I want to add fault tolerance to the existing system. There is what I want,
- Each key is replicated in one or more nodes with some predefined rules.
- The replicated nodes talk to each other for consistency among them.
I also read raft paper and thinking in the direction of adding raft logic in the replicated nodes. For example node A has 5 replication, A1
,A2
,A3
,A4
,A5
, these five nodes will execute raft logic to maintain consistency.
How the system ends up losing availability (because from the raft logic, a node can not directly reply to the client without replicating the keys to more than 50% of the nodes. )? How should I trade-off?
Please suggest design choices for merging chord DHT and raft logic together.
Thanks!
Here are some of the links on Raft and Chord. raft_ref chord_ref