Once you start looking at Cloud Computing, there's a lot of choices to make which have a dramatic impact on your architecture, portability, speed to market and more. There are three basic buckets that I'm going talk about:
- Infrastructure as a Service (IaaS)
- Platform as a Service (PaaS)
- Software as a Service (SaaS)
These three basic buckets describe different levels of service that you can rent. There's a ton a other shades of cloud infrastructure but these are the basic three.
The first thing, before we talk about Cloud services is what it takes to run an application on premises. The first thing is that you have to provide a place to run the server, pay for or generate electricity, rent a internet connection, provide server hardware, network infrastructure inside the building and more - all before you can run a single line of code.
This is ultimately flexible if you can afford it both from a cost and a time perspective however it requires a huge capital expenditure.
Infrastructure as a Service (IaaS)
The first bucket is IaaS which is to say that you are effectively renting infrastructure from the cloud provider. This was the first thing that Amazon offered when it first launched. As time has gone on, it's started offering other types of services as well.
In this case, as you are renting the infrastructure, the service provider is providing hardware, network, electricity and sometimes the operating system. This gives you a tremendous amount of flexibility in the types of things that you can run in this cloud environment. However it requires that you maintain the OS updates, language runtimes, firewalls and so on. This type of plumbing work means that you still have to have a staff that can manage the infrastructure.
The two real differences between a traditional third party hosting company and a cloud provider are A: reach and B: lease time. From a reach perspective, the major cloud providers all have many data centers around the world. From a lease time perspective, most traditional data centers require a monthly or annual lease whereas most cloud providers are available by the hour.
Platform as a Service (PaaS)
The second bucket of cloud services is PaaS. In this case you're renting not just the infrastructure but the OS, OS management, firewall management, language runtime and so on from the cloud provider. On the one hand, you're fairly restricted in what you can run on this type of service. However, you get to focus on your application stack rather than the plumbing.
There are several cloud providers that started up (and in some cases still are) providing exactly one language runtime or even one specific application framework. Heroku and Engine Yard, for example, started out specifically offering Ruby hosting. Google App Engine is currently specifically offering support for Java, PHP and Python. Azure Web Services offer anything that runs on IIS (Internet Information Services) which includes ASP.NET (obviously), PHP, Java, Python and Node.js.
Software as a Service (SaaS)
The last bucket that I'm going to talk about in this post is Software as a Service (SaaS). With SaaS, you're renting a full application as a service. While this is not a new concept (I was doing SaaS when it was called ASP (Application Service Provider), it's the mantra of SalesForce. If you think about most of the email providers, Outlook.com, Gmail, Yahoo Mail and others, are all SaaS. There are a number of CRM solutions, desktop management, ERP and Content Management to mention a few verticals that are dominated by SaaS providers.
Obviously you're very restricted in what you can run on these type of services as there's already a finished application. However, you don't have to build out this functionality yourself. This is really good when it's something that's core to your business but not your core business.
As I mentioned in the beginning of this post, there's a ton of other shades of cloud providers that we can talk about but these are the big three.
IaaS is the most flexible with the tradeoff is that you have to do more plumbing.
PaaS allows you to focus on your application development but is more restrictive than IaaS.
SaaS allows you to focus on your business but is the most restrictive.
In between these are things like finished services or building blocks such as a database as a service, a telemetry pipeline as a service, hosted machine learning engines and more but we'll talk about those in future posts.
Which type of cloud provider you choose is all about trade offs. Do you need more flexibility or do you need a more finished app so you can focus on the things that are important to your business?