Cloud computing is a decade-old technology paradigm that enables massively distributed computation and storage. This new paradigm results from the merge of three technological advances: the virtualization of computing resources, the collapse of storage costs, and the ubiquitous availability of fast networks.
Typically supported by state-of-the-art data-centers containing ensembles of networked virtual machines, the Cloud delivers a myriad of remote digital services, including Infrastructure as a Service (IaaS), Platform as a Service (PaaS) and Software as a Service (SaaS). Using these services, enterprises may offload their computing infrastructure to right-size their expenditure and reduce the time-to-market of their products.
The Cloud brings several key benefits to mainstream computing. First, developers with innovative ideas for new Internet services no longer require large capital outlays in hardware to deploy their services, or human expense to operate them. The Cloud also frees information technologies companies from low-level tasks, such as setting up basic hardware and software infrastructures. Finally, by employing cloud services, companies can scale up and down on an as-needed basis, paying only for what they actually use. For all these benefits, cloud computing is of pivotal importance today in modern software applications, and as an economical area, it displays a double-digit growth rate per annum for a decade.
This course studies in detail the infrastructures that support the Cloud. We first examine the principles of resources virtualization and how to deploy and orchestrate clusters of virtual machines and containers. In a second part, we review some fundamentals of large-scale distributed systems. These ideas are then applied in a third part to the construction of modern distributed data stores. Such stores run on commodity servers and are able to deliver the massive performance needed by cloud services. We study key notions such as data consistency, data distribution, replication and indexing, and we learn how to think for scalability and fault-tolerance, two fundamentals requirements of modern distributed applications.
- Basics of Kubernetes
- Scaling horizontally a web service
- Virtual machine management
- Container.sh
- Traveling in the Big Apple
- A key-value store (almost) from scratch
- A single-writer multiple-readers register in message-passing
- Coordination in practice with Apache ZooKeeper
- A transactional banking system
- Introduction to cloud computing architectures
- Hardware virtualization (by Mathieu Bacou)
- Operating System-level virtualization (by Mathieu Bacou)
- Serverless Computing (by Mathieu Bacou)
- Data dissemination
- Data distribution
- Shared objects & consistency
- Concurrency control & replication
- Coordination kernels
- The Paxos protocol
- Distributed transactional systems
- Inverted Index (by Emmanuel Bernard)
- Replicated Data Consistency for Large Scale Distributed Systems (by Gérald Oster)