DHT implementation [Released May 16, 2019]
Develop a distributed hash table (DHT) implementation with the following specifications
1. There is a maximum all 100 nodes in the DHT implementation. The nodes have IDs
between 0 and 99 (i.e. a DHT space with 100 nodes)
2. The data to be stored in this system is in the form of text strings whose hash keys fall in
the same key space (0 - 99)
3. The nodes are arranged in a circular format, from 0 - 99, but plan for a sparse system,
e.g. a system with only 3 nodes (IDs 0, 41 and 80)
4. Hash keys are stored at a node whose ID is greater than or equal to the hash key.
5. A node only knows about two neighbours, one on either side (except for the first and
second nodes).
6. If data is to be entered in the DHT system, it is forwarded to the correct node for storage,
based on specification (4) above
7. If a new node wishes to join the DHT system, it will make a request to any participant
and will be directed to the place where it can join (between a higher ID and a lower ID) -
you may assume that there are no ID collisions.
Iteration 1: Create a Client and Server program in your favourite language and show that the
client and server programs can exchange messages. (Echo program where information sent
from one host is printed on another, and echoed back, for example - after converting from
lowercase to uppercase)
Iteration 2: Join DHT (5 - 55 - 99 - 0 - 5) message (88, 75, 3)
● Send Echo req: Extend the original Client-Server to multiple clients and servers that can
extend messages between themselves and only their immediate neighbours (based on
ID value). In this iteration, you should demonstrate the following functions
● Send echo request
● Send Echo reply
(In these cases, a node should print out what it is doing at any given time ( e.g. print the
ID of the echo request/reply originator when the message arrives)
● Inject a message into the DHT. As the message is passed around the DHT participants,
they should print out what they are doing with the message (e.g. passing it on, storing it,
etc)
Iteration 3: Find the location of a message given its key and send the key to the requesting
node.
Iteration 4: Join a DHT
Due Dates:
Iteration 1: Submit by Saturday, June 16
Iteration 2: TBA
Iteration 3: TBA
Iteration 4: TBA