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 (VMs), the Cloud delivers Infrastructure as a Service (IaaS), Platform as a Service (PaaS), Software as a Service (SaaS), and Data as a Service (DaaS). Using these services, enterprises may offload their computing infrastructure to right-size their expenditure and reduce the time-to-market of their new products.
With more details, 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 IaaS and DaaS 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 two digits growth rate per annum since 2010.
This course studies in detail the new infrastructures that sustain 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 the Cloud computing 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 services.
- Basics of Kubernetes
- Scaling horizontally a web service
- 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
- Introduction to cloud computing architectures
- Software Virtualization (by Gaël Thomas)
- Lock-free data structures (by Gaël Thomas)
- Data dissemination
- Data distribution
- Shared objects & consistency
- Concurrency control & replication
- Consensus & coordination kernels
- Inverted Index (by Emmanuel Bernard)
- Replicated Data Consistency for Large Scale Distributed Systems (by Gérald Oster)