Category | Difficulty |
---|---|
HW | 5 |
Exams | 6 |
Project | 7 |
This class is an introduction to distributed system, namely, how to make a machine cluster work together. The ultimate goal of distributed system is ACID, Atomic, Consistent, Isolation, and Durability, and in this class you will get a full understanding of what these mean in industry context and how to achieve these with different techniques. There are two different versions of the class in Spring and Fall. The guide mainly focuses on the fall version.
Unless you do pure frontend, distributed systems is probably the most useful class at CMU (definitely not Parallel), since you are able to gain knowledge about the systems that power almost everything you can imagine on the internet, including Google search/drive/mail, YouTube, Flickr, CDNs, Pastebin...you name it. These concepts are very helpful for senior-level engineering positions at companies and will show up in interviews and during work.
This class uses Go
- Communication (Network Protocol)
- Synchronization (Distributed Mutual Exclusion Algorithm)
- Remote Procedure Call(Alternative way of communication)
- Distributed File System
- Logging and Crash Recovery (How to damage control in the case of failure?)
- Concurrency Control (How to make many machines agree on a consistent machine state?)
- Distributed databases (GFS / HDFS(Hadoop) / Spanner)
- Data-Intensive Computing (MapReduce / Hadoop)
- Internet Content Delivery (How does huge content delivery company like Netflix deliver so many videos to users all over the world efficiently?)
- In-memory cluster compute (Spark)
- Byzantine Fault Tolerance (What if one of our machine is hacked by bad people?)
- Virtualization (How virtual machine works)
- Publish-Subscribe System (LinkedIn Kafka Case study)
- P2P networks & blockchains
- Security Protocols (message encoding & key & certificate)
-
Homework: This is the written part of the assignment. Only four in total throughout the semester and takes up 15% percent of the final grade. These homeworks help you understand the concepts and are closely related to the problems that might show up on exams.
-
Project: This is the code part of the assignment. There are four projects in total, with each monty taking about one month. The first one will be implementing a very basic server-client model, giving you a light-hearted introduction to Go. The second project is implementing a distributed bitcoin miner (sounds cool right?!). The third project is raft algorithm, which is a protocol that allows a machine cluster to agree on the same machine state. The last project is a distributed backend of messaging system. The first and third project are easier and individual. The second and fourth project is in group.
-
Exams: The exams are 1.5 hours long in class. They are about the same level of difficulties with homework. There might be some questions asking about project details, but more of it will focus on the homework and lecture content. You will need to pass the exam in order to pass the class.
- Find yourself a responsible partner.
- Make sure you understand the details of lecture slides => Go to lectures!
- Debug your project to the best of your ability.
- Read the homework solution even if you have a good grade on your homeworks. There are many open-ended question in the homework. Reading solution will give you deeper and more comprehensive understanding of the concepts.
- The projects can be super time-consuming, budget at least 20 hours for each project, beside the first one.
- Distributed Systems Textbook: Tanenbaum is one of the gods of systems, and his Distributed Systems text is a classic.
- System Design Interview: Not rigorous, but this is a good book to understand the applications of what you learn in Distributed Systems. Also a good interview prep book.