What is Cloud Native

Cloud native computing is the next big thing in technology. In this article, you will learn basics of what cloud native is, cloud native components, understanding of cloud native applications, and why cloud native is going to be one of the biggest things in coming years.
 
Cloud native development is guided and managed by the Cloud Native Computing Foundation (CNCF), an open-source foundation founded on Nov 6, 2015 is responsible for driving the cloud native technology development and growth. CNCF defines cloud native technology:
 
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.
 
Cloud native technology allows software developers to design and develop applications that run in the cloud and take full advantage of cloud computing including build and deploy automation, scalable, fast, universally available, and easily maintainable.
 
In other words, cloud native systems take full advantage of cloud services, tools, and infrastructure.
 

What does cloud native mean?

 
Still not sure what cloud native is? As you can see from the above definition by CNCF, cloud native technologies are used to store, build, deploy, and run software systems in a cloud. The cloud can be a private, public, or hybrid.
 
As Vidya explains in his article, Are You Cloud Native, Cloud-native is an approach to build applications using microservices, containers, Kubernetes, DevOps, CI/CD, and cloud (public, private, hybrid). With this great combination of great architecture, platform, culture, dev practice, and cloud-computing model your applications will be built for scale, continuous change, fault-tolerant, and manageable.
 

Cloud native components

 
Cloud native computing is a combination of several cloud native technologies. The key players in cloud native are – Microservices, containers, Kubernetes, DevOps and CI/CD. Besides these key players, cloud native takes advantage of several modern development technologies and techniques such as PaaS, multi-cloud, agile methodologies, and integration with other cloud offerings.
 
Cloud-native computing key players
 
Figure 1. Cloud-native computing key players
 
Using the above key players in a cloud architecture makes you cloud native, and the applications build using cloud native architecture are cloud native apps.
 
Cloud infrastructure is the foundation of cloud native. Everything must be build, tested, and deployed in and using cloud tools and services. The cloud native apps are designed based on modern design.
 

Microservices

 
Microservices architecture is the key component of cloud native architecture. The following picture from Microsoft Docs shows the microservices architecture.
 
What Is Cloud Native Apps 
Image source: Microsoft Docs 
 
In Microservices architecture compare to a monolithic Web API, the service layer is a collection of microservices that are used to design for one module or functionality. Each service runs in its own container and hence does not affect other modules.
 
The key advantages of microservices are,
  1. Microservices are easy to write since each microservice focus on one specific problem and module.
  2. Microservices are developed and deployed independent of other microservices.
  3. Microservices are scalable and consume as needed resources. When more resources required, Microservices use cloud architecture to add resources on demand.
  4. Microservices avoids a single point of failure through fault isolation. Each microservice runs in its own container independent of other microservices and one of the app goes down, it does not impact other apps.
  5. Microservices code development is horizontal and can scale and distributed among multiple team members.
The disadvantages of microservices architecture are,
  1. Microservices architecture is complex than a single monolithic Web API. It requires configuration and knowledge of other cloud services such as API Gateway and containers.
  2. Microservices are suitable for cloud native applications only.
  3. Initial time required to develop and cost is higher.
  4. Resource sharing between microservices is a cumbersome task.
  5. Maintainability of multiple microservices apps is ton of work compare to a single Web API app.
  6. Cloud costs may be higher if resources are not managed and configured by an experience team.
Here is a detailed explanation of microservices architecture.
 
 
Do you want to build Microservices based application in .NET?
 
Here is a detailed tutorial on how to build Microservices using ASP.NET Core.

Containers

 
Containers are another major component of cloud native architecture. A container is a packaging software that contains everything an application needs to run independent of infrastructure and environment. In other word, a cloud is a lightweight virtual machine that includes one or more applications and their dependency files for the applications to run successfully.
 
Key advantages of containers are,
  1. Containers run everywhere independent of platform and infrastructure. A container can be deployed on Linux, Windows, Cloud, and a Data Center.
  2. Containers follow the industry standard and easily portable from one infrastructure to other and one platform to other. For example, today you can deploy your container on a Linux machine in AWS but tomorrow you change your mind, you can move your container to a Windows machine on Azure.
  3. Unlike a virtual machine (VM), containers are lightweight and do not include the operating system and do not require ton of hardware resources. Containers use machine’s operating system that reduces server licensing and hardware costs.
  4. Containers are easy to create, deploy, and maintain.
  5. Containers are secure and keep applications within the container boundaries to create default isolation.
Two most popular industry standard containers are Docker and Kubernetes. Other popular containers are Amazon ECS, AWS Fargate, Azure Container Services, and Google Cloud Platform container service.
 
