The economics of the public cloud are the economics of scale and efficiency. In order to provide a compelling service to customers the cloud provider must either
- Demonstrate that the cloud provider can offer infrastructure at a cost that is lower than the customer can build and deploy on their own, or
- Provide a stack of services that are so compelling to the customer that they are worth the price.
Of the three types of cloud services IaaS, PaaS and SaaS, IaaS is the foundation and it is imperative that it is the most cost effective infrastructure possible. At scale this can only be accomplished with massive automation of the entire data center. The higher level services, which can command higher margins, must depend on the IaaS layer and a well-organized hierarchy of services. This can be accomplished in the same way all mature computing systems are delivered: by building uniform abstractions for system layers that provide a separation of design and implementation concerns for each layer.
In the case of the cloud software stack the basic layer is the hardware abstraction and virtualization layer. This is often mistakenly thought as the defining characteristic of Cloud systems. While important it is only one piece of the story. Above the hardware abstraction layer is the software defined network that ties all the servers together into a manageable whole. Massive distributed software defined storage is another critical component of the cloud. For many users of cloud services, it is the defining capability.
With the abstractions and interfaces defined by these three layers it is possible to now build a cloud OS that is responsible for allocating, monitoring and managing the resources for the customers. In the case of Microsoft Azure this includes the “Fabric Controller” that handles resource scheduling, allocation, scaling and reliability of virtual machines.
Another critical feature of any computing system is the fact that it can be programmed at a sufficiently high level of abstraction. When programmers are free to design software applications that are based on a model of computing that abstracts away all but the most essential concepts, we see an explosion of creativity. This was true when the first algorithmic languages like Fortran, Algol and Lisp were compiled to execute on a variety of different machines. It was true when the Message Passing Interface (MPI) made modern supercomputing programs portable. It was also true when computational algorithmic abstractions are coded into standard APIs such as we see in mathematical and graphics libraries. And it is finally becoming true of cloud computing. Driven by the need to use large cloud data centers for data analytics and machine learning, we are now seeing a growing collection of high quality frameworks upon which these tasks can be programmed. This began with the release of the Hadoop Map Reduce tools from Yahoo! and it has now matured into an excellent selection of well-designed frameworks. On top of these frameworks we have programming tools like Scala and Python as well as higher level graphical programming workflow systems like Azure ML.
In the sections that follow we will discuss each of these layers in greater depth.