Course Syllabus

College of Engineering/Computer Engineering Department

CMPE 273-02, Enterprise Distributed Systems, Spring 2024

Course and Contact Information

Instructor(s):   Sriram Rao

Office Location: 

Telephone: 

Email: sriram.rao@sjsu.edu

Office Hours: Fridays 12-1p (Zoom)

Class Days/Time: TuTh 12-1:15p

Classroom: EE 337

Prerequisite: Java Programming. 

Co-requisite(s):   Concurrent enrollment in CMPE 272

Course Description

Introduction to application protocols for large scale distributed systems including object request brokers, asynchronous messaging, and Web services. Lab is based on using protocols to build distributed systems.

Course Format

This is an in-person course.

Course Learning Outcomes (CLO)

Upon successful completion of this course, students will be able to:

  1. define the terminology and common ideas of distributed computing.
  2. explain fundamental ideas of distributed computing.
  3. demonstrate experience with distributed computing principles in modern applications.
  4. explain the challenges present in a distributed environment.
  5. explain the differences and trade-offs between various solutions for distributed systems problems.

Required Texts/Readings

Textbook

There is no required textbook for this class.  Instead, there will be reading assignments centered on research papers that discuss in greater depth what we will be discussing in class.  

Reading

The reading schedule for this course will be intense. The readings are grouped into major categories, such as coordination, consistency, fault tolerance, etc. Within each category, we will read papers that address that issue in the context of different aspects of distributed systems.

To get the most out of readings, you will be assigned to a group for talking about the papers. Each group has three or four people, and you should discuss each paper sometime before class meets.  For each group, one member should writeup a summary of the discussion and post on Canvas before class.  This counts for 10% of the course grade.

Before you read the first paper assigned to this class, please read:  How to Read a Paper

Other technology requirements / equipment / material

Programming assignments will be a significant part of this course, so access to a computer is required.

Course Requirements and Assignments

I do not grade on a curve. The exams and projects measure what you are expected to have learned. There aren't many opportunities for extra credit apart from potential bonus questions on exams.

Programming Project: We will be doing individual programming assignments.  Individual programming assignments are not group projects. If students get help on assignments, even to resolve a seemingly trivial problem, it must be documented in the code with the name of the person rendering the help and a brief description of the help provided. Extensive help on a project will result in a reduced grade. Failure to document help, or any other forms of cheating will result in a failing grade on the assignment at a minimum and may result in failure of the course. See http://info.sjsu.edu/static/schedules/integrity.htmlLinks to an external site. for more information. Even in open source, you cannot copy code from one open source project to another without attribution.

Late submission:

  • There will be a 10% penalty for late submission on the Programming Project.  For submission that are more than a week past the deadline, there will be a 50% late penalty.
  • There will be a 50% penalty for late submission on the Paper Reading group discussion writeup.

Class Participation: You will be expected to read the papers we are discussing before we discuss them in class.   For each class, I will randomly select a group to lead the discussion about the paper being discussed in class.  To get credit for discussing a paper, each group will be expected to write a short summary about the paper on Canvas.  Short answers such as "Yes" or "I agree" or "I was thinking the very same thing" will not count as well.

Grading Information

Grades will be calculated based on the individual project grades, the two mid-semester exams, the final, discussion participation.  Please see Grading Policy for how you will be graded in this course.  Briefly, the weighted distribution is

Programming Project

40%

Midterm 1

15%

Midterm 2

15%

Final

20%

Paper discussion/participation

10%

The University Policy S16-9, Course Syllabi requires the following language to be included in the syllabus:

“Success in this course is based on the expectation that students will spend, for each unit of credit, a minimum of 45 hours over the length of the course (normally three hours per unit per week) for instruction, preparation/studying, or course related activities, including but not limited to internships, labs, and clinical practica. Other course structures will have equivalent workload expectations as described in the syllabus.”

Final Examination or Evaluation

This course will have a cumulative final exam given during exam week.  The final exam scheduled for this class is on 5/20/24 from 9:45-11:45am

There will be three in-class exams given in the semester (the last being the final exam). 

Classroom Protocol

This is my first time teaching this class.  The schedule listed below is tentative and may change based on student needs.  Additionally, this is also my first time trying out DSLabs as a programming substrate for this course.  We will learn about this system as part of the course :-).

This is your class. Please ask questions. Please come prepared. Do not engage in activity that may distract other students.

I do not take attendance except for the first two classes. Students not attending either of the first two classes will be dropped to make room for students on the waiting list. Attempting to get marked as present (by have someone else attend in your place or using technological deceptions) will be considered academic dishonesty and at a minimum will result in you getting dropped from the course.

University Policies

Per University Policy S16-9, university-wide policy information relevant to all courses, such as academic integrity, accommodations, etc. will be available on Office of Graduate and Undergraduate Programs’ Syllabus Information web pageLinks to an external site.. Make sure to review these policies and resources.

Programming Assignments

In this course you will gain practical experience with distributed systems by building a highly available, scalable, fault tolerant, and transactional key-value store. Key-value stores are widely used in cloud computing.

For the projects,  we will use the DSLabs framework from University of Washington.  See Programming Assignments page for more details.

This programming project comprises of individual programming assignments.  Individual programming assignments are not group projects.   The programs you submit must be your work and your work alone.

Caveats: 

  1. A requirement is that you do not publish solutions on public GitHub repos.
  2. The labs are known to be demanding and debugging can be time consuming.  So, please get started early for each lab.

Cheating/Academic Dishonesty

I take issues of Academic Dishonesty very seriously.  Do not cheat.  If we detect cheating in a programming assignment, you will get a 0 for that lab.  Repeat offense will likely lead to a F grade in the course.

