Cloud Infrastructure Stack
Before I get down to discussing bare metal servers, virtualization, virtual machines, containers & the related technologies, it’s important to have a fundamental understanding of the different layers involved in the cloud computing infrastructure stack.
We’ll begin this lesson by having a look at the cloud infrastructure diagram & then we’ll step by step discuss each layer of the stack.
Illustration 1.41 - Cloud Computing Infrastructure Stack
Starting right from the bottom, the base layer of the cloud computing stack consists of the physical infrastructure. That is the compute servers mounted in a server rack, physical storage like the hard drives, Flash SSDs & the RAM attached to the compute servers. And the data center network that connects all the physical infrastructure.
Above the physical infrastructure layer lies the platform software layer comprising of device drivers, firmware, operating system and so on. Platform software manages the physical hardware and provides an abstraction layer for the distributed systems software to interact with the hardware.
On the platform software layer runs the cluster infrastructure layer. This consists of distributed systems that manage the hardware resources & are responsible for cluster management.
They facilitate operations at the cluster level such as message passing between the nodes running in a cluster, distributed node co-ordination, cluster synchronization, reaching a consensus & so on. Some of the examples of distributed system software are Apache Zookeeper, Google File System, distributed storage systems like Google BigTable, Hadoop & Google Spanner.
Just like an OS manages a physical server, cluster level software manages groups of server nodes. We’ve already discussed this in detail in the clustering chapter.
Cluster infrastructure layer provides an abstraction to the complexity of distributed systems via APIs. The application programmer does not have to really worry about how data is dynamically partitioned across several nodes in the cluster, how complex memory operations are executed, how the system ensures fault tolerance & so on.
Cluster level software also takes care of cluster resource management like distributing tasks to the less occupied server nodes keeping a balance amongst the different nodes in the cluster.
Kubernetes is one good example of a cluster resource management software that tracks the resource consumption across the container cluster. More on Kubernetes and containers in the upcoming lessons.
The application software layer contains the applications that we build using the APIs of the cluster level software. These applications are our business applications like a social network, a Fintech app, a food delivery app, an online multiplayer game and so on.
Distributed systems enable us to run & scale our application across thousands of nodes running in several different clusters. Running a service in a distributed environment ensures scalability & high availability.
To ensure good system health and continual uptime, we need to continually monitor all the layers of the computing stack. As you see in the diagram the system monitoring layer is a vertical layer that applies to all the layers of the cloud computing stack.
Monitoring the system, for instance, keeping track of the server uptime, performance, latency, throughput and the resource consumption helps in weeding out bugs, getting rid of system bottlenecks, optimizing resource consumption, setting up alerts, writing efficient code & so on. All these things are vital in building performant software.
All the stats are ideally monitored with the help of a web-based dashboard. Grafana an open-source monitoring tool, is one good example of it.
Google Stackdriver monitoring is another example of a cloud-based monitoring tool. More on monitoring later in detail in the upcoming lessons.
In the next lesson let’s understand multitenancy with regards to application hosting.