Skip to main content

Overview

What is Cloud Native?

Quoted from Amazon AWS Cloud website https://aws.amazon.com/what-is/cloud-native/

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

  1. Codebase
    • One codebase tracked in revision control, many deploys
  2. Dependencies
    • Explicitly declare and isolate dependencies
  3. Config
    • Store config in the environment
  4. Backing services
    • Treat backing services as attached resources
  5. Build, release, run
    • Strictly separate build and run stages
  6. Processes
    • Execute the app as one or more stateless processes
  7. Port binding
    • Export services via port binding
  8. Concurrency
    • Scale out via the process model
  9. Disposability
    • Maximize robustness with fast startup and graceful shutdown
  10. Dev/prod parity
    • Keep development, staging, and production as similar as possible
  11. Logs
    • Treat logs as event streams
  12. Admin processes
    • Run admin/management tasks as one-off processes

SaaS Multi-Tenant

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.