What is Cloud Native

What is Cloud Native?

Cloud native term is so much popular now a days especially when we are talking about 5GC and service based architecture.

Simply running normal traditional application in cloud is not a cloud native application. Running application in a container or use of cloud service like Azure’s Cosmos DB or Google’s Pub/Sub etc. does not make an application cloud native. The applications are developed in micro-services architecture and uses cloud, container and orchestration is called cloud native application.

6 key Characteristics of cloud native system:

Automatable:

In cloud native system, applications are deployed and managed by machine instead of human. In this environment applications have to follow certain open standard, format and interfaces. Kubernetes provides all these things. Developer does not have to worry about this.

Ubiquitous and flexible:

In cloud native system, applications are highly decoupled from underlying physical resources. They can be easily moved from one compute node to another compute node or even from one cluster to another cluster.

Resilient and scalable:

Traditional applications are tightly coupled with each other. Application stops working in case of main process failure or failure of any underlying infrastructure like hardware failure, network resource congestion etc. On the other hand, cloud native applications are highly decoupled and highly distributed in nature. High availability can be achieved easily.

Dynamic:

A container orchestrator such as Kubernetes shall be used for utilizing maximum resources. It can dynamically deploy multiple copy of container for HA and rollout upgrade without impacting any services.

Observable:

Cloud native applications are very difficult to monitor and troubleshoot. So, we need an ecosystem for monitoring, logging, tracing etc. These will help us to maintain and manage our container health and KPI.

Distributed:

Cloud native is an approach to building and running applications that takes advantage of the distributed and decentralized nature of the cloud.

It is working principle of an application. In case of traditional monolithic application, whole application is running as a single entity or process. In case of cloud native application it uses microservices architecture means whole applications are divided into many small application or we can say module and that run independently in container. 

What are microservices?

Microservices is an application software architecture that allows taking each application function to run in a container. These containers will be communicating to each other via standard API.

Monolithic vs. microservices application architecture

MonolithicMicroservices
Bigger team size is required. Team need to take care of dependencies and OS version as well.Small, focused teams: A small team can develop and test a service. Small team sizes promote greater agility.
Touch point is more as applications are tightly coupled. Take more time to deliver new feature.Small code base: less touch point in code for adding any new feature.
Programming language dependant.Mix of technologies: Each service can be written in different programing language.
Service will be impacted in case of main process crash.Fault isolation: If any service becomes unavailable it will not impact entire application if upstream microservices are designed to be handle fault tolerance.
Entire application needs to be scaled for scalability.Scalability: Services can be scaled out independently when required by using orchestrator system. There is no need to of scaling entire application.
High risk involved in case of any changes in schema.Data isolation: It is very much easy to update schema as only single services will be affected.
Server side system based on single application.Each application function is having its own service.
Easy to develop, deploy and manage.Bit complex to develop, deploy and manage. Run in container and communicate via api.