The goal of these Projects are to develop the skills of designing and implementing distributed protocols over multiple machines. They are more about designing and understanding the protocols/systems rather than programming.
Project 1 is a simple application of MapReduce. It familiarizes you with the Go language and the distributed coding environment.
Project 2 works on a more complicated protocol—distributed snapshot. It expects you to tackle more challenging designs.
Project 3 and 4 implement Raft, a complex consensus protocol. It expects you to solve difficult problems in distributed systems.
Some of the assignments are adapted from MIT's 6.824 course. Thanks to Frans Kaashoek, Robert Morris, and Nickolai Zeldovich for their support.