Skip to main content

Rafting Trip

34h 26m 24s
English
Paid

Embark on an Extraordinary Journey into Distributed Consensus

Imagine a winding river of network programming. At its mouth, closer to the sea, you see carefree users happily splashing in the waves, experimenting with web scrapers. As you move further upstream, you observe farms of HTTP servers, then message queue systems, RPC, and distributed objects. However, if you go further, past the last bridge, the landscape becomes grimmer: low-level system programming, sockets, threads, asynchronicity, strange and frightening constructs. Echo servers resonate in the narrowing gorge of complexity. Along the banks, there are remnants of abandoned projects and traces of developers who lost hope. It is here that your week-long journey begins: an attempt to implement the Raft distributed consensus algorithm from scratch. Perhaps—with no guarantees of success.

Why Take This Course?

Implementing Raft is objectively a challenging task that tests an engineer's maturity. The formal goal is to write Raft, but the task is broader: to develop a strategy for solving a complex problem. How to break down a large mechanism into manageable parts? How do these parts interact? Where to start? How to test? Working on this project makes a developer technically stronger and a more mature architect.

Prerequisites

This project is often undertaken as part of master's courses on distributed systems. You will need a confident command of the chosen programming language (Rust, Python, Java, Go, etc.), and the ability to test, debug, and work in the terminal. It is also desirable to have experience in network and system programming, as well as working with multithreading. While all necessary concepts are covered within the course, having basic preparation significantly helps.

Learning Format

The course is project-based and requires a significant amount of independent intellectual and practical work. Each day starts with discussions, demonstrations, and analyses of examples related to specific aspects of the project. However, most of the time is dedicated to individual development, providing a hands-on learning experience.

Development Environment

You are free to choose any programming language. During discussions, examples are usually given in basic Python as executable pseudocode. However, it is important to understand that a successful Raft implementation requires attention to detail, which is why many prefer to use more "strict" and instrumented environments.

Key Topics Covered

Throughout the course, fundamental aspects of parallelism and distributed computing are covered, including:

  • Socket network programming: Understanding the basics of constructing network programs.
  • Message exchange and communication patterns: Exploring RPC, queues, and similar mechanisms.
  • State machines: Building and utilizing state machines effectively.
  • Formal specifications and modeling: Including TLA+ for precise design.
  • Multithreading: Managing concurrent threads in an application.
  • Asynchronous programming: Handling tasks asynchronously to improve performance.
  • Object-oriented design: Principles of designing applications using OOP.
  • Software architecture: Crafting robust architecture designs.
  • Error handling and fault tolerance: Techniques for robust application resilience.

One of the main challenges is testing, monitoring, and debugging systems with nondeterminism and failures. Even in a configuration of five Raft nodes, it can run up to 60 threads in multiple processes, using timers, queues, and channels—creating extreme cognitive load. A significant part of the course is dedicated to strategies for managing this complexity.

Are You Ready?

Probably not. But that's what makes the journey interesting.

About the Author: David Beazley

David Beazley thumbnail

David Beazley is an independent author, educator, and researcher, widely known for his contributions to the Python community. Early in his career, he worked on high-performance scientific software, leading to the creation of SWIG—a compiler that enabled the integration of C/C++ code with Python and other dynamic languages. In 1999, he wrote Python Essential Reference, the first Python reference book.

From 1998 to 2005, David was an associate professor in the Department of Computer Science at the University of Chicago, where he taught courses on operating systems and networks. Since 2007, he has been developing his own educational project, Dabeaz LLC, humorously calling it a "one-man graduate school."

David is the author of the third edition of Python Cookbook (2013), the book Python Distilled (2021), as well as video courses and numerous well-known presentations ranging from live coding to experiments with WebAssembly. In 2023-2024, he taught a course on programming language design and implementation at Brown University, jointly with Shriram Krishnamurthi.

David holds a Ph.D. in computer science and master's and bachelor's degrees in mathematics.

Watch Online 10 lessons

This is a demo lesson (10:00 remaining)

You can watch up to 10 minutes for free. Subscribe to unlock all 10 lessons in this course and access 10,000+ hours of premium content across all courses.

View Pricing
0:00
/
#1: 001 Day 1 Morning
All Course Lessons (10)
#Lesson TitleDurationAccess
1
001 Day 1 Morning Demo
03:29:42
2
002 Day 1 Afternoon
03:24:22
3
003 Day 2 Morning
03:31:35
4
004 Day 2 Afternoon
03:28:03
5
005 Day 3 Morning
03:32:16
6
006 Day 3 Afternoon
03:15:17
7
007 Day 4 Morning
03:21:10
8
008 Day 4 Afternoon
03:31:49
9
009 Day 5 Morning
03:30:31
10
010 Day 5 Afternoon
03:21:39
Unlock unlimited learning

Get instant access to all 9 lessons in this course, plus thousands of other premium courses. One subscription, unlimited knowledge.

Learn more about subscription