The term cloud-native often invokes a lot of confusion, in part because it is used twofold. On the one hand, cloud-native refers to the approach of building an application that is intentionally designed for a cloud environment. On the other hand, the term is also used to describe the characteristics and architecture of such applications. As technology and the cloud are constantly developing, so too is the term cloud-native.
Cloud-native defined
According to Google Trends, the term was frequently used in the early 2000s during the starting days of cloud computing and gained momentum as an industrial buzzword around 2015. Everyone seems to have a different idea of what exactly cloud-native means, so in an attempt to streamline the term, the Cloud Native Computing Foundation defined cloud native as "technologies [that] 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." Figure 1: Google searches for the term “cloud native” worldwide over time.
Cloud-native architecture
Applications are distinguished by different modernization levels. Traditional applications such as Luware LUCS are built on-premise using a monolithic architecture, i.e. they use a single codebase for all functionality. In a monolithic architecture, development teams are restricted to one or two coding languages, code changes have to be carefully coordinated and deploying new features requires a lot of upfront testing. The next step in the modernization process is to migrate the application into the cloud. That means that instead of running on an enterprise’s on-site server, the application is moved to an off-site data center where it can be accesses by the enterprise through the internet. Luware Stratus was an example of such an infrastructure-ready application. The peak of modernization is a cloud-native application such as Luware Nimbus, which is explicitly built using a microservice architecture to optimally perform and scale in a cloud environment. Figure 2: Different modernization levels as exemplified by Luware products [Graphic adapted from Microsoft]
Microservices are an integral component of cloud-native applications. Microservices separate the codebase into autonomous subsystems that have their own functionality and area of responsibility. These microservices are then containerized, which basically means that the code and everything that it needs to run is bundled up and isolated from the operating environment. This removes any risk of conflict between different coding languages or frameworks and makes it easy to move containers into different environments. Containers can be added, replaced, or updated without disrupting the application at large, making the application agile and hyper-scalable. Orchestrators, such as Kubernetes, are used to manage containers based on demand to warrant an optimal resource distribution. Such platforms also make it easier to identify a container with a bug, thereby facilitating a non-interruptive and simple troubleshooting. This facilitates continuous updates in the software. Whereas in a monolithic application like LUCS updates are deployed bi-annually, new features are rolled out weekly or even more frequently in a cloud-native application like Nimbus.
Cloud-native development
Cloud-native is more than just a set of technologies. Migrating to cloud-native software comes with significant development costs as well as cultural and organizational changes. Software vendors have to completely reorganize themselves and adapt a cloud-native mindset. Whilst the traditional monolithic approach lends itself to a conservative and cautious mindset, as one missing semicolon can shut down an entire system, a cloud-native culture should embrace failure and promote risk-taking and allow developers to experiment with new features. Processes are sped up and optimized for continuous delivery and fast innovation is required to keep up with quickly changing consumer needs. A cloud-native mindset embraces all the architectural possibilities of the cloud in terms of flexibility, agility, and scalability.
Key Takeaways
- Cloud-native can refer to the fact that an application optimally scales and performs in a cloud environment. Additionally, cloud-native may refer to the key characteristics of cloud-native applications such as a microservice architecture.
- Cloud-native applications are built on microservices. Microservices are packaged into containers and dynamically orchestrated using for e.g. Kubernetes to optimally distribute resources.
- Benefits of a microservice architecture include practically unlimited scalability as well as increased agility to respond to market demands.
- Microservices facilitate maintainability of applications and updates can be undertaken without shutting down the application. Resiliency to failures is improved.
- Transitioning to cloud-native development requires a change in mindset to embrace all the architectural possibilities of the cloud.