If you are not a DevOps engineer, understanding cloud computing can seem challenging. By now you’ve probably heard about some of the concepts and terms associated with cloud computing services – maybe you’re even using them in conversation. However, more than likely you still have questions about how the applied concepts work, even though you encounter them on a daily basis.
In this post, we will take a closer look at the key categories of cloud computing services: Infrastructure as a Service (IaaS), Software as a Service (SaaS), and Platform as a Service (PaaS). We will highlight the differences between each type, and things to consider when choosing between them. We’ll also touch on the still-evolving service categories Containers as a Service (CaaS) and Functions as a Service (FaaS) to gain a better understanding of what they really are.
Cloud Computing Service Models
How do the 3 cloud computing service models categories relate to each other? Generally speaking, IaaS is the lowest-level that cloud consumers can access, and can be thought of as virtualized datacenter components hosted by the cloud provider. The next level up is PaaS, where the infrastructure components are abstracted away, managed for us ‘under-the-hood.’ In PaaS, the provider handles the provisioning and scaling of infrastructure, and we are presented with a platform where we can build and deploy our applications. Going one step further, SaaS eliminates the need for us to build applications at all – the SaaS provider presents us with ready-to-use software that is cloud-hosted and accessed by users via the internet.
Cloud Computing Services Breakdown
Infrastructure as a Service (IaaS):
IaaS refers to virtualized infrastructure components – servers, storage, network, everything you would expect from a physical datacenter – hosted and managed by the cloud provider. It is the lowest, most granular level of cloud provider services, the building blocks by which users can activate virtual machines and other components with a high degree of control over the specific operating system, middleware, databases. As consumers of IaaS, we can decide on an architecture, estimate our resource requirements, and then provision, configure, and scale these components as we see fit, without worrying about the hardware and underlying network.
Working with IaaS components directly offers users the most flexibility and control, but requires significant effort and can be challenging to maintain. Many providers offer supporting services for IaaS like routers, VPN gateways, monitoring, load balancing, log access, firewall systems, and data replication. These supporting services can ease some of the more common challenges, although they too require effort to set up and maintain.
The obvious advantage of IaaS is to offload an organization’s need for capitalization costs of on-premise data centers, and the traditional IT costs associated with ongoing operation and maintenance of these assets and networks. IaaS providers typically guarantee a minimum availability of 99.95% or more via their Service Level Agreement, and they achieve economies of scale because they are managing thousands or even millions of servers. This allows them to provide virtual machines and other virtualized components to customers on a ‘pay-as-you-go’ basis – no long-term investment required. To the end-user, scaling vertically or horizontally across the globe can be done in a few clicks to handle workloads that grow with your business. And when demand decreases, such as seasonal or cyclical business models, you can scale down just as easily to save on operating costs.
Platform as a Service (PaaS):
For PaaS offerings, cloud providers go several steps further. They automate the process of configuring, provisioning, and scaling IaaS components, and present end users with a simplified environment (a platform with a suite of tools) to build and deploy applications. The operating system, middleware, runtimes, and databases are now managed by the provider. Typically users have a limited choice of databases and/or languages and related frameworks which are pre-selected by the provider. There may be a learning curve for working with these focused languages, and additionally learning how to use the platform interfaces.
The primary benefit of PaaS is that it allows organizations to focus on creating and deploying applications quickly. Operating costs are potentially much lower than IaaS because PaaS pricing is typically consumption-based. This comes with a trade-off as users must relinquish control and flexibility. PaaS alternatives should always be considered by new projects which are not tethered to existing infrastructure since they present the possibility of reduced time-to-market and operational costs.
Software as a Service (SaaS):
SaaS is usually the easiest of the three categories to understand because many of us use these out-of-the-box solutions every day, such as many popular email clients, conference call solutions, and customer-relationship-management (CRM) software. These applications are hosted by the provider and accessed through your browser within any supported region.
Costs are straightforward in the form of paid licenses or user subscriptions, and there is a much smaller burden on in-house IT staff. Most of the effort is spent on choosing the right software for your needs, and training employees to use it.
Choosing a Cloud Model
So far we have covered the distinctions between IaaS, PaaS, and SaaS. We’ve also touched on some of the benefits and drawbacks for each. Now let’s consider what things might push an organization to choose one solution or another.
What is the current state of your organizational assets? Do you have on-premise hardware which is approaching end-of-life? Are there projects on the horizon to expand workloads or add new applications? If so, IaaS can supplement or eliminate the risk associated with large capital investments. And there is no need to go all-in immediately. The on-demand pricing model of IaaS means you can start small, with a single application on a small server, and then scale up or down at your own pace.
If you already have applications deployed to the cloud and are managing IaaS components in-house, then consider the pain points of your application. Maybe it is a cumbersome and growing database cluster, or an inefficient content delivery system. There is a growing number of PaaS-like managed services which could resolve these issues while also reducing overall costs.
For startups and new projects which are not yet tied to a given solution, a key driver is likely time-to-market. In this case, it is important to consider all available platforms which may accelerate product development and deliver value to users as soon as possible. Take advantage of PaaS whenever the costs are manageable.
Are you deciding whether to migrate a mature application? Cost analysis is king here, not just the cost of new platform or infrastructure components, but also the cost of transition. If this is a legacy application that is not being actively developed, the cost of transition might be especially high. However, moving to a managed platform could completely eliminate the cost of ongoing maintenance and managing application upgrades. An actively-developed application might be at lower risk for transitioning, but again, all costs should be carefully considered.
Are your end-users spread across the globe? Perhaps you have an existing application with a steadily increasing workload and database and are looking to scale? In this case, you might want to choose IaaS, provisioning additional virtual machines in strategic regions. Are your workloads unpredictable, with intermittent spikes? Is there a chance your app could rapidly increase in popularity? You may want to consider PaaS, allowing the provider to handle scaling while you focus on features. Lastly, If your application requirements are tangential to your core business (email, content-sharing, contract generation, document collaboration, customer management), then there is likely a SaaS to fit your needs.
Team Size and Expertise:
Is your existing staff trained in virtualized environments, maintaining servers and/or databases? In that case, they might be well suited to provision and manage IaaS components. Do you have a team of developers lined up that can create full-stack applications? Selecting the right PaaS could empower them to quickly build valuable features.
Agility and Flexibility:
Are your custom applications using cutting-edge technology? Is your core business built on having the newest and best-performing tech? A home-grown system using IaaS components might be required. PaaS solutions tend to be based on more mature, confirmed technologies, and might limit your flexibility to jump into emerging tech.
Modern Cloud Alternatives:
The definition of PaaS is increasingly blurred as cloud providers continue to expand their offering of managed services. Here we have chosen two alternative service categories to consider which are already adding value to many organizations.
Container as a Service (CaaS):
Cloud providers offer CaaS platforms to help users manage, deploy, and scale their containerized apps. Containerization is the process of building your apps inside lightweight, stand-alone containers which can be essentially ‘plugged in’ to a host operating system. Containers are much smaller, lighter, and faster to start up than virtual machines since they share the core resources of the host operating system kernel. As a result, they are highly scalable and can be quickly created or destroyed.
CaaS offerings include container orchestration services similar to Kubernetes which assist with the management and scaling of containers, along with image registries which store container images and handle version control.
Function as a Service (FaaS):
One of the hottest trends in the cloud services space, cloud providers are offering the ability to create applications using a ‘serverless’ architecture. This moniker ‘serverless’ can be misleading because of course there are actual servers behind the scenes, but they are completely abstracted – maintained, managed and scaled by the cloud provider so that your organization can focus on creating the features that provide value. FaaS allows cloud customers to deploy modular functions in a variety of supported languages, which are called on an as-needed basis. These functions contain much of the core business logic for a serverless architecture. Functions are triggered by a given event, so they are a natural fit for messaging, publish/subscribe, and Internet of Things applications. These functions can be triggered, receive, and distribute content while working seamlessly with other provider platforms and services.
It is important to note that serverless options like FaaS can contribute to provider lock-in similar to other PaaS offerings, and possibly even more if the functions are specifically designed to work with multiple provider-specific products. This is contrasted with CaaS; containers are much more portable between providers because they rely on commoditized servers. However, the advantages of serverless are definitely worth considering: FaaS allows teams to build and assemble targeted microservices independently, and deploy them rapidly. Pricing is consumption-based, with the potential to drastically lower operating costs by reducing reliance on managed servers.
Cloud computing services will continue to evolve, but a strong understanding of the basics is a great starting point for deciding on a Cloud Model. Remember to consider factors such as total cost of transition and ongoing maintenance, application complexity and pain points, and organizational expertise and flexibility. Ultimately the best cloud solution will depend on your unique business drivers and application needs.