This course explores advanced topics in highly scalable Internet services and their underlying systems architecture. Software today is increasingly being delivered as a service: accessible globally via web browsers and mobile applications and backed by millions of servers. Modern frameworks and platforms are making it easier to build and deploy these systems, such as Ruby on Rails and Amazon’s EC2.
Yet despite these advances, some concerns just don’t go away. Building scalable Internet services today still requires an understanding of topics like caching, load balancing, security, and monitoring. In this course we will examine these topics and more: the state of the art in building scalable Internet services.
Course lectures will be Tuesdays and Thursdays, from 3:00pm to 4:50pm in Phelps 3526. Lecture material will cover the essentials of building large scale Internet services. The lecture schedule and slides are available online.
The goal of the course project is to gain hands-on experience in building and deploying a scalable web service on the Internet. Students will do this using some of the latest web technologies in order to learn how to tackle scalability and fault-tolerance concerns. Projects will be conducted in agile teams of five students, and team will build their own scalable web site using fundamental web technologies and the Ruby on Rails framework.
Project-centric lab will meet every Wednesday from 5:00pm to 6:00pm in Phelps 3523. These mandatory labs offer a chance to collaborate with your teammates, demo your progress to the instructor, and get guidance.
By the end of this course CS291A students will be able to:
At the end of the quarter each group’s project will be assigned a grade based on their web service being of sufficient complexity, and the group’s description of their methodological approach to load testing and subsequent scaling via various techniques as described in their project write-up and/or in their project presentation. Objectively these components break down into:
On an individual basis, 5% of one’s grade is based on their participation in-class and on piazza.
The remaining 95% of an individual’s grade will be computed by multiplying their group’s project grade by an individual score. Individual scores are computed by suming the relative percent of work each individual confidentially assigns other individuals in their group.
For example, given a three person group with a group grade of 95%, everyone individually with 100% participation, and the following peer-graded scores:
Then Alice would end with a 106.4% (A+), Bob with 97.85% (A+) and Chuck with 80.75% (B-).
So that everyone knows where they stand within their group, we will confidentially conduct the peer grading process at each quarter interval in the course. Only the outcome of the final peer-grade will be used to compute the final grade.
Letter grades will be assigned as follows:
The number listed is the lower bound of the percent grade for the given range. It is expected that you are a relatively equal contributor in your group, with adjustments for significant positive outliers. Thus, please take note of the drop directly from C to F.