In traditional monolithic applications, layers such as data, UI, and business are tightly coupled and they stand as one-piece applications. To ensure a better performance for monolithic applications, it usually requires a load-balancing mechanism which makes a stateful approach necessary. While a monolithic approach can propose several advantages, scalability limitations and difficulty of outage management bring alternative approaches such as the cloud-native approach.
I like this definition of the cloud-native term made by Oracle: "The term cloud native refers to the concept of building and running applications to take advantage of the distributed computing offered by the cloud delivery model." The term distributed computing is mentioned in the definition and we understand that cloud-native computing is nothing new but adaptation and implementation of the distributed computing approach into cloud systems in multiple available ways.
While understanding cloud-native computing, it's important to hear about the Cloud Native Computing Foundation (CNCF: www.cncf.io) which is an open-source software foundation that promotes the adoption of cloud-native computing founded by multiple large-scale companies like Google, Twitter, IBM, RedHat, Docker, VMWare, Microsoft, and Cisco. Members collaborate to create standards for engineers who work with cloud technologies. They define their mission as making cloud-native innovations accessible to everyone by promoting technologies and supporting reliable open-source projects.
Cloud-native systems are designed to support continuous and rapid change, scalability, and resiliency. Agility and speed as goals remain at the heart of cloud-native systems. For instance, Netflix, as a cloud-native system example, has more than 600 services, and there are more than 100 deployments taking place every day. In this way, by eliminating the disadvantages of a large complex monolithic application, they can respond rapidly to customer needs and market demands without requiring a full deployment. They can also scale their services up or down based on changes in demand instantly.
We can define cloud-native applications as a combination of containerized and scalable microservices that work as a whole. The cloud-native model is based on four key pillars: containers, microservices, continuous delivery, and DevOps. Containerization refers to packaging software code along with its dependencies and libraries in an executable unit that makes it available to run anywhere. Microservices is an architectural approach to developing an application as a collection of small services. Each microservice contains its own data store and microservices can be independently changed and scaled. Continuous delivery addresses agility and continuous automated shipping of software batches. DevOps means the collaboration between developers and IT operators to deliver high-quality software.
We can examine the cloud-native stack in five layers; infrastructure, orchestration, application and data services, application runtime, and application code (ref: IBM). Infrastructure refers to the cloud environment which can be both public, private, or hybrid. The orchestration layer is the control of containerized applications (eq. Kubernetes). The application and data services signify the backing services such as integrating application code with external systems like other cloud environments or on-premise structures. The application runtime layer means the middleware and application code layer contains the cloud-native applications.