Cloud Platforms
In this section, we will take a look at the different types of Cloud Platforms and their characteristics.
There are three types of cloud platforms:
- Infrastructure as a Service (IAAS)
- Platform as a Service (PAAS)
- Software as a Service (SAAS)
1. Infrastructure as a Service (IAAS):
This type of cloud platform provisions and configures infrastructure and provides infrastructure on demand. For e.g., it might provide you a pre provisioned virtual machine or a firewall with preconfigured rules. If we are going to scale our application, we are going to need more machines with some specific configurations. The platform will manage the infrastructure for us.
Traditional datacenter vs IAAS:
Traditional datacenters used virtualized servers or physical servers to host applications. These datacenters had fixed hardware capacity and it was not easy to add more machines. Also, addition of resources was a manual process. Setting up a new datacenter generally is a herculean task which could take months altogether.
An IAAS, on the other hand, would make the task of provisioning new machines, creating new setup extremely easy, since the IAAS provides well defined APIs to configure and setup resources. An IAAS could either be a private cloud setup or a public cloud setup. In either scenario, the cloud environment provides easy scalability and quick setup. The cloud environment provides the typical cloud characteristics as described later in this chapter.
Reference Implementations:
AWS, OpenStack, VMWare VSphere
2. Platform as a Service (PAAS):
This type of cloud platform provides and manages the runtime environment required to run applications and also manages the application itself. It also provides an environment for application to run along with all the dependencies like database, queues etc.
A PAAS layer sits on top of the IAAS layer and abstracts away the infrastructure management.
Traditional non PAAS environments vs PAAS environments:
Let us take a look at traditional non PAAS environment. Let us consider a Java based web application which would need a PostGres SQL database and a message queue system. To deploy this entire application, we would typically need to install and configure the following systems:
- Java Virtual Machine
- Web application server (like Tomcat)
- Load balancer
- Database (like PostGres)
- Messaging system (like Rabbit MQ)
If these systems are located in different nodes, then we need to configure connectivity between these systems and also configure the load balancer to route the request to different nodes. If we have to scale the application by increasing the number of instances, then we would need to perform the following steps:
- Provision a new virtual machine (if we are using a IAAS, then provision using that)
- Install web application server on the new node (or machine)
- Deploy the application to the new machine
- Reconfigure the load balancer.
Clearly, it is a tedious process. A PAAS environment takes care of most of the above tasks and allows the developer to focus on building application logic. For the above example, let us see how a PAAS helps.
When an application is pushed to a PAAS:
- PAAS would identify the application (whether it is Ruby, Python or Java) and provide a corresponding runtime environment.
- PAAS would provide the corresponding application server required to run the application.
- PAAS would configure the load balancer with the end point provided while pushing the application. We can easily scale the application to have more (or less) instances, with single command or button push in the UI.
- PAAS provides backing services like Database, Message queues, which we can associate with the application, with simple commands or UI. These database, queues are managed by the PAAS itself.
Extensibility of PAAS platforms:
PAAS platforms are generally extensible to add new run times, new applications servers (for example, if we are using a new run time, which is not supported by the PAAS out of the box). PAAS platforms also support integrations with proprietary databases or soft wares which are not hosted and managed by the PAAS.
Reference Implementations:
Cloud Foundry, OpenShift
3. Software as a Service (SAAS):
This type of cloud platform provides specific software products/features as a service and allows for configuring/customizing the service based on customer requirement. Software As a Service platform is generally used by product based companies who deploy their products on the Cloud platform and customers can sign up and use those hosted products. Instead of deploying these products within their premises, customers can use the hosted solutions. Software As a Service would generally have a PAAS, or an IAAS underneath it, in order to achieve scalability and availability.
Traditional software vs SAAS:
Before the concept of SAAS came into picture, organizations which were selling software had two options in which they could sell software:
Deploy on Premise: The customers need to deploy the software behind their firewall. This option would mean, the installation, configuration and maintenance would take place in the customer’s premises and the underlying infrastructure has to be maintained by the customer. For example, the CRM, ERP products sold by major companies followed this model. The disadvantage with this model is that, the customer has to ensure high availability of the infrastructure.
Hosted solution: The software is hosted by the organization which built and sold the software, and this software is managed, configured, maintained by the seller organization on virtualized infrastructure (there is no cloud platform here). However, this solution is not scalable, and if the number of customers increase, then the host organization has to expand its infrastructure and it could take months to add new infrastructure. Also, it is not easy to guarantee high availability of the software and also it is not easy to measure and add a pricing per module, as in Pay per Use models.
A SAAS solution, on the other hand, is similar to the 'hosted solution' explained above. The significant difference is that, the software is deployed on a cloud infrastructure which is scalable, resilient and exhibits all the characteristics that a cloud platform should have. Also, since it uses a cloud platform, it is easier to measure the number of API invocations or service calls and hence it is easier to bill the customer per service. This model known as ‘Pay per Use’ model is commonly used by SAAS providers. For instance, a customer might have access to various modules of a Customer Relationship Management solution, but the customer would be charged only for those modules which are used in a given month. This option works out to be financially conducive to customers and also relinquishes the pain of managing infrastructure if they had deployed within their premise.
Reference Implementations:
Salesforce applications like CRM, Atlassian Jira