To learn more about Docker, check out Docker: Everything You Need to Know about Docker Tutorial.
 
To learn more about Kubernetes, start here, Getting Started with Kubernetes Part 1.
 
Want more containers? Here is a complete video on Azure Containers
 
 

DevOps

 
DevOps is the name of a collaboration method and tools that allows software developers, testers, architects, and operational teams to work together in a seamless way.
 
DevOps tools in cloud allows each member of the team to do their tasks in simple way.
 
Cloud native apps take full advantage of cloud tools and features to build, test, and deploy cloud applications.
 
To learn more about DevOps, read Introduction to DevOps and Azure DevOps.
 

CI/CD

 
CI/CD stands for continuous integration continuous deployment. The purpose of CI/CD is to automate the process of code integration, testing, and deployment.
 
In case of Microsoft Azure, teams can use Visual Studio and Azure CI/CD to automate the entire build and deployment process. The CI/CD process in Azure is called Azure Pipelines.
 
To learn more about Azure Pipelines and CI/CD, start here, Setup Azure CI/CD Pipeline using Visual Studio
 

Benefits of Cloud Native

 
The key advantages of cloud native include the following,
  1. No upfront cost.
  2. Pay per use model. You don’t pay if you don’t use.
  3. Rapid development and delivery to the end user.
  4. Automated build and deployment.
  5. No cloud dependency. Any cloud, any platform, any operating system.
  6. Easy migration from one cloud to other. 
  7. Integration with multi-cloud architecture.

Disadvantages of Cloud Native

 
Here are some of the disadvantages of cloud native development.
 
  1. Cloud native architecture and cloud native application development requires working knowledge of several new cloud technologies. Not only cloud native development requires larger teams and there is a learning curve, and the total cost of software development can be much higher.
  2. Cloud native applications use cloud infrastructure and resources. In cloud infrastructure, you pay as you go. If resources are not planned properly, things can get costly very quickly. If you don’t pay attention to unused or underutilized resources, your costs can be much higher than you really need to pay.
  3. Team needs to constantly upgrade themselves with the latest changes in the cloud technology.

When should I choose Cloud Native Architecture?

 
Cloud native architecture is not for simple and small applications that are straight forward, and functionality is well defined, and releases are monthly or quarterly. For example, if you have a website and mobile app, accessing a single database, where functionality is clear and you will be releasing the new production version every couple of months or even monthly, you may use some components of cloud native but do not need a cloud native architecture.
 
If you do not have a have a well-versed team in cloud development and experienced in cloud native technologies such as containerization, microservices, Devops, and others. Cloud native is not a work of one man show. There needs to be a team and there is a learning curve. If you are a young startup or small company that does not have enough people on team, you may find cloud native overwhelming.
 
Cloud native is a good fit when you have applications that that can scale independently, and traffic can go up and down with major spikes. For example, Amazon website seems major traffic spike during holidays.
 
Cloud native makes sense when an application is quite large and has frequent updates and deployment. For example, Facebook deploys features 500 times a day but in bits and pieces.
 
Cloud native make sense when an application is big enough and has modules and each module can be built, tested, and deployed independent of other modules. Hence microservices.
 
Cloud native makes sense for projects when multiple teams work on multiple technologies and can be deployed services and functionality regardless of platform, language, or target devices.
 
In other words, if you don’t have a large application that requires multiple teams, multiple data sources, frequent builds and releases, chances are you don’t need a cloud native architecture.
 

How to get started with Cloud Native Architecture?

 
We just learned what cloud native is and its benefits. Cloud native technology is a combination of cloud computing tools, methodologies, and processes. Software applications (websites, services, apps) that are designed for cloud and follows cloud native design guidelines are called cloud native applications. In other words, cloud native applications are modern applications that follow cloud native architecture.
 
To learn more about cloud native and how it is changing the world, watch Microsoft Regional Director and CTO here,
 
 
Cloud native architecture brings new challenges to the architects and developers with new concepts, technologies, and tools. Before anything else, you must have a good understand of cloud computing and how cloud technologies work including resources, costs, and consumptions. For example, if you want to architect Azure targeted cloud native apps, you must know basics of Azure.
  
Once you done with basics of Azure, here is a book on Architecting Cloud-Native .NET Apps for Azure.
 
What Is Cloud Native Apps
 

Summary

 
Cloud native computing takes advantage of cloud capabilities to full extent. Cloud native apps are developed and deployed in the cloud and runs in an automated fashion without much involvement of IT. In this article, we learned about what cloud native is, what are the advantages and disadvantages of cloud native architecture, and how to get started with it.
 

References