Cloud Native design
Tags: cloudnative, cloudskills, webdev, programming
Published: 2021-06-07 08:29:16

### Cloud-native computing:

In recent years, we used the term, **Cloud Native** a lot. Your first thought might be, "What exactly does that mean?" 

Within a short time, cloud native has become a driving trend in the software industry. It's a new way to think about building large, complex systems, an approach that takes full advantage of modern software development practices, technologies, and cloud infrastructure. The approach changes the way you design, implement, deploy, and operationalize systems.

Unlike the continuous hype that drives our industry, cloud native is for-real. Consider the Cloud Native Computing Foundation ([CNCF](https://www.cncf.io/)), a consortium of over 300 major corporations with a charter to make cloud-native computing ubiquitous across technology and cloud stacks.
 
As one of the most influential open-source groups, it hosts many of the fastest-growing open source-projects in GitHub. They include projects such as Kubernetes, Prometheus, Helm, Envoy, and gRPC.
##### Read more about role of the CNCF, their projects and Values [here](https://github.com/cncf/foundation/blob/master/charter.md).


### Defining cloud native

The Cloud Native Computing Foundation provides an official definition:

> *Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.*

This architectural style enables companies to:

1. Design loosely coupled systems that are resilient, manageable, and observable. 
2. Rapidly respond to market conditions. Engineers can instantaneously update small areas of a live, complex application, and individually scale those areas as needed.
3. Accelerate business velocity and growth. Cloud native is about speed and agility.

Cloud-native systems take full advantage of the cloud service model.

Designed to thrive in a dynamic, virtualized cloud environment, these systems make extensive use of Platform as a Service (PaaS) compute infrastructure and managed services. *They treat the underlying infrastructure as disposable - provisioned in minutes and resized, scaled, moved, or destroyed on demand – via automation.*

### Pillars of Cloud native systems:

The speed and agility of cloud native come about from a number of factors. Foremost is **cloud infrastructure**. Five additional foundational pillars shown in below figure also provide the bedrock for cloud-native systems. They are:

1. Modern Design: 
A widely accepted methodology for constructing cloud-based applications is the Twelve-Factor Application. It describes a set of principles and practices that developers follow to construct applications optimized for modern cloud environments.

2. Microservices:
Cloud-native systems embrace microservices, a popular architectural style for constructing modern applications. Built as a distributed set of small, independent services that interact through a shared fabric.

3. Containers:
Containers are a great enabler of cloud-native software. The Cloud Native Computing Foundation places microservice containerization as the first step in their Cloud-Native Trail Map - guidance for enterprises beginning their cloud-native journey.

4. Backing services:
Cloud-native systems depend upon many different ancillary resources, such as data stores, message brokers, monitoring, and identity services. These services are known as backing services.

5. Automation:
Automation here is: automating platform provisioning and application deployment with practice of Infrastructure as Code, or IaC. Infrastructure and deployments are always automated, consistent, and repeatable.


![Cloud-native foundational pillars](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4wvj869huoit5md3pbkj.png)

We will look at each of the pillars in detail in my next post. Till then Happy Coding !!!