May 08, 2019
Cloud-native development and containerisation is redefining how software applications are built and run. The movement has captured an increasing amount of press and adoption is brisk as teams innovate modern architectures to build upon the unique capabilities of the cloud. Designing applications from the ground up to run in the cloud is also delivering more robust and flexible applications. But, while containerising apps has become very popular, many developers are simply migrating old code and processes to containers and are not yet developing true native apps.
The cloud-native computing foundation (CNCF) defines it as ”using an open source software stack to deploy applications as microservices, packaging each part into its own container, and dynamically orchestrating those containers to optimize resource utilization.”
The first step towards cloud native computing is implementing containers so resources can be shared with other apps. Containers can also be spun up much faster than VM’s and are portable so they will run the same in any environment. In addition, they offer another layer of isolation from the host environment so applications can be built more securely. These benefits have broad appeal and half of backend developers are using either containers or a service that leverages containers under the hood, such as serverless platforms or cloud functions.
While the benefits of containers are significant it is the combination of containers, microservices and orchestration that enables greater efficiency in the use of cloud computing resources. For example, microservices with heavy workloads can scale out without having to scale the entire application. Also, services that are not required for current workloads can be shut down, thus optimising pay-as-you-go business models and reducing costs. Finally, the scalability and portability of containers combined with orchestration leads to distributed systems that offer greater resiliency. If there is a problem on one server, another instance of the microservers can be spun-up to take its place.
Our survey found that just 43% of developers are using containers plus container orchestration tools and management platforms, leaving 57% managing their own container deployments. Developers who are not leveraging orchestration tools may just be moving existing applications into containers or building simple apps with a few containers that can be managed manually. Cloud native apps have to not only leverage containers but should be designed specifically to capitalise on the efficiencies that the cloud offers. Developers that are using containers but not using orchestration tools, or platforms with built in orchestration, are not really building cloud native apps.
Cloud-native is more than just migrating to the cloud or containerising a monolithic app. Lifting and shifting an existing application and plopping it in a container is not a modern approach. Historically, as new computing platforms emerge, there is a temptation to take the code that already exists and just port it to the new platform. While you may realise some benefits, the true value of the new platform is missed. This is a common mistake developers make as platforms become popular. The growth phase of mobile apps is a case in point. Once everyone wanted apps on their smartphones, developers ported desktop apps to mobile which were not designed to capitalise on the unique benefits or mobility leading to poor experiences.
New services are emerging that offer various levels of abstraction that makes it easier for developers to take advantage of cloud-native architecture. Containers-as-a-Service (CaaS), serverless solutions and cloud functions are making cloud-native development more accessible. Developers can deploy containers and orchestration engines on their own or leverage frameworks provided by CaaS offerings. They can also use serverless platforms so that they don’t have to touch a server at all but still get the benefit of orchestrated containers and dynamic services. These solutions are becoming quite popular: 47% of backend developers are using these functions or serverless architecture.
With the flexibility of native cloud development and microservices, developers are free to use the most appropriate tools and services to build discrete components of their apps or services. The spectrum of abstraction and strengths of each approach enable developers to optimise their applications and development time by using the best technology for the job. For example, cloud native developers can use serverless for running short, event-driven processes and containers for running longer more robust code. Additional services are coming to market to fill niches in the spectrum of cloud-native offerings presenting even more options for developers. For example, AWS Fargate is filling the gap between CaaS and serverless where developers still have access to the server but don’t have to worry about containers. The results from our survey confirm that many developers are using multiple solutions to optimise resources. In fact, 32% of developers using containers are also using serverless and 40% of true cloud native developers leveraging orchestration tools and platforms are also running serverless.
Feel free to download our State of the Developer Nation 16th Edition report.
It’s free and full of insights.