Cloud-Native Application Ecosystem
Published: 2021-07-16 11:15:34

This article defines what a cloud-native application is and summaries the various tools involved in designing, developing, deploying and operating a cloud-native application.

#Definition
Cloud-Native applications are scalable applications that are built for and execute on modern, dynamic environments like public, private, hybrid cloud.
Below diagram shows the varied definitions of cloud-native application from different vendors.
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7dagx186dh8jj56r2xxk.png)

#Cloud-Native Explained
Cloud-Native applications are built using microservices, containers, orchestration and automation. They are designed for the cloud to take advantage of its elastic infrastructure for scaling up and down on-demand. They increase the speed, flexibility and innovation in the development cycle enabling faster delivery and new user experience.
Containers, service meshes, microservices, immutable infrastructure, CI/CD tooling, observability tools are the prominent technologies that enable adoption of cloud-native application development.

Cloud-native applications being loosely coupled systems offers the benefits of resiliency, manageability and observability. Together with robust automation, allows engineers to make high-impact high-quality changes frequently and predictably with minimal toil.

#Cloud-Native Application Ecosystem
This section mentions the commonly encountered terms, tools and processes used in the life-cycle of a cloud-native application.

##Microservices
* Microservices: Small, independent, loosely coupled services. They promote agility in development lifecycle. Several instances of stateless microservices facilitate resilience and elastic scalability and low-risk system evolution.

Below image shows different microservices working together in a typical e-commerce application.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9uuw6t14b5120p354fe.png)
   Below are some of the ways to implement microservices.
   - Frameworks and Programming languages: Development teams are free to select tools that best the application functionality.

   - APIs: Well-defined interfaces based on REST, GraphQL or gRPC technologies provided by third party services and microservices promote faster development and collaboration between teams. 

##Tools
 This section introduces to the commonly used tools in the cloud-native ecosystem.
* Containers: Microservices are frequently packaged and deployed as Docker images for portability and optimized resource consumption. Docker is popularly used container tool. Container makes sure that the application always run in all the environments.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/914g9jlu302y4fq7z7sm.png)

* Orchestration: Containers are managed by orchestration tools like Kubernetes, Mesos, Docker Swarm for automated deployment, operation, scaling and resilience of application at scale. Orchestrators offer below functions:

Configuration
Provisioning
Availability
Scaling
Resource allocation
Load balancing
Health monitoring

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qfqnpwpg6a67zeropuzw.png)

Kubernetes is the king among orchestrators. It provides the uses the below resources to achieve it's functionality.
Pod
Deployment
Replica Set
Service
Ingress
ConfigMap
Namespace

* Continuous Integration/Continuous Delivery Tooling: Application code and required infrastructure expressed as "infrastructure as code" are checked into source control systems like Git, allowing rapid iteration through automated dev, test, and prod pipelines.
 
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rhh7e5u9qxkiu6vsmtiu.png)

* Monitoring: Distributed applications expose new faults and operations teams turn to central monitoring systems like Prometheus to provide a single view of the entire system. 

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2su4romp9ihaj5gkog28.png)

* Security: OAuth, OIDC, JWTs, identity providers, API gateways, and automatic container patching provide new mechanisms to cover attack surface areas.

* Service Mesh: The goal of the mesh is to guarantee secure communications between each independent container application/microservice and be able to redirect traffic in the
event of failures. 

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8knuc7paxhd90k705ua.png)

#Conclusion
This article introduced what a cloud-native application is, terms and tools in cloud-native application ecosystem. 

#References:
* Images are taken from slides on Complete Idiot's guide to Cloud-Native Application talk during KubeSummit 2021.