GrazianoCasto
CLOUD NATIVE

What the fu** does cloud native mean?

Published on castograziano.com
#cloud-native

Give it a shot on Google with the term “Cloud Native”. The top result you’ll find is the definition according to Amazon AWS, which goes like this:

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.

This definition is widely agreeable since it touches upon the software approach, modern application, and cloud environment aspects — all fundamental elements associated with the term cloud native. However, the issue lies in the underlying implication that “being in the cloud” is a necessary condition to be considered cloud native. What’s even more problematic is the tendency for some to interpret “run the apps in the cloud” as a sufficient criterion for labeling their applications as cloud native, as if merely hosting infrastructure on any cloud provider automatically qualifies it as such.

Would I be considered cloud native if I wash dirty laundry at home?

The question naturally arises: can applications running in on-premise environments be considered modern? Does the development of resilient, scalable, and flexible applications remain exclusive to those managing their infrastructure on any cloud provider? Conversely, does any application deployed in the cloud automatically embody the characteristics of a modern application?

The short answer is no. Not all donuts have holes, and not all applications hosted in the cloud can be considered modern. Staying within the realm of AWS, setting up an EC2 instance, installing a web server, a database, and running a web application on a single VM doesn’t align with the principles of scalability, flexibility, and resilience required to deem an application as modern.

At the same time, cloud services like EKS or GKE are nothing but a fully managed service provided by the respective cloud provider, which eliminates the complexity of installing, managing, and maintaining full control, in this case, over Kubernetes. Behind almost all managed services of a cloud provider, there’s often an open-source service that can be independently installed and managed on-premise as well. Behind EKS and GKE, there’s Kubernetes; behind MSK, there’s Kafka, and behind RDS, there’s any of the many relational databases available like PostgreSQL, SQL Server, or MySQL. Indeed, there are even alternatives to the serverless functions offered by major cloud providers, which are open and deployable in on-premise environments, such as KNative and OpenFaaS.

Is the cloud useless then?

So if the tools available on the cloud can also be used on-premise to create application architectures, what exactly does the term “cloud” mean in “cloud-native”? I know what you’re thinking right now: this guy is crazy, trying to push the theory that the cloud is useless and everything I can do in the cloud can be replicated just as easily on self-managed infrastructure.

The answer to this question is quite simple: the cloud is a technological enabler. It’s not the only way to do things, but it’s the most efficient way. The definition of cloud-native refers to modern applications characterized by scalability, resilience, and flexibility, which can indeed be achieved on-premise. However, it’s undeniable that the cloud adds virtually infinite firepower to these capabilities.

On self-managed infrastructure, we’re limited by bare metal; the scalability and flexibility of our architecture are closely tied to the physical resources we have available. In the cloud, the scalability and flexibility of our architectures are directly proportional to our spending capacity (and our abilities to design efficient and truly scalable architectures, but that’s another story).

Cloud Native is a metter of how, not where

To conclude, what I’m trying to say is that in my view, the true essence of the term “cloud native” lies not in what is used to build applications, but in how they are built. Cloud Native isn’t about the cloud; it’s about technological excellence. Distributed architectures, scalability, flexibility, service decoupling, sustainability, and observability – all of these shape cloud native.

In this regard, I’d like to reintroduce another definition of cloud native, provided by the CNCF, which states:

Cloud native practices empower organizations to develop, build, and deploy workloads in computing environments (public, private, hybrid cloud) to meet their organizational needs at scale in a programmatic and repeatable manner. It is characterized by loosely coupled systems that interoperate in a manner that is secure, resilient, manageable, sustainable, and observable. Cloud native technologies and architectures typically consist of some combination of containers, service meshes, multi-tenancy, microservices, immutable infrastructure, serverless, and declarative APIs — this list is non-exhaustive.

This definition captures the core principles of cloud native, highlighting adaptability, security, resilience, manageability, and observability in deploying workloads across diverse computing environments.

← Back to Blog