Cloud Native Applications -- A Practical Approach
Graduate course 7,5 credits
Responsible: Johan Eker/Lars Larsson
Prerequisite: Basic skills in Python and Linux (a lot of patience).
Lectures: Fridays 10:15-12:00, seminar room 2112B at the Department of Automatic Control in the M-Building
Unfortunately, there is still no really good book on cloud computing (there's plenty of awful ones, though). This course will therefore be based on a number of books, shown below. You really do not need to buy any of these for the sake of this course. If you should buy one, I recommend Martin Kleppmann.
- Martin Kleppmann, "Designing Data Intensive Applications", O'Reilly, 2017, https://dataintensive.net
- Sam Newman, "Building Microservices", O'Reilly, 2015, https://www.oreilly.com/library/view/building-microservices/9781491950340/
- Betsy Beyer et al."Site Reliability Engineering", O'Reilly (available free online), https://landing.google.com/sre/books/
- Joe Beda, Brendan Burns, Kelsey Hightower, "Kubernetes: Up and Running", O'Reilly, 2017, https://www.oreilly.com/library/view/kubernetes-up-and/9781491935668/
- Ian Foster and Dennis B. Gannon, "Cloud Computing for Science and Engineering", MIT Press, 2017, https://mitpress.mit.edu/books/cloud-computing-science-and-engineering
- James E. Smith and Ravi Nair, "Virtual Machines - Versatile platforms for systems and processes", Elsevier, 2005
- Brendan Burns, "Designing distributed systems", O'Reilly, 2018, (available free online), https://azure.microsoft.com/en-in/resources/designing-distributed-systems/
In this course we will go over the fundamental building blocks for design and implementation of efficient and resilient large scale cloud applications. This includes a good understanding of the services offered by public cloud provider, as well as insights into various open source tools and frameworks.
We will take a very practical approach and utilise state-of-the-art tools in several hands-on excersises.
After the course the student will have:
- Good understanding of the principles behind cloud services, e.g. virtual resource, storage, etc.
- Ability to manage infrastructure-as-a-service (IaaS) and design and implement robust and scalable cloud applications.
- Good understanding of the underlying theoretical challenges with distributed systems in a cloud context, i.e. consensus, consistency, time, etc.
- Ability to design, implement and deploy data and compute intense cloud native applications on standard cloud platforms.
- Good overview of technology trends and research topics.
There will be no exam. For passing the course the student must attend 6 out 7 sessions, hand-in all assignment by the time of the final presentation (session #7).
The sessions will be broadcasted using Zoom, https://lu-se.zoom.us/j/742704912
#1 Intro — This thing called cloud (6/9 - 10:15-12:00) slides
Introduction to the basic concepts of cloud computing and overview of the state-of-the art services offer by majorr cloud providers. Discuss the benefits and challenges in adopting cloud technologies. Walk through of the basic components in a datacenter. We will then focus on OpenStack, which is the leading open source cloud platform. We will learn how to create virtual systems using first the graphical user interface, and based on automation tools, such as Terraform and Ansible.
Reading: Michael Armbrust et al. "A view of cloud computing". Commun. ACM 53, 4 (April 2010), doi.acm.org/10.1145/1721654.1721672
Home asssignment #1 — “Get started with IaaS!”
- Get aquainted with OpenStack Horizon and set up a system manually.
- Learn how to do the same using Terraform (and Ansible for bragging rights).
#2 Hands-on with OpenStack & Terraform (13/9 - 13:15-15:00)
This will be a mostly interactive session where you can ask questions and learn how to use cloud tools. You should have started with assignment #1 and installed the OpenStack and Terraform clients.
#3 The basic building blocks — Execution Environments & Networking (20/9 - 10:15-12:00) slides
We will discuss how compute and network virtualisation works and the different flavours available. We will start in the 1960s when CPU virtualisation was born and move all the way up to Docker, unikernels and serverless systems.
For networking we will make a short recap of the networking basics and discuss how network virtualisation and SDN works.
Reading: Gerald J. Popek and Robert P. Goldberg. "Formal requirements for virtualizable third generation architectures." Commun. ACM 17, 7 (July 1974), doi.acm.org/10.1145/361011.361073
Home assignment #2 — “Get started with containers!”
Bonus assignment: "A self learning switch in SDN"
- Get acquainted with Docker and GitLab, and learn how to use its Docker registry.
Design an implement an application as a set of Docker containers and deploy it to the cloud using Ansible. The image shall be pulled from a private registry. Should be able to install, update & destroy.
#4 Cloud application design (27/9) slides
Now we will take a look at design principles behind modern cloud native application. The focus will be microservices and how they are designed and operated. We will discuss challenges and design guidelines.
We will then walk through a number application examples to get an understanding of how well-known services look under the hood. Cloud applications design today typically requires knowledge about operation and will discuss so called DevOps and CI/CD pipelines.
Home assignment #3 — “Design a cloud based X-as-a-Service”
Now it’s time for the course project. Design a new cloud native application in your area of research, e.g. control-as-a-service/simulation-as-a-service/etc. The hand-in is in the form of a report.
- Discuss: Bottlenecks. Testing. Deployment. Operations. Tenancy. Scalability. State. Recovery.
#5 Hello K8! (4/10) slides
Kubernetes is the leading container platform today. We will go through the basic features and how to use them in order to build a robust cloud native application that scales. A fair amount of time will be spent on interactive hands-on play with a live system. We will learn how to design both stateless and stateful systems and deploy them and do rolling updates. Since in real life things rarely work as we want them to, we will discuss debugging and monitoring.
Finally, we will discuss how Kubernetes looks under the hood, e.g. architecture, networking, security, storage, and extensions.
Home Assignment #4 (course project) — “Get started with micro services”
Install your own Kubernetes cluster and experiment with it [we will provide the basic scripts]
Get feedback from Lars/Johan on design and (hopefully) start to implement!
#6 K8s, Nice to see you again! (11/10) slide
This time we will look at some more advanced features of Kubernetes and also get some insights into how it works under the hood. Some advanced features such as operators is discussed. We will also take a look on how persistent storage is managed in Kubernetes.
#7 Some distributed topics related to cloud (18/10) slide
Distributed algorithms theory provides the foundation for cloud systems. In this lecture we give an overview of consistency and consensus in the context of cloud and will talk about some standard algorithms like Raft, 2PC, 3PC and Paxos.
Reading: Diego Ongaro and John Ousterhout. 2014. In search of an understandable consensus algorithm. In (USENIX ATC'14), Garth Gibson and Nickolai Zeldovich (Eds.). USENIX Association, Berkeley, CA, USA, 305-320.
#8 Cloud trends and research topics and ER DC tour (25/10) NB. Rum Oktagonen at Ericsson, mobilvägen 12, Lund.
In this lecture we will present trends and challenges in research and commercial offerings. We will for example, discuss fog and edge computing. Harald Gustafsson will guide us in new trends and Björn Löfdahl will guide us in the datacenter.
#9 Project presentations (22/11)
• "Multi-cluster face detection"
• "CoAP Security Testbed-as-a-Service
• "Linked data microservices"