Tsinghua University

Introduction to Distributed Systems
Spring 2013

Final Project  

Learning Objectives

After this course, students will learn:
  1. Concepts of the distributed system: threads, concurrency, dead/live lock, consistency, scalability, fault tolerant etc.
  2. How to organize (and analyze) a large scale distributed system into different components, make clean system abstraction.
  3. Know some basic distributed algorithms that can be applied in practical systems.
  4. Skills to build the distributed systems: TCP/IP, UDP, network data transfer, synchronization, threads, distributed locking, MapReduce, RPCs


  • Familiar with C programming language
  • Basic knowledge of operating system such as processes, threads, file systems
  • Some experiences of programming under Linux such as sockets programming, threads, processes, threads etc. Familiar with programming tools such as gcc, vim, Makefile
  • Basic knowledge of networking such as routing, TCP/IP, sockets, HTTP
  • Grading Scheme

    • 20% Readings and Homework
    • 40% Labs
    • 40% Final Exam
    The final example will closed-book (no book at all :) ) exam. The final exam will cover the material from the whole semester.

    Teaching Scheme

    There is no official textbook for this course. Each lecture will cover one topic of distributed systems and one or two paper will be discussed in detail. The papers will be put on the course website at least two weeks before the course. Students are required to read the paper before the lecture otherwise you will feel boring. You should at least read the introduction part of the paper and get the idea of what is the system and what specific problems the paper wants to solve.
    Slides are not quite useful during the lecture. We will discuss various aspects of each system in detail using blackboard. So, we will build every system on the blackboard other than see the shapes when they are ready (in slides). Students are encouraged to raise questions during the discussion. So, the common steps during a lecture will be raising the questions we want to solve, building the system to solve the problem, discussing various aspects of the system. After each lecture, there will be some homework. You are given one week to solve the homework assignment.
    Each lecture will last for about three hours. We will have two 10 minutes short breaks in the middle. You should actively participate in the class. If you have questions, you can raise up your hand and your question will be answered instantly if the answer is short otherwise the question will be recorded and answered after the lecture.

    Useful Materials

    No textbooks are required. The basic teaching technology is to build a system from scratch on blackboard and explain or discussion on the principles of the system. The following materials might be useful for you when you do programming:
    • Pthread tutorial
    • W. Richard Stevens , Stephen A. Rago, Advanced Programming in the UNIX Environment
    • The C++ Programming Language, Bjarne Stroustrup, Addison Wesley
    • W. Richard Stevens, Bill Fenner , Andrew M. Rudoff, Unix Network Programming, Volume 1: The Sockets Networking API
    Anyway, there are plenty of materials on the Internet cover the topics above.
    And the following books might be useful for you to understand some parts of the lecture:
    • Distributed Systems: Principles and Paradigms Andrew S. Tanenbaum, Maarten Van Steen
    • Operating Systems Concepts seventh edition, by Silberschatz, Galvin and Gagne

    Web Resources

    • The labs are borrowed from the MIT 6.824 Distributed Systems course. There are many good materials on their course web.
    • And also you can find some slides on this course website of NYU Distributed Systems course.
    • The CMU course of Distributed Systems provides you some extra information not covered by the courses above. And it is useful when you start doing your final project.
    2013 High Performance Computing Institute, DCST, Tsinghua