What is the cloud? Just someone else's data center
When I first started in cloud computing I held to this view of the cloud. I'd used virtual private servers for years to host my pet applications. Having an API to access servers along with some other infrastructure and having it available almost immediately via an API was useful but I didn't understand the full power. I agreed with the comment above because I didn't get cloud computing.
That phrase is parroted all over. I've seen the term "cloud" put on legacy products as a way to brand or market what's already on the market. And, people buy it. This is, in part, because people don't understand what cloud computing is.
In this post we boil cloud computing down to its essential three pillars. If they aren't there it's not cloud computing but rather a marketing strategy.
You need to have all three of these for cloud computing. If you have the ability to quickly spin up virtual machines, even with an API, but don't have the other parts it's not cloud computing. It's virtual private hosting that's been around longer than cloud computing.
The first, and most obvious part, of cloud computing is the ability to get computing resources. This could be virtual machines, bare metal, or containers. Any of these will suffice if you can create and destroy them almost immediately via an API. If you can't create and destroy the compute resources programmatically it's not cloud.
A couple key tests are:
- You can easily scale horizontally. For example, you have 3 virtual machines for an application and you need to add another, running the same codebase, and have it happen almost immediately. When one of the 4 virtual machines is no longer needed it can safely be destroyed.
- When you want to update an application it's easy to simply destroy a compute resource and replace it with a new one running a newer version of the code.
For both of these to work you need applications that can run in this situation. But, those applications need a platform that can do this.
When you're creating and destroying compute resources programmatically and regularly you need a flexible network. If a compute resource is being replaced you may need to create the new compute instance, move an IP from an old instance to the new one, and destroy the old one. Or, when you're scaling our horizontally the network layer needs to be able to easily route requests to the new instance.
If the network pillar isn't as flexible as the compute pillar it's not cloud computing.
Compute instances can come and go at any time. But, some things need to live for a long time. For example, a CMS may have files in the form of images and media that are uploaded. These need to be accessed between different compute instances, different versions of an application, and possibly different applications all together when you have helper services. When this happens you need a storage service that can handle the flexibility of compute.
If the software pillar isn't powerful enough to support the compute pillar it's not cloud computing.
Bring It All Together
If you don't have all three pillars than the label cloud computing falls down because it's not true. Without all three it's a marketing term being slapped on a product and you'll want to consider what that actually means. Doesn't matter whether it's public cloud, private cloud, or something else all together.