Whenever I heard of the term "Cloud native", my thoughts usually would go to Kubernetes. I used to think "Cloud native" was a phrase used for describing just Kubernetes.
But as I delved more into it, I realized my assumption was wrong. Cloud native isn't just about Kubernetes; it is so much more!
In this article, I will help you understand Cloud native; the cloud computing delivery model, its benefits, architectural principles, and more!
What is Cloud native?
Cloud native is an approach to building and running apps that exploit the advantages of the cloud computing delivery model.
The "cloud" is really just the internet, as cliche as it may sound. It is a network of servers where information, software, applications, and services are housed and accessed. So what then is the cloud computing delivery model?
Understanding the Cloud computing delivery model
The definition of cloud native above is excellent, but you may be curious to know the meaning of the last four words in the definition - "cloud computing delivery model". At least, I was when I saw it on almost every Cloud native definition on the internet.
First of all, it is helpful to know what cloud computing means to get a better understanding of the cloud computing delivery model.
According to Techopedia, Computing is the process of using computer resources (storage, networking, and computing power) to complete a given goal-oriented task.
Cloud computing offers on-demand availability of these computer resources (mentioned above) without direct active management by the user.
The Cloud computing delivery model represents a specific, pre-packaged combination of IT resources offered by a cloud provider. There are a couple of cloud delivery models, but IaaS, PaaS, and SaaS are the most popular and widely used cloud delivery models.
Infrastructure as a Service (IaaS) - This cloud computing delivery model focuses on providing infrastructure like servers, networking technology, storage, and data center space as a service to users. This gives users the autonomy to decide what infrastructure is provisioned based on the different needs of their application. Popular examples of IaaS providers are Microsoft Azure and AWS.
Platform as a Service (PaaS) - This is more focused on the development side of things by providing a platform for developers to deploy their apps to the cloud; notable examples of PaaS providers are Netlify & Heroku. PaaS builds on top of IaaS, but unlike IaaS, it already handles the setup and configuration of the infrastructure your application needs. In cases where users want more control of their infrastructure configurations, IaaS is a preferred model to use.
Software as a Service (SaaS) - This is the complete software product provided as a service to users in order to enable them to perform different activities. For example, Gmail is a great SaaS cloud native application used by millions of people worldwide. As a user of Gmail, you will most likely not be concerned about how it was built or the underlying infrastructure but you know for sure that you can use this software to send and receive emails.
Want to get more insight into these cloud computing delivery models? Read this article.
Cloud native terminologies - Is there a difference?
While learning about "Cloud Native", I struggled with understanding the difference between cloud native, cloud native apps, cloud native technologies, and cloud native computing. I felt like they were all using the prefix cloud native but meant the same thing.
In fact, if you search for "What is Cloud native" on Google, you will see over ten resources on the search result page. And out of these ten resources, 4 of them define or talk about Cloud native. The other 4 are either Cloud native application, Cloud native technologies, or Cloud native computing.
And to my surprise, these resources all had interchangeable definitions of what Cloud native meant, which got me confused. Was there a difference? Did these terminologies all mean the same thing? I asked myself.
I asked a couple of people about it and eventually understood the differences. So, here are my findings. ๐๐ฝ
Cloud native is an approach to building and running apps that exploit the advantages of the cloud computing delivery model.
Cloud native applications are independent services, packaged as self-contained, lightweight containers that are portable and can be scaled rapidly based on the demand. They allow you to take advantage of the unique capabilities of the cloud.
Cloud native technologies are the technologies used to build and scale cloud native applications. Example; Kubernetes, Helm, Docker, etc.
Cloud native computing and cloud native mean the same thing. You can read the "Cloud native" definition above to understand better.
The architectural principles of Cloud native
Cloud native follows four architectural principles to enable businesses to ship products faster, implement their customer's needs quickly, create value faster, and aid collaboration between developers and IT specialists.
Here's an explanation of the four architectural principles. ๐๐ฝ
Microservices: In microservices, the code is broken down into independent modules, where each feature is a standalone service, and resources are assigned to the services only when needed. Cloud native apps are built following this architecture.
Containers: Cloud native apps are packaged in containers. Containers provide isolation context for microservices making them highly accessible and easier to build, update and scale.
CI/CD: Cloud native applications run on a continuous delivery model that fosters collaboration between developers and the Operations team to enable them to build, deploy, & release software faster without affecting end-users or developers in other teams.
DevOps: Cloud native adopts DevOps as a practice to make Continuous delivery and continuous integration (CI/CD) possible.
Benefits of building Cloud native apps
Independence: Because Cloud native apps use the Microservices architecture, it makes it possible to build cloud native apps independently of each other. This gives businesses the opportunity to build, manage and deploy the different components of an application independently without affecting other components.
Automation: Cloud native apps run on a continuous delivery model making it possible to ship software updates immediately.
No downtime: Thanks to container orchestrators such as Kubernetes, you can deploy a software update with essentially zero downtime, because if an instance of the application goes down, Kubernetes will automatically spin up another one for you immediately.
Scalability: Cloud native apps enable flexible deployment options across the network making it easier to develop, deploy, and iterate on the application.
Standards-based: Most cloud native services follow a set of standards championed by the CNCF Open Source organization. These standards have been vetted and approved by the community and are used by some of the biggest tech companies across the world. This helps reduce vendor lock-in and ensure that apps are built in the right way.
Summary
I hope you enjoyed reading this article. If you want to learn more about Cloud native, here are some useful resources for further reading:
Cloud Native 101, VMware.
How to start your Cloud native Kubernetes journey, Ambassador Labs.
Understanding cloud-native apps, Red Hat.
Cloud-Based, Cloud-Native, and Cloud-Enabled apps---What's the Difference?, PaperTrail.
What is Cloud Native?, Oracle.
What are Cloud Native applications?, VMware.
If you have any questions, share them in the comment section below, and I'll reply to every comment. ๐