Cloud computing is being widely adopted by enterprises of all sizes due to the low initial investment required, attractive operating costs, and elastic capacity that can best serve the highly variable demands of modern applications. Software engineers must be familiar with cloud computing technologies since many new applications they develop will be deployed “in the cloud”, and existing applications will often require integration with cloud-hosted services to take advantage of new capabilities.
This course provides an introduction to cloud computing with specific consideration for application development in two contexts: highly scalable (or so-called “web-scale”) web applications, and enterprise applications in a hybrid environment comprising both on-premises and cloud infrastructure. We will focus primarily on infrastructure and platform services, and will introduce software-as-a-service from the perspective of a consuming application. The course will emphasize practical applications of cloud computing technologies, with sufficient exploration of their theoretical underpinnings to inform architectural, design, and implementation decisions. Topics to be covered include:
- A (very) brief history of distributed computing and the motivation for cloud computing
- An overview of cloud computing service models and economics
- Virtualization and the Infrastructure-as-a-Service (IaaS) service model
- Application concurrency and data consistency models
- Cloud storage and data management considerations (S3, CloudFront)
- Cloud databases
- Authentication, authorization, and accounting in cloud computing systems
- Inter-service communication (messaging, notifications, etc.)
- Cloud infrastructure for "big data” analytics (filesystems, tools, techniques)
- Cloud services and mobile applications
- Network considerations and application deployment models
- Automated operations and the Platform-as-a-Service (PaaS) service model
- Integration and hybrid cloud/on-premises applications
- Cloud infrastructure security, privacy, and policy compliance
- Designing for fault-tolerance and disaster recovery strategies
We will use commercial cloud offerings provided by Amazon Web Services to build and deploy "real” cloud-hosted applications.
During the first six weeks of the course, a series of short programming assignments will be due each week. During the last four weeks we will work towards a capstone project that brings together many of the concepts and technologies covered in the course. Some of the earlier programming assignments will provide components to be used in our capstone project so it is important to stay current on coursework, otherwise you may find completion of the capstone project very challenging.
The grade for this course will be heavily weighted towards the capstone project. There will also be two short quizzes covering material that you should be familiar with if you have attended class and completed the programming assignments.
There is no formal textbook for this course. We will refer to a variety of online resources, including selected readings on cloud concepts, programming guides for Amazon Web Services, and references for various technologies used in programming assignments.
This course assumes no prior knowledge of cloud computing. Programming assignments require familiarity with Python (an introductory course should be sufficient) and use of Linux commands, as well as simple shell scripts. We will use the boto Python library to access Amazon Web Services, and some assignments, including the capstone project, will make use of a Python-based micro-framework for web applications. A brief overview of boto, the web framework, as well as a list of reference materials will be provided; additional concepts will be introduced as they are needed to complete assignments. An understanding of relational databases and SQL is recommended. Knowledge of web APIs and the REST approach will be useful, but is not required.
Note: Students in past courses have struggled to keep up with homework assignments due to limited experience with Python and knowledge of the Linux command line. If you have any doubts about your proficiency in these areas please talk with the instructor before signing up for the course.