Hello! This is the course project repo for the "Rafting Trip" course. This project will serve as the central point of discussion, code sharing, debugging, and other matters related to the project.
Although each person will work on their own code, it is requested that all participants work from this central repo. First, create a a branch for yourself:
bash % git clone https://github.com/dabeaz-course/raft_2021_03
bash % cd raft_2021_03
bash % git checkout -b yourname
bash % git push -u origin yourname
Do all of your subsequent work in your branch of this central repository.
The use of GitHub makes it easier for me to look at your code and answer questions (you can point me at your code, raise an issue, etc.). It also makes it easier for everyone else to look at your code and to get ideas. Implementing Raft is hard. Everyone is going to have different ideas about the implementation, testing, and other matters. By having all of the code in one place, it will be better and more of a shared experience.
I will also be using the repo to commit materials, solutions, and other things as the course date nears and during the course itself.
Finally, the repo serves as a good record for everything that happened during the course after the fact.
Cheers, Dave
The course is conducted live from 09:30 to 17:30 US Central Daylight Time (UTC-05:00). Here are details about the Zoom meeting:
Topic: Rafting Trip
Join Zoom Meeting https://us02web.zoom.us/j/84678466137?pwd=VVFkaE13U3doZ2swWll1ZjR1UWJpdz09
Meeting ID: 846 7846 6137 Passcode: 886054
I will be in the meeting approximately 30 minutes prior to the start time if you need to test your set up.
Presentation slides are available in the Raft.pdf file.
For live chat during the course, we use Gitter. Here is a link:
Our primary source of information on Raft is found at https://raft.github.io. You should also watch the video at https://www.youtube.com/watch?v=YbZ3zDzDnrw. Of particular interest is the Raft Paper.
One of the biggest challenges in the Raft project is knowing precisely where to start. As you read the Raft paper, you should be thinking about "where would I actually start with an implementation?" There are different facets that need to be addressed. For example, at one level, there's a networking layer involving machines and messages. Maybe this is the starting point (at the low level). However, there's also the "logic" of Raft (e.g., leader election with leaders, followers, and candidates). So, an alternative might be to approach from a high level instead. And then there are applications that might utilize Raft such as a key-value store database. Do you build that first and then expand Raft on top of it?
The other challenge concerns testing and debugging. How do you implement it while having something that you can actually test and verify?
- Course Setup (2 mins)
Video from the live session will be posted here.
Day 1
- Course Introduction (74 min)
- Project 1 (29 min)
- Project 1/2 (5 min)
- Project 2 (21 min)
- Project 2 (21 min)
- Project 2 (9 min)
Day 2
- Project 3 (21 min)
- TLA+/Project 4 (60 min)
- Project 4 (23 min)
- Project 4/5 (30 min)
- Project 5/6 (30 min)
Day 3
Day 4
Day 5
- Project 10 (50 min)
- Project 10 (24 min)
- Project 10 (8 min)
- Project 10 (15 min)
- Course end (32 min)
The following project covers some background material related to socket programming and concurrency that might help with the course:
The Raft project is similar to what might be taught in a graduate distributed systems course such as MIT 6.824. A lot of information is available on the course website.
The following projects guide you through one possible path for implementing Raft. This is not necessarily the only way to do it. However, it's an approach that has often worked in the past.