Skip to the content.

COMP385 - Distributed Systems Spring’21

Welcome to Distributed Systems for Spring’21!

My goal for this course is clear: you will be able to reason about distributed systems designs, including common challenges, solutions, and trade offs.

The course syllabus is located here.

Source of truth

The Canvas site for this course will contain the schedule and assignments. Materials will be distributed through Canvas.

Remote learning

Please read through the principles that I outlined for my fall classes. My ideas for how we will do remote learning in this class are similar.

The basics for this class are:

Readings

There is no book for the course. We will read a series of academic papers to explore foundational ideas in distributed systems design. Papers will be organized by general topic area. There may be supplementary readings assigned as we progress through the semester, these will be selected from various texts that will be distributed to you.

You should register for and download Tanenbaum and van Steen’s text here.

Programming projects

This is a systems course, and, as such, a large portion of the work you will be doing will be to construct software systems. There will be a sequence of 4-5 large programming assignments; in each you will be asked to construct a non-trivial distributed system. These assignments will range from an expected 10-30 hours of work. You should expect to be spending some time daily writing or debugging code. If you wait until the last minute, you will not succeed. However, if you start early, come to me when you are stuck or have questions, and put effort into these assignments, you will be successful and learn a great deal. I am committed to ensuring that everyone who puts in the necessary work and asks for help when needed is successful.

The first few weeks of the semester will involve learning a new programming language (Go), so don’t worry about your familiarity with particular languages coming into the course. Your first assignment will be a series of practice exercises in Go.

Setting up your environment for this course

All tools used in this course are cross-platform. However, many examples that I provide will be using a Unix-like environment (e.g., OSX or Linux). If you are using Windows, there may be slight differences, but you will be fine.

The command line

You will be able to do development using GUI tools for many parts of this course, but there will be elements of assignments that ask you to learn how to use the command line/shell.

All operating systems have a command-based interface accessed via a shell running in a terminal.

To learn the shell, I will spend a small amount of time talking about it in class, but you should spend some time to familiarize yourself with the command line.

Go development

We will be using the Go programming language in this course. There are several reasons for this, all centered around environment-independent programming projects:

Installing Go:

You should feel comfortable doing all development in the IDE. But note that there are many ways to write code, including with terminal-based tools.

If you want to take the opportunity to learn Vim (an extremely popular and powerful text editor), the command vimtutor walks you through the basics. There’s also a really cute online game. The Vim plugins YouCompleteMe and vim-go are very powerful, and give Vim all of the nice things that an IDE supplies. To use them, first install Vundle. You will see me using these tools along with tmux.

Containers

For at least one project, we will be using containers to run a service in a cloud environment. The container runtime we will be using is Docker. The easiest way to get started is to install Docker desktop.

Update: Lab 2 if you have windows

Instructions for running on cloud VM are here.

Cloud environment

We will also be using a cloud provider for some projects. There are three major cloud providers: AWS, Azure, and Google Cloud Platform. Initially, we will start using GCP. In the first week of class, look for an email from me with a coupon code that you will redeem for a chunk of free credit on GCP. The amount should be more than enough for you to use this semester, unless you don’t shut down your experiments.

Details for setting up a project and orienting yourself in the cloud console are here: GCP project setup.

You will need to install the GCP cloud SDK.

Git/Github

You should verify that your computer has Git installed. If not, you will have to install it.

We will be using Git and Github for version control and assignment submission in this course. In the first two weeks of the course you will complete a small assignment on git.

Feedback

At the end of this course, you will have an opportunity to evaluate me and your experience in this course. However, hearing your feedback way after the fact doesn’t allow me any opportunity to either emphasise the things you are finding helpful, or to correct the things that may give you friction. In order to provide you with an opportunity to give me feedback in semi-real-time, I’ve created this form. Your comments are anonymous (but if you either don’t believe me or want to be more cautious, you can fill it out in your browser’s incognito mode, so that you aren’t logged in to anything).

I will take all comments seriously, and try to do the best that I can to make sure that you are heard through my actions.