Cloud fundamentals for beginners - Cloud 101
Tags: cloud, beginners
Published: 2023-05-15 22:57:32

Do you remember how we used to access pictures, audio, videos, files, and other documents about 10-15 years ago? When our phone storage got full, we usually had to get a memory card to allow the phone to accommodate more pictures. What of videos? We had to download them to our device locally, to access audio and videos. If the files were important, we would back them up on a laptop or a hard drive so we don't lose them. Well, many things have changed over the years.

## What changed?
The need for storage continued to grow with the creation of more applications and the continuous updates made to devices. Before now, data and files were stored locally, which contributed to the need for more storage space. When a user had more than one device, there was a need to access files, media, and documents in one device in the others without always having to transfer data using USB cables and other means.

Cloud brought about the idea of storing your data on another computer (that you do not know where it is) instead of keeping them locally on your mobile phones or laptops. Using an external computer allows the files to be accessed from anywhere over the internet. The computer which hosts our data and files is usually called a remote server. Thinking about it now, you would realize you have used a lot of cloud-based applications such as Spotify, Google Photos, Google Drive, One Drive, Gmail, Netflix, Outlook, Office 365, iCloud, etc.

To juggle your memory, do you remember how we used to use Microsoft Word then? We needed to save files locally and then transfer them to whoever we wanted to send them to, but now the options have evolved - all thanks to the cloud. Let's dive into how these things work and get some insights.
 
## Cloud Computing
Microsoft defines it as:
>  Cloud computing is the delivery of computing services—including servers, storage, databases, networking, software, analytics, and intelligence—over the Internet (“the cloud”) to offer faster innovation, flexible resources, and economies of scale.

Cloud computing simply means how you or the applications you use -  store and access data and programs over the internet; instead of your computer's hard drive. 

## Cloud Computing Deployment Types
There are several ways of utilizing the cloud. Different teams use the cloud in different ways. Some decide to host their resources on a third-party cloud provider or a privately owned cloud, while others use private and public cloud providers.

1. **Public Cloud:** is when the cloud resources are owned and operated by a third-party cloud service provider and delivered over the internet. In a public cloud, hardware, software, and other resources, are owned and managed by the cloud provider. Examples of public cloud providers include Amazon Web Services, Microsoft Azure, and Google Cloud Platform.
2. **Private Cloud:** is when cloud computing resources are used exclusively by a business or organization or group of organizations. The private cloud can be physically located at an organization’s on-site data center or hosted by a third-party service provider. In a private cloud, a private network maintains services and infrastructure, and the hardware and software are dedicated solely to the organization. They could be on-premises or privately hosted in a privately owned data center.
3. **Hybrid Cloud:** is a way in which infrastructure and applications can be hosted and shared between the public and the private cloud. It is commonly used between the cloud and existing on-premises infrastructure to extend and grow an organization's infrastructure into the cloud while connecting cloud resources to an internal system. Use cases for hybrid cloud could be to keep some data hosted privately due to security or privacy concerns while keeping other resources in a public cloud. An example we can all relate to is having some files or media directly on a mobile device while we access the rest using cloud-based applications.

## Type of expenditure models
The different ways we spend in the cloud are:
1. **Capital expenditure:** is when costs associated with computing services, such as infrastructure, storage, or network costs,  need to be paid for upfront. For example, if you need to run your application on a Linux-based OS in an on-premises environment, a computer with Linux OS needs to be purchased. This expenditure is an upfront cost. The cost usually reduces with time as maintenance costs are less, but they lack scalability (we will discuss this term later).
2. **Operational expenditure (Consumption based model):** is when you only pay for resources that you use. It is popularly known as a 'pay-as-you-go' service. Most public cloud providers utilize this model. This model enables the adoption of the cloud at a low cost. 

