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.
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.
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,
Microservices are easy to write since each microservice focus on one specific problem and module.
- Microservices are developed and deployed independent of other microservices.
- Microservices are scalable and consume as needed resources. When more resources required, Microservices use cloud architecture to add resources on demand.
- 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.
- Microservices code development is horizontal and can scale and distributed among multiple team members.
The disadvantages of microservices architecture are,
- 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.
- Microservices are suitable for cloud native applications only.
- Initial time required to develop and cost is higher.
- Resource sharing between microservices is a cumbersome task.
- Maintainability of multiple microservices apps is ton of work compare to a single Web API app.
- 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,
Containers run everywhere independent of platform and infrastructure. A container can be deployed on Linux, Windows, Cloud, and a Data Center.
- 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.
- 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.
- Containers are easy to create, deploy, and maintain.
- 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.
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.
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.
Benefits of Cloud Native
The key advantages of cloud native include the following,
- Pay per use model. You don’t pay if you don’t use.
- Rapid development and delivery to the end user.
- Automated build and deployment.
- No cloud dependency. Any cloud, any platform, any operating system.
- Easy migration from one cloud to other.
- Integration with multi-cloud architecture.