What Is Cloud Native Computing?
By: David Chung
Tags: Cloud Native, Programming, Coding, Flatiron School, Kubernetes

Many employers want developers who have experience with Cloud Native Computing. As a junior developer, I currently have no experience with Cloud Native Computing. Thus, here is an overview of what Cloud Native is and what it entails.

“Cloud Native” is an approach to building and running applications that takes advantage of the cloud computing delivery model. In development, it utilizes cloud computing to build and run scalable applications in modern, dynamic environments such as private, public, and hybrid clouds. It’s about how applications are created/deployed as opposed to where. Cloud native applications live in the “Cloud” vs. data centers.

The CNCF (Cloud Native Computing Foundation) defines “cloud-native” a bit more succinctly. It defines Cloud Native as using open source software stack to be containerized, where each part of the application is packaged in its own container, dynamically orchestrated so each part is actively scheduled and managed to optimize resource utilization, and microservices-oriented to increase the overall agility and maintainability of applications.

By taking advantage of cloud services, applications can use agile and scalable components like containers and deliver reusable features that integrate readily. Cloud-native app development typically includes Devops, Microservices, cloud platform, continuous delivery and agile methodology. It also includes containers like Kubernetes and Docker, some of the more modern ways of application deployment.

Cloud Native applications require a different architecture than traditional enterprise on premise applications.

Languages

Cloud Native applications typically use web-centric languages such as: HTML, CSS, Java, Javascript, Node.js, .Net, Go, PHP, Python, and Ruby. Traditional on premise applications are usually written with C/C++, C#, or Enterprise Java. If it’s with a mainframe, it’s written with one of the early programming languages: Cobol.

Elasticity

Traditional on premise applications can’t scale dynamically while Cloud Native applications take advantage of the elasticity of the cloud by using other resources during a spike. A user can set a cloud application to use extra computational resources when a spike occurs. The application can also scale and adjust to spikes as needed.

Updatability

Traditional applications need constant updates that need delivery based off a subscription based model that depends on the vendor. It requires downtime whenever it needs the updates. Cloud Native applications can update constantly and are always up to date. There is virtually no down time for these updates.

Multitenancy

Many traditional on premise applications don’t work well in an virtual environment or don’t work at all, which requires a non virtual space to operate. Cloud Native applications have no problem working in virtual spaces and is able to share resources to other applications.

Connected Resources

Traditional on premise applications are antiquated in its connections to the network resources. It is rigid in its network, security, permissions and storage. All of these resources usually need to be hard-coded and can easily break if any of that code is change. With the Cloud Native applications, network and storage operate completely differently. Cloud applications can accommodate changes in networking, storage and even database technologies in real time to allow the app to run in the cloud. This is a term called “re-platforming”.

Down Time

On premise applications are server dependent. Thus, if a server were to go down, there is a strong likelihood the applications that run on that server go down with it. If a cloud provider suffers an outage, another region can pick up the slack.

Modular Design

Traditional on premise applications tend to be archaic in design. It usually is one big application with some sub-libraries. Cloud Native applications are much more modular and have many functions that are broken down into micro-services. This allows some of these functions to be shut off when they are not needed and can update specific parts rather than the whole application.

Automation

On premise applications have to be managed manually and are slow. Cloud Native applications are mostly automated and most of the automation is in application management. This automation can increase the speed, reliability, and provides proven audited processes.

Statelessness

Cloud Native applications are generally not tied to infrastructure. This means that generally these applications are stateless. Cloud Native apps store its state in a database. This allows the application to be ‘loosely coupled’ and not tied to infrastructure. This allows the app to be run in a highly distributed manner and still be able to keep its state independent of the infrastructure. On premise applications are stateful; they store the state of the application on the infrastructure the code runs on. This can cause breakage when adding server resources.

Conclusion

The benefits of Cloud Native Applications far outweigh traditional on premise applications. The reason why there is so much hype surrounding cloud based computing is because of the multitude of benefits cloud native applications bring. Learning how to use cloud native computing is going to be a skillset that will be invaluable to future software engineers.