Scalable Web Systems
Description
The web has become a large and complex area for application development. Access to an abundance of open source languages, libraries, and frameworks has led to the quick and easy construction of a variety of applications with several moving parts working in coordination to present to the user the illusion of a single program. In reality, web applications are extremely difficult to get right. They involve a large collection of coordinated services, multiple databases, complicated user interfaces, security and performance issues, and ever changing third party services, spread across physical and virtual machines. These complications are further stressed by the large number of concurrent users that access these applications every second. This course investigates several well known web-based applications and the technology and software architecture used to scale them. We will also study specific topics related to scalability in software design in the context of web application architecture. This course is hands-on and heavily project-based; students will build, monitor, and load test a distributed system composed of coordinated services. This course counts as an Elective for the CS and INFORM Majors.
Prerequisites: COMPSCI 320 or COMPSCI 326 with a grade of C or better. 3 credits. Instructor: Tim Richards.
Overview
You build and break real scalable systems before we put names to the patterns you discover. The vocabulary of the field (sidecars, ambassadors, sharding, scatter/gather, work queues, ownership election) comes after you have already seen why each pattern exists. You containerize services with Docker, wire them together with Docker Compose, put them behind Caddy as a load balancer, add Redis caching and queues, measure them under load with k6, and watch them in Prometheus and Grafana.
The textbook is Designing Distributed Systems, 2nd edition, by Brendan Burns (O’Reilly), free to UMass students through the library. You need a laptop or desktop that can run Docker; a Chromebook or tablet is not enough.
How the course is structured
- Knowledge units. 18 units, two a week, finished by Week 10 of the 14-week term: distributed systems fundamentals, containers, serving patterns, resilience, event-driven processing, coordination, and observability.
- Lectures. Twice a week, in person, and not where you meet the material for the first time. You read each unit before its lecture and take a short reading check. In class you work through what the check showed, do a paired activity built around a real design decision, discuss, and submit an exit ticket.
- Homework. Four autograded assignments in Gradescope, one every two weeks, each building part of a distributed system with real tools.
- Quizzes. Six timed quizzes, roughly every other week, with up to three attempts.
- Team project. Teams of 3 to 4 build a simulated scalable system across six sprints, in the spirit of Computing for the Common Good: synthetic data, injected latency, scripted failures, real measurement. Each team has a TA as its liaison. Weeks 11 to 14 are project time. The project ends with the repository, a recorded demo under load, a poster, and individual reflections.
- No exams. Grades come from in-class work, reading checks, quizzes, homework, sprints, and the project. No curve, no extra credit.
AI tools follow a clear, level-based policy: they may help you learn, but no AI writes work that is being evaluated. The details are in the syllabus.
Canvas opens to enrolled students at the start of the term. Staff, office hours, and the dated calendar are posted there.