CMPE 273-02, Enterprise Distributed Systems, Spring 2024

Course Schedule

Week Date Topic/Theme Reading(s)
Pre-read
  1. How to Read a Paper
  2. DSLabs Overview
  3. Setup DSLabs on your laptop and do Lab0.   (See above)
1 1/25 Introduction
  1. Introduction to Distributed System Design 
  2. Why Do Computers Stop - Jim Gray
  3. Lab1 (Out)
2 1/30 Remote Procedure Call
  1.  (g)RPC:
  2. Setup gRPC on your laptop and run HelloWorld
2 2/1 Replication
  1. VMWare vSphere 4.0
  2. (Optional) State Machine Replication
3 2/6 Time in a Distributed System
  1. Lamport Clock
  2. (Optional) Knowledge and Common Knowledge (Read up to Section 4)
3 2/8 Causality
  1. Distributed Snapshots
  2. Vector Clocks (Read Sections 1, 6, and 7)
  3. Lab2 (Out)
4 2/13 View changes and reconfiguration
  1. View stamped Replication Revisited
  2. (Optional) Morning Paper blog on View Replication Revisited
  3. Lab2 (Out)
4 2/15 Distributed Recovery
  1. Non-blocking Two phase commit
  2. Book chapter on Two phase commit (Read Ch. 7.1-7.4)
5 2/20 Caching and Consistency Models
  1. Shared Memory Consistency Models. (Classical paper: Read upto Sec. 6)
  2. Consistency Models Overview (Read upto Sec. 4)
5 2/22 More Consistency
  1. On Interprocess Communication (Read Sec. 4)
  2. Linearizability (Read Sec. 1)
6 2/27 Midterm I  
6 2/29 Consensus
  1. Google Tech Talk on Paxos (short)
  2. (Optional) Paxos Made Simple
  3. (Optional) The Part-time Parliament
7 3/5 Paxos Contd.
  1.  View stamped Replication Revisited (Read Section 4.2 and Section 4.3)
  2. (Optional) CAP Theorem
7 3/7 More Consensus
  1. Paxos Made Moderately Complex (overview, paper): Read either one once before class.  Refer to these as you work on Lab 3.
  2. Lab3 (Out)
8 3/12 Even more Consensus
  1. RAFT USENIX ATC'14 presentation (short)
  2. (Optional) RAFT Tutorial
8 3/14 RAFT Contd. and Update Propagation 
  1. RAFT
  2. Chain Replication
9 3/19 Byzantine Fault Tolerance
  1. Super cool 8-min video on BFT and Blockchain
  2. Practical BFT
  3. (Optional) The Byzantine Generals Problem
9 3/21 Distributed Hash Tables
  1. Chord
  2. (Optional) Consistent Hashing Blog Post
  3. (Optional) Tail at Scale
10 3/26 Eventually Consistent Systems
  1. Amazon-Dynamo
  2. Bayou
10 3/28 Strongly Consistent Systems
  1. Short Video explaining CAP Theorem
  2. CAP Theorem
  3. COPS
4/2 No Class: Spring break
4/4 No Class: Spring break
11 4/9 Sharding and Leases
  1. COPS (Contd.)
  2. Leases
  3. Lab4 (Out)
11 4/11 Memcache
  1. Scaling Memcache at Facebook
12 4/16 Midterm II  
12 4/18 Scalable Filesystems
  1. The Google Filesystem
  2. (Optional) The Quantcast Filesystem
13 4/23 Big Table  (Guest Lecture: Dr. Ram Kesavan, Google)
  1. Google's BigTable
  2. (Optional) Building Large Scale Internet Services
13 4/25 Spanner (Guest Lecture: Dr. Ram Kesavan, Google)
  1. Google's Spanner
14 4/30 Revisit the last parts of Spanner, Amazon DynamoDB (Guest Lecture: Dr. Ram Kesavan, Google)
  1. Amazon DynamoDB
14 5/2

Firestore  (Guest Lecture: Dr. Ram Kesavan, Google)

  1. Google's Firestore
15 5/7 Storing and serving tables: Iceberg (Part 1).  (Guest Lecture: Sumedh Sakhdeo, Linkedin)
  1. Apache Iceberg
  2. (Optional) Facebook's Tectonic Filesystem
  3. (Optional) Apache Ozone
15 5/9 Storing and serving tables: Openhouse (Part 2) (Guest Lecture: Sumedh Sakhdeo, Linkedin)
  1. Openhouse Blog
  2. (Optional) Hints for Computer Design
5/20/24 Final Exam and Wrapup 9:45-11:45am

Acknowledgements

This course uses DSLabs framework developed by Ellis Micheal and others from the University of Washington.  Additionally, this course adapts (and also uses) materials from courses taught by Tom Anderson, Doug Woos, Ellis Micheal, and Arvind Krishnamurthy, Michael Freedman and Kyle Jameson, Lorenzo Alvisi, and Ben Reed.  Thank you!

Copyright

Copyright Notice: These course materials, including, but not limited to, lecture notes, homeworks, and projects are copyright protected. You must ask me permission to use these materials.

I do not grant to you the right to publish these materials for profit in any form. Any unauthorized copying of the class materials is a violation of federal law and may result in disciplinary actions being taken against the student or other legal action against an outside entity. Additionally, the sharing of class materials without the specific, express approval of the instructor may be a violation of the University's Student Honor Code and an act of academic dishonesty, which could result in further disciplinary action. This includes, among other things, uploading class materials to websites for the purpose of sharing those materials with other current or future students.