JEPSEN

Training

Jepsen offers on-site and remote training classes for organizations. Contact aphyr@jepsen.io for scheduling and pricing.

For individuals, Jepsen occasionally offers remote training classes open to the public. You can subscribe to the announcements email list or follow @jepsen@jepsen.io on Mastodon for class announcements.

Distributed Systems Fundamentals

A ~16 hour lecture & discussion class for engineers who would like an overview of distributed systems concepts and techniques, from papers to production. We cover the basics of nodes and networks, common network protocols, clocks, availability, consistency, and a spectrum of distributed algorithms, followed by a discussion of latency scales, engineering patterns, and running services in production. A full outline of the course is available here.

There are no prerequisites for this class, but please, bring your questions, and any problems that you’d like to talk about! You may also wish to bring a notebook to take notes.

Notes for Organizers

This class is presented as a lecture accompanied by whiteboard illustrations, with frequent digressions for questions and discussion. A full outline of the course material is available here, but we can tailor the outline to your particular needs upon request.

Students are encouraged to ask questions! We recommend ~20-30 participants per class to encourage discussion, though any size is feasible.

A typical on-site schedule might run from 9:00 to 5:00 on two consecutive days, with an hour for lunch, and breaks every hour or so to stretch and refresh. When delivered remote, Jepsen recommends three five-hour or four four-hour days, to reduce Zoom fatigue.

Jepsen Training

A ~16-hour workshop which guides students through writing a Jepsen test: from a fresh cluster to finding a consistency anomaly in an open-source database. We begin with an an introduction to the Clojure programming language, discuss the architecture of the Jepsen library, and spend the bulk of the class writing a test itself. We’ll conclude with general discussion of distributed systems test design, systems modeling, and verification techniques.

Prior programming experience and proficiency at the command line are strongly encouraged. If you have Clojure experience that’s great, but if not, don’t worry! We’ll go over the language at the start of the class, and provide hands-on assistance throughout.

Notes for Organizers

This class begins with a lecture & slides introducing the Clojure language and the overall structure of Jepsen. The bulk of the class involves writing the test, alternating between Q&A, live-coding a section of the test, then helping each student with their own test. We’ll follow the outline available here. If time allows, we’ll conclude with a survey of test techniques in the body of published Jepsen tests.

Because of the individualized attention this class involves, we recommend no more than 40 participants per session.

If your team is already somewhat familiar with Clojure, and you have a small class size of ~10 participants, an accelerated, one-day version of this course is available for a reduced fee.

Requirements

  • Lectern with power and video hookups
  • A projector & screen
  • WiFi with SSH access to the public internet
  • A dedicated Jepsen cluster for each participant. Jepsen can provide clusters for you, or we can help you set them up internally
  • A computer for each participant, with SSH (22) and HTTP (8080) access to that participant’s Jepsen cluster

Raft Workshop

In two days, students learn the Raft algorithm for replicated state machine consensus, and, following the Raft paper, implement their own linearizable key-value distributed datastore. We use a pre-built Jepsen test, which simulates the network between nodes, and the requests made by clients, in order to verify that our distributed system works correctly. Our “network” messages are sent and received as JSON via stdin and stdout, allowing us to focus on concurrency and correctness. A class outline is available here.

Participants should be experienced with the command line and the programming language chosen for the course; organizers can choose which language is best suited for the class.

Notes for Organizers

This class can be taught in most programming languages, but is especially well-suited to scripting languages. Jepsen has Ruby and Python versions of this class available, and can write new ones upon request.

Because of the individualized attention this class involves, we recommend no more than 30 participants per session.

Requirements

  • Lectern with power and video hookups
  • A projector & screen
  • WiFi with access to the public internet
  • A computer for each participant which can run Java and the language selected for the class