Overview
What is Cloud Native?
Quoted from Amazon AWS Cloud website https://aws.amazon.com/what-is/cloud-native/
"Cloud native is the software approach of building, deploying, and managing modern applications in cloud computing environments. Modern companies want to build highly scalable, flexible, and resilient applications that they can update quickly to meet customer demands. To do so, they use modern tools and techniques that inherently support application development on cloud infrastructure. These cloud-native technologies support fast and frequent changes to applications without impacting service delivery, providing adopters with an innovative, competitive advantage."
Cloud-native Overview
Benefits
Gain competitive advantages in various ways:
- Increase efficiency
- Reduce cost
- Ensure availability
Applications are distributed, scale horizontally, communicate asynchronously, have automated deployments, and are built to handle failures resiliently.
Design Methodologies
Recommended design methodologies
- DDD Domain Driven Design
- Twelve-Factor App methodology (12 Factor)
- SaaS Multi-Tenant
- Data Modeling
DDD Domain Driven Design
DDD Domain-Driven Design is an approach to software development that centers the development on programming a domain model that has a rich understanding of the processes and rules of a domain.
Twelve-Factor App methodology (12 Factor)
Twelve-factor design also helps you decouple components of the app, so that each component can be replaced easily, or scaled up or down seamlessly
- Codebase
- One codebase tracked in revision control, many deploys
- Dependencies
- Explicitly declare and isolate dependencies
- Config
- Store config in the environment
- Backing services
- Treat backing services as attached resources
- Build, release, run
- Strictly separate build and run stages
- Processes
- Execute the app as one or more stateless processes
- Port binding
- Export services via port binding
- Concurrency
- Scale out via the process model
- Disposability
- Maximize robustness with fast startup and graceful shutdown
- Dev/prod parity
- Keep development, staging, and production as similar as possible
- Logs
- Treat logs as event streams
- Admin processes
- Run admin/management tasks as one-off processes
SaaS Multi-Tenant
- Please Refer to SaaS and Multitenant
Data Modeling
- Please Refer to Data Modeling
Cloud Native Architecture Patterns
Useful Cloud Native Architecture Patterns
- Sidecar
- Ambassador
- Scatter/Gather
- BFF Backend for Frontends
- CQRS (Command Query Responsibility Segregation)
Sidecar
Ambassador
Scatter/Gather
BFF Backend for Frontends
CQRS (Command Query Responsibility Segregation)
Design Patterns in Backend Development
- Creational Design Patterns
- Singleton
- Factory Pattern
- Abstract Factory Pattern
- Builder
- Dependency Injection Pattern
- helps decoupling dependencies
- Observer Pattern
- helps in Event Driven Programming
- Decorator Pattern
- helps in Adding Functionality to an object on the fly
Also see
What is cloud-native Stack ?
Layers of cloud-native technologies
The layers of cloud-native technologies that developers use to build, deploy and run cloud-native applications.
- Infrastructure layer
- is the foundation of the cloud-native stack. It consists of operating systems, storage, network, etc.
- Provisioning layer
- takes care of allocating and configuring the cloud environment.
- Runtime layer
- provides runtime resources such as cloud data storage, networking capability, and a container runtime e.g. Docker Engine, containerd
- Orchestration and Management layer
- helpful for integrating the various cloud components so that they function as a single unit. e.g. orchestration tools like Kubernetes help to deploy, manage, and scale cloud applications.
- Application Development layer
- software technologies for building cloud-native applications
- Observability and Monitoring
- gathering real-time insights and monitoring
Resiliency | Disaster Recovery
- Retry Mechanism
- Circuit Breaking
- Throttling - Limit the consumption of resources
Observability and Monitoring
Observability means gathering real-time insights into system behavior through logs, metrics, and tracing. Monitoring applications and infrastructure helps identify issues, optimize performance, and solve runtime problems.
Cloud-native Application Development
Technological Blocks of cloud-native Architecture
Also can be referred as Cloud-native pillars
- Microservices
- Declarative APIs
- Service Mesh
- Serverless
- Containers and Orchestration
- DevOps
- CI/CD - Continuous Integration/Continuous Delivery
- Immutable Infrastructure
Microservices
Offer benefit of composability, meaning breaking down an application into a collection of smaller, lightweight services that can easily be composed and connected to each other via APIs.
Declarative APIs
Cloud-native systems use APIs to communicate across loosely coupled microservices. APIs are declarative, they tell you what data the microservice wants and what results it can give you.
Declarative APIs Development
A declarative API is a type of API in which users specify desired state or outcome, e.g. to accomplish a task, but they do not have to specify on details of how to achieve it. So developers can focus on the desired outcome, rather than the implementation details.
Benefits
- Using decalrative APIs is easier and less complex.
- Users do not have to make multiple calls for each step necessary to accomplish the desired task.
- Users do not need to understand the design of the backend of the application, they only need to know what they want to do and the endpoint available for the same.
Service Mesh
Service mesh is a layer in the cloud infrastructure that helps manage the communication between multiple microservices.
Serverless
Serverless computing model allows cloud infrastructure to automatically scale as per needs, without pre-allocating fixed servers.
Containers and Orchestration
Containers are self-cotained executable components that include all the parts including app code and dependencies to run it, in any environment.
A container orchestration platform like Kubernetes enables developers to easily build containerized applications and services, as well as scale, schedule and monitor those containers.
DevOps
Developers and operation engineers use DevOps tools to collaborate and automate cloud-native development.
DevSecOps
DevSecOps is the practice of integrating security testing along with DevOps. Its combination of Development, Security, and Operations.
CI/CD
Continuous Integration/Continuous Delivery
CI Continuous Integration is a software practice in which developers integrate changes into a shared code base on periodic frequency in sprint cycle for releasing to customers.
CD Continuous Delivery is a software practice to deploy microserviuces to the cloud. It uses software testing automation tools to verify and release software.
CI and CD work together for efficient software delivery.
Immutable Infrastructure
Refers to an approach to managing software deployments and services on computing resources wherein components are replaced rather than changed. An application or service is effectively redeployed each time any change occurs, on new set of computing rsources.