Anatomy of a Cloud-Native Application.
Published: 2021-07-15 10:25:16

#Definition
 Cloud-Native applications are scalable applications that are built for and execute on modern, dynamic environments like public, private, hybrid cloud.

 ![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v1f9fkhd4i7r2kx5isfm.JPG)

#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.

#Anatomy of a Cloud-Native Application
Following are some key elements that are commonly found in cloud-native applications:
* 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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d8iqh9x9pjbkuqm5poar.JPG)

* 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.

* Containers: Microservices are frequently packaged and deployed as Docker images for portability and optimized resource consumption.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ryswbsmz7ig53eso6ng.JPG)

* 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

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/96akvgkjdj8bdn65zsbg.JPG)

* 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.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mn28dcu0eoie6ggqubwo.JPG)

* 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.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a35zxnp4ej1j83fz8bau.JPG)

* 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.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/urgj4efr4mgvjp7anrvk.JPG)


#Conclusion
This article has introduced the different aspect of a cloud-native application.