Cloud Computing (Part II) - Delivery Models
Now that we have a basic knowledge of what is Cloud Computing, in this blog we will be talking about the various models of cloud service.
When you are using any Cloud Computing platform, there are 3 major models of service that you can consume. They are Infrastructure-as-a-Service (IaaS), Platform-as-a-Service (PaaS) or Software-as-a-Service (SaaS). The main difference between each of them is in the amount of control that you, as a consumer, want to retain on the infrastructure. Each of these services has its pros and cons and should be used based on your use-case and in some cases the availability of skilled resources.
There are other newer models like Function-as-a-Service (FaaS) models, but we will keep our discussion concentrated on the major service models.
IaaS - Infrastructure as a Service
In this model, the Cloud Vendor provides the infrastructure or computing resources to the consumer. The consumer is free to use these computing resources as per their prerogative, and their use case.
The Cloud Vendor will continue to manage the physical hardware devices which include the Physical servers, storage devices and networking components. Virtualization will also be taken care of by the Cloud Vendor. The consumer will have complete control and customization options over the Operating System (Linux, Windows etc.), the runtime framework, the data and the applications being executed over these computing resources. This kind of delivery model is analogous to leasing for a Virtual Machine on a demand-basis and paying for the same on a pay-as-you-go model.
E.g., if you want to run an E-Commerce website on the cloud using the IaaS model, the cloud service provider will provide you with the Virtual machine, with required computing power, and you will be responsible for installing and updating a suitable Operating System (like Windows Server), installing a Web Server like Apache or IIS and then deploying your custom Website code. You will also be responsible for setting up other settings like opening required ports for HTTP/HTTPS communication. In similar fashion to maintain data for your organization, you are responsible for installing the required Database Management System (DBMS) like SQL Server or other non-relational DBMS like Mongo DB or Cassandra. In all these scenarios the Cloud Computing will continue to own and maintain the physical devices required by your organization.
Flexible for the consumer since the consumer continues to have OS-level control over the computing resources. As a consumer, you are free to choose the O/S and runtime
Easy to use
Issues and maintenance overhead of the physical devices are offloaded to the 3rd party Cloud Vendor
Payment is based on a usage model
Resources can be scaled/purchased on a demand basis
The consumer will need to maintain and patch the guest Operation System of the Virtual Machine. This means that the consumer is responsible for keeping the Operating System up-to-date when security patches and other bug fixes are released for the Operating System. This increases the maintenance overhead compared to the other Cloud Service models.
In some scenarios, a dedicated team is required for maintaining the Virtual Machines. Hence skilled resources are needed for operations and management of the VMs.
IaaS has a multi-tenant architecture, i.e., the same physical host machine can be used to create multiple VMs with each VM being used by a different tenant. Hence there are some security concerns that need to be addressed by the Cloud Service provider.
Initial setup time is huge. Since the consumer is responsible for maintaining the setting up the OS in the VMs, the initial setup time for deploying in IaaS is more compared to other models.
When to Use
IaaS is best suited when your organization wants to quickly move from dedicated On-Premise resources to Cloud Service Provider. In such a scenario instead of having the infrastructure in your own datacenter you are leasing the infrastructure from a 3rd party Cloud Service Provider; with the advantage of offloading the physical hardware maintenance duties to the Cloud Service Provider.
IaaS should also be used in scenarios where you want to have complete control over not only the Application and Data but the underlying Virtual Machine settings. In case your application/data needs to have major customizations done over the runtime or OS then IaaS is a good choice.
PaaS - Platform as a Service
In this model, the cloud vendor will provide the consumers with a framework where custom applications and software can be built. The consumers won't have to deal with any hardware and infrastructure-related concerns. As a consumer, you can focus on building and maintaining your custom applications.
The cloud vendor will not only maintain the hardware and infrastructure but also the Operating System, the middleware and the framework. The data and the custom software will belong to the consumer. The consumer pays for the VM and the operating system license cost.
Tasking the same example of an e-commerce website. In a PaaS model, the cloud vendor will provide you with a VM or an abstracted web service which will have the Operating System and the necessary runtimes (like ASP.NET, IIS or Node) will be installed in the web service. APIs will be provided which will be used by the consumer to deploy their custom code in the pre-installed machines. For database, a similar model will be followed where the Cloud Vendor will provide a VM with SQL (or some other database) pre-installed. As a consumer, you will need to load the SQL scripts to create the required tables, views, Stored Procedures, etc.
Reduced effort for IT Administrators (compared to IaaS)
OS security patching and framework updates will be taken care of by the Cloud Vendor
Scaling is easier and faster
Developers can concentrate on building the application without having to worry about the underlying architecture
Reduced control over the framework, hence framework updates are controlled by the Cloud Vendor. In this scenario, as a consumer, you won't be able to update the underlying framework at your own will. You will be dependent on the Cloud Vendor to update their systems.
Different cloud providers provide different mechanisms to deploy custom code/applications. Hence there is a chance of Vendor lock-in where your deployment scripts may get too specific to a Cloud Vendor.
Some cloud provides may not be able to provide you with the runtime framework required by your applications. E.g. your engineering team maybe building an application on Ruby, but your cloud vendor may not be able to provide you with an Ap Service where the required runtime is installed.
When to Use
PaaS model should be chosen when you are developing a greenfield project from the scratch. You wouldn’t have to spend much effort and cost on IT administration and the engineering team can concentrate on building the software.
SaaS - Software as a Service
In this model as a consumer, you will get to use online built applications uploaded by the Cloud Vendor. APIs will be provided to the consumer to configure the software as per their requirements.
The cloud vendor would deploy ready-to-use software in the Cloud, the consumer will get to subscribe and use the software. The consumer pays for the subscription cost as decided by the Cloud Vendor.
Going by the same E-Commerce website, the Cloud Vendor would deploy a generic multi-tenant E-Commerce software. The consumers would-be tenants who would use the software. They would be able to use APIs or UIs provided by the Vendor to upload their product, track shipments, view reports, etc. Shopify, Big Commerce, Wix are some of the companies in this market space.
Time to market is fastest when compared to Paas and IaaS.
Development and maintenance effort is hugely reduced
Limited opportunity to customize the software
Different vendors would have their own SaaS offering for the same category of Product which increases the chances of vendor lock-in
Your data will be owned by the Vendor, so security and privacy concerns may arise in case your vendor's security standards are not up to the mark
APIs and integration points provided by the Vendor may be limited. So integrating your SaaS offerings with other applications may be an issue
When to Use
When a ready-made solution is already available for you and you do not have enough engineering resources to build some custom from the grounds-up. Time-to-market can also be a factor, and in situations where you need to have a market presence as soon as possible, SaaS can be a good model.