## Benefits of the cloud 
These are the benefits associated with the cloud:
1. **High availability:** Cloud providers usually ensure your data are available when needed. There are a lot of configurations that can be done to ensure the high availability of applications, e.g. by deploying to more than one region (i.e. your application is stored in multiple places to ensure that when there is a downtime in one, you would still be able to access your application).
2. **Scalability:** is used to adjust resources to meet demand. There are two ways of scaling:
 - **Vertical scaling:** refers to adding more hardware to a resource to meet the workload demand. Imagine you had a phone with 2GB RAM with 32GB memory. Based on the applications you would download and operations you would want to carry out on it, this specification is likely to be small and cause your phone to be slow and hang a lot. You would need 8GB RAM with 256GB memory to meet your needs, while the former specification might be ok for your grandmother or someone with lesser needs. The ability to be able to scale up or down resources by adding RAM size or more memory is vertical scaling.   
 - **Horizontal scaling:** refers to adding/removing resources as demand changes. Let's imagine you need to cook for an event. You might usually be like five people cooking for events. Now, you get an order for five million people. Five people cannot meet the need of 5 million people. Hence, you scale out to 100 chefs. If it is an event for 50 people, you can scale in to 1 or 2 chefs. It ensures that as demand changes, the resources can scale in or out to handle the workload.
3. **Elasticity:** is the ability for resources to scale automatically. Elasticity is configured to enable the resources to scale as needed to meet demand.
4. **Reliability:** is the ability of a system to recover from failures and continue to function. As data can be backed-up on laptops or hard drives, the cloud offers structures to design your application to be replicated in different places (such as regions, data centers, or availability zones) to ensure it performs as it should.
5. **Predictability:** is that you can predict the performance and cost of resources set up. Resources costs are usually displayed when setting up resources.
6. **Security and Governance:** Structures are in place to secure resources to meet corporate standards and government regulatory requirements. When there is a need for more security, a cloud solution that meets the need should be used. IaaS also allows users to manage their security in the cloud. 


## Cloud service types
1. **Infrastructure as a service - IaaS:** is a service in which the cloud provider maintains the hardware, network connectivity(to the internet), and physical security, and the user is responsible for other things. The user is responsible for choosing, installing, and maintaining the operating system. Also, they are responsible for the network, database, and storage configuration. A simple example would be if you need an Ubuntu (Linux) OS with 16GB RAM and 256GB SSD Storage, you don't need to buy a new computer. You can just easily spin up a Virtual Machine that provides a cloud-based machine that you can use.
It is usually ideal when new teams are migrating to the cloud from having physical infrastructure, as it is much easier to move their workload.
2. **Platform as a service - PaaS:** is a service that provides a complete development environment in which users do not have to worry about the underlying infrastructure. It includes everything developers need to build, run, and manage applications. When developers write their code, they need an environment to build and deploy their code. These environments are PAAS solutions. Examples of PaaS include Azure App Service, Heroku, AWS Elastic Beanstalk, Google App Engine, Azure SQL, etc. 
3. **Software as a service - SaaS:** is a service in which the cloud provider develops and maintains the cloud application software, provides automatic software updates, and makes software available to its customers via the internet on a pay-as-you-go basis. Examples of SaaS applications include Outlook, Skype, Zoom, Shopify, Netflix, Salesforce B2C Commerce Cloud etc.

## Cloud and the SHARED responsibility model
The cloud has a shared responsibility model in which the cloud providers and users have their roles to play. Their roles change based on the cloud service type or deployment type.


![Cloud Shared Responsibility Model](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fnz4lc880s6b6abavwvc.png)

As shown in the image above from Azure, the responsibility shifts away from the cloud provider from SaaS to PaaS to IaaS. The IaaS requires a lot from the customer in configuring and maintaining their infrastructure and the applications running on them. In PaaS, the customers need to provide their applications and databases, and the cloud provider manages the infrastructure. While SaaS puts less responsibility on the user as they just use the application on their devices and their user data. On-premise infrastructure puts all the responsibilities on the customer as they are in charge of maintaining and setting up their infrastructure and application.

## Conclusion
We have seen that the cloud simply means accessing resources over the internet, and we all use cloud-based applications in one way or the other. I hope you learned something new about the cloud and it is no more an abstract term to you.  
Leave a reaction, comment, and share with other cloud enthusiasts!

## Resources
If you would want to learn more about the cloud, do check out these resources:

- https://learn.microsoft.com/en-us/training/paths/microsoft-azure-fundamentals-describe-cloud-concepts/
- https://aws.amazon.com/getting-started/cloud-essentials/?ref=gs&id=m1