This course focuses on the theory and practice of distributed systems. Modern applications and services are increasingly distributed due to growing data sizes, plateauing sequential processing power, and the enormous number of connected devices. Virtually all web, mobile, and even PC applications now rely on networked services, calling out to backend servers to perform various functions, and many individual applications are implemented as a collection of cooperating processes or services. For example, distributed systems are used in massively multiplayer online games, cloud services, e-commerce and banking systems, peer-to-peer networks, social network, self-driving cars, telecommunication systems, and distributed databases and file systems.
In this course we will explore the need for distributed systems, understand characteristics of distributed systems, investigate where distributed systems are used, review the unique challenges of distributed systems, analyze solutions for common distributed systems problems, and gain practical knowledge of the systems and algorithms for building real distributed systems.
The course will cover the following topics:
· Distributed architectures
· Processes and threads
· Networking and communication mechanisms
· Naming and mapping
· Distributed time and ordering
· Fault tolerance
· Distributed consensus
· Distributed data
· Data intensive computing
The course will include weekly homework, two exams, and one project.
The weekly assignments will include a mix of practice problems and programming assignments designed to reinforce materials covered in lectures.
The project will be a 4-week team project that provides the opportunity to apply skills learned in lectures to develop a distributed system.
The final grade will be determined as follows:
· Homework assignments: 20%
· Project: 35%
· Midterm Exam: 10%
· Final Exam: 35%
The course will use the following textbook:
Maarten van Steen and Andrew Tanenbaum, Distributed Systems 3rd Edition