Skip to main content

Rafting Trip

34h 26m 24s
English
Paid

Course description

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. The task of distributed consensus is to make a group of machines work as a single unit, resilient to the failures of individual nodes. This is the foundation for building reliable fault-tolerant systems. Raft is an algorithm that provides such behavior. The goal of the course is simple in formulation but difficult in essence: to implement Raft using only system libraries and engineering thinking. This may turn out to be the most challenging piece of system code you have ever written, tested, and debugged. Nonetheless, the experience will be extremely valuable.
Read more about the course

Why This Course

Implementing Raft is objectively a challenging task that tests an engineer's maturity. Formally, the goal is to write Raft, but in fact, 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

Such a 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. All necessary concepts are covered within the course, but a basic preparation significantly helps.

Learning Format

The course is project-based and requires a significant amount of independent intellectual and practical work. There are no presentations. 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.

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. This is why many prefer to use more "strict" and instrumented environments.

Key Topics

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

  • Socket network programming.
  • Message exchange and communication patterns (RPC, queues, etc.).
  • State machines.
  • Formal specifications and modeling (including TLA+).
  • Multithreading.
  • Asynchronous programming.
  • Object-oriented design.
  • Software architecture.
  • Error handling and fault tolerance.

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 — this creates 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.

Watch Online

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

Comments

0 comments

Want to join the conversation?

Sign in to comment

Similar courses

Atari 2600 Programming with 6502 Assembly

Atari 2600 Programming with 6502 Assembly

Sources: Gustavo Pezzi
Study low-level programming by creating games for the Atari 2600 in 6502 assembly language. Understand the architecture of consoles from scratch.
16 hours 30 minutes 54 seconds
Trigonometry Mastered

Trigonometry Mastered

Sources: udemy
Having trouble learning Trigonometry? Don't know where to start? Well you are in the right place. I want to welcome you to a course on Trigonometry where you w
10 hours 26 minutes 41 seconds
Create a Retirement Planning Tool with Excel

Create a Retirement Planning Tool with Excel

Sources: zerotomastery.io
Learn to build a retirement planning tool using Excel in this project-based course. Enhance your skills with formulas, charts, and interactive features.
2 hours 51 minutes 33 seconds
Become An Open Source Master

Become An Open Source Master

Sources: James Pearce
Open source is the key that can open many doors: incredible learning opportunities, career advantages, and influence on the entire industry.
2 hours 30 minutes 31 seconds
Grow From Junior To Mid-Level Engineer: L3 To L4

Grow From Junior To Mid-Level Engineer: L3 To L4

Sources: Alex Chiou
Congratulations on entering the world of technology and becoming a junior engineer! Now, how to make people stop calling you "junior" as soon as possible...
1 hour 49 minutes 20 seconds