CSC 5201 - Microservice and Cloud Computing (4 Credits)
Course Description
This course introduces the concepts, architecture, and practical techniques needed to design and implement cloud-native microservices. Students will design, implement, deploy, and operate a microservice using widely used technologies and best practices.
Emphasis will be placed on scalable web and machine learning services. Students will apply what they learn in a series of hands-on lab exercises and complete a final project using a distributed computing platform.
Course Learning Outcomes
Upon successful completion of this course, the student will be able to:
- Leverage containerization to package and run software
- Design and implement a basic microservice that interacts through REST APIs, implements access controls, uses a distributed storage systems, and is deployed in containerized form.
- Apply access control patterns using authentication and authorization following security best practices
- Analyze and identify potential throughput, scalability, reliability, and consistency issues with distributed microservice architectures
- Create and manage continuous integration and deployment to automated software related to microservices and pipelines
- Deploy a multi-sservice distributed application using a container orchestration tool
Prerequisites by Topic
- Version control / Git
- Operating systems
- Databases
Course Topics
- Virtual machines, containers, and associated best practices for writing containerized, stateless applications
- Microservice architectures, implementation patterns, including event-driven architectures, and designing and implementing REST APIs
- Distributed storage systems (e.g., key-value stores, columnar stores, object stores, distributed file systems, relational databases, and [vector stores]), tradeoffs between consistency, availability, and partition tolerance. Efficient access patterns.
- Continuous integration and deployment technologies and usage patterns
- Tooling for orchestration and deployment of multi-service systems
- Software, Function, Platform, and Infrastructure as service
- [CAP Theorem] paradigms and implementing systems
- Discussion of public cloud services and comparisons of their offerings
Grading:
Weekly labs and final project: 60%
Midterms: 20%
Final: 20%
Class will be structured in three parts:
- Cloud computing.
- Architecting microservices.
- Advanced topics and final project.
Office DH425
TBD:
References:
Building Microservices, Second Edition, Sam Newman (BM)
Extra reference:
Python Microservices Development, Second Edition, Simon Fraser and Tarek Ziade (PMD)
Week 1: Introduction to Microservices
Note: No class Monday
Lab 1 - Introduction to Cloud Computing using AWS
Reading: Chapter 1 (BM).
David Parnas in “Information Distribution Aspects of Design Methodol‐ ogy”, Information Processing: Proceedings of the IFIP Congress 1971 (Amsterdam: North-Holland, 1972), 1:339–44. https://oreil.ly/rDPWA
Alistair Cockburn, “Hexagonal Architecture,” January 4, 2005.
References:
Nano Cheat Sheet
Ubuntu Guides
Ubuntu/Linux command Line cheat sheet
Week 2: Virtual Machines, Infrastructure as a Service
Lab 3: Most Excellent Flask EC2 Web App on AWS
Auto Scaling Computing Clusters
Reading:
Virtual Machine Monitors
Xen and the Art of Virtualization
Amazon Web Services (AWS) Documentation
Week 3: Platform as a Service, Containers
Lab 4 Platform as a Service Mulligan - DigitalOcean
Reference:
Install Python, pip, and the EB CLI on Linux (Thanks Harry Kubiak!)
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb-cli3-install-linux.html
Week 4: Containers, Container Orchestration with Docker Compose and Kubernetes
Intro to Docker and Containers
Lab 5: Docker Lab Extraordinaire
Lab 6: Composing a Flask-MySQL app with docker and docker-compose
References:
Docker Compose
Kubernetes Concepts
Week 5: Kubernetes Clusters, Review
Container Orchestration - Kubernetes
Lab 7: Deploy a Flask API Service on Kubernetes
Week 6: Distributed Data Platforms, Spark
- Online, written format, no notes
Auto Scaling and Load Balancing
Lab 8: Deploy Flask on Kubernetes Cluster Hosted by Digital Ocean
Week 7: Distributed Data Platforms, Spark
References:
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing
Week 8: Machine Learning on Large Distributed Datasets
Lab 8 Scalable Linear Regression using PySpark
References:
Introduction to MLOps - Databricks
The Big Book of MLOps - Databricks
Week 9: Modeling Microservices, Refactoring Applications into Microservices
[Lab]
Reading: Chapter 2 (BM).
[Refactoring Services into Microservices]
[Lab]
Reading: Chapter 3 (BM).
Week 10: Communication Styles, Implementing Microservice Communication
[Implementing Microservice Communication Styles]
[Implementing Microservice Communication]
[Lab]
Reading: Chapter 4 and 5 (BM).
Week 11: Workflow, Building Microservices Applications
Reading: Chapter 6 and 7 (BM).
Week 12: Testing and Deployment, Monitoring and Observability
[Testing and Deployment]
[Final Project]
Reading: Chapter 8 and 9 (BM).
[Monitoring and Observability]
[Final Project]
Reading: Chapter 10 (BM).
Week 13: Security and Resilency
[Security]
Reading: Chapter 11 (BM).
[Resiliency]
Reading: Chapter 11.
[Final Project]
Week 14: Scaling, Final Project Presentations
[Scaling]
Reading: Chapter 13.
[Final Project]
Week 15: Final Projects, Review
Week 16: Final Exam
TBD