As the phrase “cloud-native” burst onto the scene, it brought with it some confusion about what it actually means.
Is it literal, as in “born in the cloud?” Does cloud-native application development mean you’re using a certain set of tools or methodologies or running those apps only in certain environments? And while we’re at, how do you explain this stuff to everyone else in plain terms that they can understand?
We’re here to deliver answers to these questions and more. Let’s start with defining what “cloud-native” really means. Here’s Cloud Native Computing Foundation’s definition, “v1.0,” posted to GitHub by executive director Dan Kohn:
“Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
“These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably, with minimal toil.”
[ Read our related article, Microservices and containers: 6 things to know at start time. ]
That’s a great start, but let’s hear from some other experts and to ensure we’ve got the robust understanding and perspective necessary to explain cloud-native to others in the organization.
Key facts about cloud-native apps
Gordon Haff, technology evangelist, Red Hat, says dynamism is a key:
“Cloud-native is really just a shorthand for modern application and infrastructure practices. It’s the recognition that businesses across essentially all industries are increasingly reliant on software that can be brought online quickly, adapt to changing marketplace requirements, and run on infrastructure that’s attuned to both rapid changes in demand and new workload types. Think of it as the inverse of the big, monolithic application running on a big iron server that evolved on a timescale of years.” (Read also: What are cloud-native applications, by Gordon Haff.)
Glenn Sullivan, co-founder at SnapRoute, shares the pillars of cloud-native development, and clarifies one of the mistaken assumptions about the term:
“Cloud native does not mean that an application has to reside in the public cloud. Instead, it is a philosophy of building applications that take advantage of the immutable infrastructure that these environments provide. Microservices, containerization, and well-defined declarative APIs are the hallmarks of a cloud-native application – whether it resides in the public cloud, on-premises in a private cloud, or both as part of a hybrid cloud solution.”
Andy Stone, senior project manager at Sungard AS, on the fundamental differences between cloud-native and traditional development:
“Cloud-native applications are much more aware and in control of their environment than traditional applications. Traditional applications are installed on an operating system and assume that the server has the correct drivers, system configuration, dependent applications, and necessary resources to run without failure. Conversely, cloud-native applications dictate their environment by interacting directly with the cloud or infrastructure provider, usually via [an] API. Instead of being installed on an OS or server, cloud-native applications run on a cloud infrastructure and call the underlying infrastructure as part of its code.”
Sergey Bobrov, director of engineering at CYBRIC, on one of the reasons for sometimes blurry definitions of “cloud-native,” as well as some of the major benefits of the approach:
“Defining the borders of cloud-native versus non-cloud-native applications gets harder as cloud providers continue to offer more ways to run services in their pursuit of enterprise customers. ‘Cloud-nativeness’ therefore is not simply an ability to run in the cloud from day zero. Instead, it’s an adherence to a set of best practices, or at least some proximity to them, which allows developers to maintain and evolve applications at high velocity. Some of the most important parts of cloud-native applications today are design patterns such as containerization and container orchestration [and the] distributed nature and usage of microservices. Correctly using these design patterns results in the almost unlimited horizontal scalability and high resiliency that cloud-native applications provide.”
Bhanu Singh, VP of engineering at OpsRamp, on the importance of cloud-native in the DevOps age, and the misunderstanding that the term applies to any app that runs in a cloud environment:
“It’s an application that is, and always has been, based in the cloud, as opposed to an application that was re-architected to run in the cloud. If an application is cloud-native, that means it’s been built with technologies and services that also have been built on the cloud. These technologies and services are infinitely more agile and flexible than traditional ones, meaning that cloud-native applications can be consistently tuned and optimized for speed, security, and performance. Because of their architecture, cloud-native applications allow DevOps teams to deliver new tools and services to employees and customers more rapidly. Cloud-native applications can be realigned, reconfigured, and customized faster and easier than ever, which is crucial in a world in which customer needs change quickly.”
Let’s recap some of the key facets of cloud-native apps:
- They’re highly correlative with a variety of technologies, methodologies, and architectural approaches, but especially containers (and container orchestration), microservices, and declarative APIs.
- They’re built to run on modern infrastructure, but that’s not limited to public cloud environments.
- Building cloud-native apps is as much a practice or philosophy as a technical choice.
- Their appeal is tied to the dynamic, distributed nature of computing today, and to intensive business demands for greater speed, agility, scalability, reliability, and security.
Speaking of business demands, let’s go a step further: How do you really explain “cloud-native” to a wider audience, including folks for whom concepts like “immutable infrastructure” or “distributed hyperscale systems” don’t mean a darn thing? Let's talk business value.
Comments
I am Mihai Corbuleac, Senior IT Consultant at https://www.ComputerSupport.com - IT company providing cloud computing and information security services to small and medium businesses across the United States since 2006.
Simply put, a cloud-native app is designed specifically to run in distributed and elastic environments such as modern cloud platforms. These apps are usually developed based on loosely coupled pieces, such as microservices that let you use the cloud resources more efficiently, hence reducing the monthly bill of your cloud provider. Also, each process is packed in its own container and these packages are scheduled and carefully managed for resource optimization purposes.
Exactly, cloud-native apps are built in a modular manner operating independently, however they use the same OS and host.