Cloud Computing - What, Why and When?
Published: 2023-04-24 12:06:19

Well, these days "**Cloud Computing**" isn't a very new term and every developer comes across it once in a while.But the ways people perceive the concept about it is numerous especially due to the fact that every person has a different use case in their mind while learning or exploring something.

<u><b>N.B.</u>:</b> You need to have some basic ideas and use cases of working with a _static website_ and a _dynamic website_. Otherwise, learning Cloud Computing is just like another Theoretical Subject with no practical and real-life implications in your mind!

The Term "**Cloud Computing**" was coined by **US National Institute of Standards and Technology**. According to them,

> **Cloud Computing** is a **model** for enabling ubiquitous, convenient, on-demand network access to a _shared pool of configurable computing resources_ (e.g., **networks** , **servers** , **storage** , **applications** , and **services**) that can be rapidly provisioned and released with _minimal management effort_ or service provider interaction. 

In simple terms, Cloud Computing is that concept or a facility through which users can get access to a **shared pool of Computing resources and services** through a Cloud Provider..

## Why Cloud Computing?
Now the basic question which arises while exploring a new domain is that "Why should anyone use it?🤔🤔" and Cloud Computing is not an exception. 

Some of the basic benefits that it provides are listed below:

- <h4><u>Less Need of Management</u>:</h4> While developing a **_production level application_** , the team of developers need to focus on a lot of areas like _Architecture_ , _Design and Prototyping_ , _Coding_ , _Testing_ etc. But all of this is of no use if the product couldn't be shipped to the **Deployment Phase** . Again, for deployment, we at least need a **basic server** to provide the end users with our product and a **Database** for obvious reasons. Now, hosting and managing the product at the same time can be very difficult for a team. And there comes the need of Cloud Computing. 
The Cloud Provider offers us with a lot of **computing resources**(like _VMs_ , _Databases_ , _Cloud Functions_ etc.) to deploy our application with an added benefit of almost 0% concern for managing and maintaining those, so that the developers can very well focus on the **business logic** of their product.

- <h4><u>Highly Customisable</u>:</h4> While allocating the Resources for our application, we are provided with a _large variety of customising facility_ through the dashboard, so that we can choose the most appropriate and efficient Infrastructure that best suits our needs.
A basic example would be allocating a **VM**(**_Virtual Machine_**). While doing so, we are provided with the options like **Allocating Region of The VM**, **OS to install in the VM** ,**GPU Configurations** , **Network Configurations Like Firewall** etc.

- <h4><u>Cost efficient</u>:</h4> The Cloud Provider provides us with a very convenient and lucrative scheme of **_"pay-as-you-go"_** for our resources. Now as the term suggests, that we pay for only _those units of Computing power and resources that our application uses_. Also, extra usage of resources is prevented by them only through the feature of **Auto-Scaling** (Discussed in the next point) , which in turn reduces the risk of Increased Cost for the product.

- <h4><u>Auto Scaling</u>:</h4> Almost every cloud service provides us with the feature of **"Auto Scaling"** . The term refers to the phenomenon through which the **number of Resources allocated** to your service at any moment of time is decided by the factor of the **Incoming Traffic** .
Let's understand with an example!

> Let's say you have an **E-Commerce Website** serving an average of **10K Customers** everyday. But during the Festival Days like Diwali, Christmas etc. the Traffic suddenly rises to **300-400K**. Now how would you handle that? You definitely need to **increase the Resources of your server** . But again when the rush decreases, you don't need that much of computing power and so we need to **deallocate** them for avoiding increased cost (_Otherwise you are gonna end Bankrupt!_ ☠️☠️). The most beautiful part of using a Cloud Service is that all of these _upscaling_ and _downscaling_ of Resources is handled by them itself and we as a user need not give any input for those. It _automatically detects the change in Incoming Traffic_ and does the needful for serving it.

- <h4><u>Speed and Availability</u>:</h4> Through the Cloud Service Providers we can easily use a very **high-powered VM** or any other resources to cater to our needs of the customer by _increasing the computational speed_ and thus making the **UX(_User Experience_)** way better than before. Also, since the Cloud Resources are **distributed throughout the globe**, we can easily configure the location and other stuffs so that customers can be served more easily and quickly from their **nearest data center** for much **decreased latency**.

- <h4><u>Security</u>:</h4> Since the whole infrastructure is managed by the Cloud Provider itself, so we need to have almost 0% concern of Security for our product. We can easily configure some **security and access rules and regulations** through the Dashboard to mitigate the potential threats of security breach in our product.

- <h4><u>Monitoring and Health Checkup</u>:</h4> While developing a _Scalable and Distributed System_ , it is very important to monitor the **health of each of the Computing services and resources** so that our customer doesn't have to face an irritating **404** status page.Well, Cloud Providers also have a solution for that. All the resources allocated are _continuously monitored_ and if something goes wrong, we will be immeditely notified. Also, if some service goes down, it is automatically **restarted** or **reallocated** on-the-fly.


## When to use Cloud Computing?
This is the most important section of any Technical Domain.Just because something exists, doesn't necessarily mean that we have to always use it in our products. 

For experimentation, we can use Cloud Computing Facilties with **small to medium sized projects** but that's not a must.

But for a **_Production Level Application_** which involves a lot of features like **User Authentication** , **Database Activities** , **User Activity Tracking**, **Feedback**, **Analytics** etc., using Cloud Computing is a must. It not only helps us manage things efficiently but also reduces the overall time of shipping the whole product to the end users.