The term cloud computing was coined back in 2006. Yet it's still misunderstood or, at least, not completely understood. This blog will highlight what cloud computing benefits are, as well as its challenges, and some of the best practices associated with its adoption. So, let's dive right in!
Note: This article covers a few cloud computing basics, but focuses more on benefits, challenges and best practices. If you need more background, please refer to our more detailed article What is the cloud? Beginner's guide to cloud computing concepts.
The term cloud computing refers to computing done in the cloud. Two questions: What do we mean by computing, and what do we mean by the cloud?
Let’s first understand what computing is, and how it was traditionally done. Then, we’ll connect it with the term cloud computing.
If you think about it at an abstract level, there are three things most people (or organizations) do with their computers:
Processing: Executing code
Storage: Storing and retrieving data
Networking: Data communication and networking
Traditionally, whenever we had a computing need, we would obtain the required resources. We'd buy a computer, a hard disk drive, or a network device, for instance.
This is all fine if we have lots of use for these resources. However, if the resources are used sparingly, then owning the device(s) stops making financial sense.
Think about commuting rather than computing, for a moment. It's a good idea to own a car if you use it frequently enough. Otherwise, the capital and operational expense wouldn't be justifiable. In that case, it's better to hail a cab, take a bus, or use other public transportation.
The same goes for computing. Businesses used to estimate their computing resource demands and then procure and deploy the necessary computing hardware. These would often be in the shape of data centers. This approach is called on-prem deployment.
When estimating their computing requirements in the past, organizations like to keep the headroom generous. Why? Because if you underestimate peak load, some of your customers will have a poor experience with your application. In a cut-throat market, that means losing your customers, which is a big no.
However, peak load doesn't occur that often, and it doesn't last for too long. So, it turns out that previously, typical business data centers were severely underutilized. Since these needed to be kept operational 24/7, this was a huge overspend.
The solution that emerged for the problem above is cloud computing. Other terms for the same solution are utility computing and pay-as-you-go computing.
We all use utilities like electricity, telephone, and the internet. Few of us deploy power generation plants, or telephone exchanges to keep those services running. Some other entity does that and offers it to us as a service. Wouldn't it be nice if computing could also be acquired and consumed like a utility?
The word 'cloud' in cloud computing refers to the fact that we don't know where or how computing is happening. Some organization deploys a cloud infrastructure in the form of massive data centers with servers, storage devices, and networking hardware.
The first step in using cloud computing is to sign up for a cloud service. Then, using a web-based console, a software development kit (SDK), or a command line interface (CLI), we acquire whatever computing resource we need whenever we need it, and we relinquish that resource when it is not needed.
The payment is per usage–you pay for what you consume. If a virtual machine is available at $0.02 per hour and you use it for 10 hours, you are billed for $2. That is why we hear the term 'pay-as-you-go' when we talk about cloud computing.
Resources like virtual machines, disks, and networks can be provisioned and decommissioned in a matter of seconds! That is just not possible in the on-prem model. You have a wide variety of resources to choose from–different processor speeds, different processor architectures, different amounts of RAM, different disk sizes, different types of disks, machines with GPUs, etc. So, there's something for everyone.
How do we handle demand spikes in this model? Since it is so quick to acquire more resources, we simply acquire more resources when demand surges. When the demand spike subsides, we relinquish the additional resources.
In short, cloud computing refers to a model of computing in which you can acquire computing resources on demand over the internet, and you are billed as per your usage of the resource.
When we talk about cloud computing, we are typically talking about the public cloud, i.e., cloud computing that can be used by anyone and is shared between many tenants. Examples of some popular public clouds are Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and Salesforce.
With the pay-as-you-go model, cloud computing seems to be a no-brainer. It seems that no organization should ever have an on-prem deployment. However, there are several challenges associated with cloud computing. Some of these are listed below.
Some businesses are governed by rules that don't allow for cloud computing. For example, a hospital might be governed by the local medical association not to keep patient records on public infrastructure.
The pricing models for cloud computing are typically not straightforward. For example, if you use an EC2 instance in the AWS cloud, you are not only billed for the amount of time the instance is on, you may be billed for the data going in and out of it over the internet, and any external disk volumes that you connect to it.
Not all applications can extract the most benefit out of cloud computing. Applications that are loosely coupled can be horizontally scaled over multiple virtual machines seamlessly. But, the application you want to deploy to the cloud might not be built with loose coupling. This means, that you wouldn't be able to perfectly extract the cost savings due to the pay-per-use model. For example, if we rely on a centralized database, then replicating our application would still be bottlenecked by the database server.
Supposing you are going for cloud adoption, how many resources do you need to begin with? How much would be enough? If you are a startup, how would you know how much demand to expect? You don't have any historical data to work with, which makes this a difficult question.
Now, let's look at some best practices for cloud adoption.
It is very important to continuously monitor the resources that your organization is currently using in the cloud. Ideally, you must scale your cloud resources according to your demand.
Every cloud provider offers tools to monitor resource usage. Examples include AWS CloudWatch, Microsoft Azure Monitor, and Google Cloud Monitoring. It is up to the organization using cloud resources to monitor their usage and make effective decisions accordingly.
Cloud service models are covered in another blog article, so we'll skip the details about those. But, it is very important to pick the right one.
Services in the infrastructure as a service (IaaS) model are typically the least priced, whereas the services in the software as a service (SaaS) model are the most high priced, with the platform as a service (PaaS) services being the most moderately priced. However, the SaaS and PaaS services are pricier because the service provider is taking responsibility for some really important features.
The total cost of ownership is an important consideration here. You might be tempted to use an IaaS service like an EC2 instance to deploy your organization's source control server on. However, you must consider the cost of managing backups, replication, etc. It may turn out that acquiring a source control service from a provide like Github might be cheaper in the long run because they are managing so many features for you.
The servers in cloud data centers are typically multi-tenant, meaning that different customer virtual machines (VMs) may be running on the same physical server. This might not work for you for a number of different reasons. If that is the case, all is not lost. There are services that guarantee single tenancy. For instance, you can choose EC2 Dedicated Hosts instances. Similarly, Azure provides Microsoft Azure Dedicated Hosts, and Google Cloud Platform offers sole-tenant nodes.
If you are migrating to the cloud, collect historical data and analyze it to estimate what amount of computing, storage, and network resources you need. If you are a startup, you don't have that advantage. However, you could do a market survey to try to estimate what size of deployment you should start with.
Cloud computing benefits include affordable computing. A startup or a greenfield project can be built in a loosely-coupled manner to get the maximum benefits of cloud computing. However, when migrating an existing application to the cloud, it's important to carefully examine if the application is built in a way that it can extract enough benefits from cloud computing. Otherwise, our operational costs might increase after migration to the cloud. After cloud adoption, we must carefully monitor our resource usage and scale our deployment as closely as possible to the computing demand to be as cost optimal as possible.
By now, you might be excited to learn more about cloud computing. All cloud providers offer free sign-up with limited-time trials through free credits. So, sign up for any one of the popular cloud providers and prepare to get hands-on. When in doubt, you can't go wrong with AWS. It is by far, the cloud provider with the greatest market share.
But for your hands-on journey, you'll need access to more learning resources. To continue your learning journey through cloud computing, we recommend the following courses:
Cloud Computing Fundamentals is great for beginners.
Cloud Architecture goes into more detail about the challenges and best practices covered in this article.
The Good Parts of AWS provides detailed and hands-on experience with some of the most popular AWS services.
If you'd like to learn how to run computing workloads in the cloud without worrying about managing virtual machines, refer to Running Serverless Applications with AWS Lambda.
If you work in data science, you might be interested in the hands-on course on Azure Data Studio.
Free Resources