Instructions
General In the previous assignment, you implemented a fault-tolerant key-value store using replication. To put it another way, you added more nodes to make your key-value store more resilient. However, resilience is not the only reason to take on the complexity of distributed systems. By adding more nodes to your key-value store and distributing key-value pairs across nodes in an intelligent way, you can increase the capacity and throughput of the key-value store. We call such a key-value store a sharded key-value store. In this assignment, you will extend the implementation of your fault-tolerant key-value store and add sharding to it. Your implementation will be a sharded, fault-tolerant key-value store, with better fault tolerance, capacity, and throughput than a single-site key-value store can offer.
• You must do your work as part of a team.
• You will use Docker to create an image that exposes a key-value store implementing the REST API described in the next section.
• Your key-value store does not need to persist the data, i.e., it can store data in memory only.
• You need to implement your own key-value store, and not use an existing key-value store such as Redis, CouchDB, MongoDB, etc.
• We will only grade the most recently submitted commit ID for each repository, so it is OK to submit more than once.
• The assignment is due 06/05/2020 (Friday) 11:59:59 PM. Late submissions are accepted, with a 10% penalty per day of lateness. Submitting during the first 24 hours after the deadline counts as one day late; 24-48 hours after the deadline counts as two days late; and so on.
• The order of name/value pairs in JSON objects is irrelevant. For example, {"foo":"bar","baz":"quux"}
is equivalent to {"baz":"quux","foo":"bar"}.
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
---|---|---|---|---|---|---|
29 | 30 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |