Cloud computing is a kind of system that provides on-demand and agile resources in a pay-as-you-go billing model, multitenant, or dedicated computing resource such as compute, storage, and network. As per NIST definitions, cloud computing comes with four cloud deployment models and three cloud service models as given in the following diagram:
Cloud deployment models define the way resources are deployed in the environment such as on-premise and exclusively for a specific organization, that is, a private cloud; or cloud resources that are accessible to all organizations and individuals over the internet, that is, a public cloud; or cloud resources that are accessible to a specific set of organizations that share similar interests or requirements, that is, a community cloud; or cloud resources that combine two or more cloud deployment models that is known as a hybrid cloud.
There are three cloud service models that define the way cloud resources are made available to users.
Infrastructure as a Service (IaaS): Cloud resources can be Infrastructure as a Service (IaaS), where the user is responsible for managing and maintaining resources/virtual machine starting, from package installation to security configuration and from upgrading packages to configuring resources for high availability as well.
Platform as a Service (PaaS): In PaaS, the cloud service provider gives flexibility to choose configuration and the user is only responsible for configuration and some troubleshooting options and monitoring options are made available by the cloud service provider.
Software as a Service (SaaS): In SaaS, the complete application is made available by the cloud service provider, where the responsibility of IaaS and PaaS remains with the cloud service provider. The user has to only use it and not worry about provisioning, monitoring, and managing the resources.
Cloud computing has few characteristics defined by NIST, which are noteworthy such as multitenancy, pay-as-you-use (similar to electricity or gas connection), on-demand self-service, resource pooling for better utilization of resources, rapid elasticity for scaling up and scaling down resources based on usage in an automated manner, and measured service for billing.
In the last few years, usage of different cloud deployment models has varied based on use cases and priorities of different organizations. Initially, a public cloud was used for noncritical applications, while a private cloud was utilized for business-critical applications, where security was a major concern. Hybrid cloud usage evolved over time with experiments, experience, and confidence in the services provided by cloud service providers.
As usual in a normal traditional environment for infrastructure management, installation, configuration, and monitoring, it was easier to adopt IaaS as there is complete control. Over time, organizations realized the pain or work behind the management of resources available in the cloud and the cost of managing resources in the cloud as the efforts are the same in managing resources considering security configurations and other configurations.
Hence, PaaS is getting popular day by day with the evolvement of Platform as a Service. PaaS has matured over the years and the scope is much wider and the services allow us to configure different programming languages such as .Net, Java, PHP, Python, and Ruby.
The following is a diagram representing different Cloud Service Models:
In plain English, PaaS provides an infrastructure as well as a runtime environment in combination to deploy an application. The difference is that the end user doesn't have control on the infrastructure while they can configure a runtime environment most of the time. Some service providers allow access to resources created in PaaS but not all. Features such as the ability to debug applications remotely and troubleshoot issues, up to some extent, are also provided. There are PaaS offerings, where you can have dedicated infrastructure resources for application deployment, but even in that case, control of the infrastructure is in the hands of cloud service providers.
Considering the definition of PaaS, everything is managed by the cloud service provider up to the runtime environment. For example, in the case of Java, we don't need to worry about which Java version will be installed and available to update the Java version, the web server version, and so on. Over the years, PaaS has gained its momentum and many organizations have realized that the lower the number of complexities, lesser will be the management overhead. PaaS offerings manage load balancer and high availability with little configuration and hence save lot of time and the architecture is clearer. We need to remember one thing: that most of the control lies with the cloud service provider and hence we do not have much to manage and cloud service providers have more control and they implement all best practices and standard patterns to fulfil the service level agreements (SLAs) attached with PaaS offering.
In short, those who know more about infrastructures and platforms, manage them efficiently, so we have less overhead.
Cloud service providers will handle all resource and version management of all the packages.
However, it means that it is the choice in terms of packages and other options lies with the service provider and not with the cloud consumers. Yes, cloud consumers' choices are considered based on market trends, so indirectly, users have their say in the services offered by the cloud service provider.
In a traditional environment, the infrastructure provisioning process takes place in a different manner than the acquisition of virtual machines in cloud subscription. Additionally, if there are any issues during the steps, then it takes more time in to and fro communication between different stakeholders. Let's visualize how the process workflow is executed in terms of a traditional model or in IaaS and then we will compare it with PaaS:
In the case of PaaS, the flow has fewer complications than the traditional or IaaS process to acquire resources as given as follows:
However, the approval process exists in the cloud environment too as the cost is associated with it and organizations can keep different sets of approval processes to create a virtual machine or to provision any PaaS offering such as email notification.
Having said that, there are many cloud service providers in the market that provide different types of services in an improved and innovative manner. Microsoft Azure is one of the leading cloud service providers available in the market. In the next section, we will explore some important concepts related to Microsoft Cloud to build a base of understanding on which we can kick off with Azure Functions.