The global cloud computing market is slated to surpass $120 billion this year, per a report by Forrester. Driving this relentless growth and adoption are a variety of paradigm shifts in infrastructure, software, networking and application technology. And primary among them is cloud-native computing.
“Cloud-native” refers to the optimum mix of architecture and technology that enable the design, development and operation of workloads in the cloud, taking full advantage of the cloud computing model.
In fact, there is an entire open source software body – the Cloud Native Computing Foundation (CNCF) – dedicated to making cloud-native universal and sustainable. It currently oversees contributions from nearly 150,000 IT professionals to over 100 projects and platforms. Here’s what the CNCF has to say about cloud-native applications:
"Cloud native technologies empower organisations 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."
This definition reflects the changing face of IT. From a traditional focus on processes and automation, IT is now the face of business offerings. Cloud applications have taken IT from being a function to being the business itself.
No wonder then, that there are over 6.5 million cloud developers around the globe building cloud-native applications for every conceivable business workload. These would be technology agnostic when scaling, based on best practices such as DevOps, delivered using methodologies, deployable to multiple clouds platforms while being less susceptible to vendor lock-in, and less prone to side-effects of “quick fixes” even with faster release cycles.
However, there are many components and architecture considerations that need to be borne in mind before an organization can fully embrace cloud-native app development.
Since the cloud itself means different things to different people, organizations need to define and stick to certain coding fundamentals, best practices, and processes to meet their app development and delivery objectives.
“When people say they want the cloud, what they really want is the ability to flexibly deploy resources and reconfigure them as needed,” said Steve McDowell of Moore Insights & Strategy. “Cloud-native is about packaging, managing, and running a workload that is sensitive to its environment.”
Getting all the core elements – infrastructure, platform, software, and services – of cloud-native application development right is crucial to delivering a smooth, modern user experience. Let’s examine them one by one and see how they come together to bring cloud-native apps into production and enable various business initiatives.
Microservices
A microservice architecture (pioneered by Netflix) replaces the single, monolithic executable of traditional applications with multiple, separately built functional modules. This is a radical change in the deployment model and drastically cuts down the time and effort spent on integration, testing, and release.
The fundamental attributes of a microservice are:
- Built and deployed independently
- Enables a specific capability within a workload
- Encapsulated and self-contained, having its own programming platform, dependencies, processes, and data storage framework
- Use APIs to communicate with other microservices
Since each microservice operates on its own, it doesn’t affect other moving parts of the application – there’s no need to update any other code except that of the microservice that’s being changed. This enables faster roll outs and makes continuous integration/continuous delivery (CI/CD) a reality (as opposed to the traditional timed release and versioning processes).
A microservice-based architecture also simplifies troubleshooting and isolated debugging, modification, and updating. For instance, one feature or function of a workload (such as video streaming) is buggy or facing usage spikes, developers can improve or scale that function without the need to redo the entire executable and with limited and precise provisioning of resources.
In the same vein, if a function or feature grows bigger and unwieldy, it can be hived off or partitioned into more granular microservices. This results in reduced complexity and easier app monitoring and management.
Application Programming Interfaces (APIs)
Microservices that make up a cloud-native app need an intrinsic mechanism to talk to each other – to send and receive data, meta data and service requests. Further, client-facing microservices need to accept and respond to user requests from different devices, browsers and other web/mobile clients, and UIs.
RESTful APIs are the go-to interfaces to manage communication between microservices in cloud-native applications. They’re “called” by other services (that could be residing on the same server or halfway across the internet) using standard protocols such as HTTPS, WebSockets, gRPC, AMQP, etc.
Developers need to implement techniques such as:
- Versioning to update the API format when they add a new function that requires or accepts additional arguments to the microservice
- Monitoring, data caching, throttling and circuit breakers to make sure the service isn’t overwhelmed by too many API calls due to a usage spike or DDoS attack.
Containers
Containers are basic parts of the architecture that enables cloud-native app development. They offer a faster and lighter (far less resource-intensive) alternative to VMs as compute platforms for deploying individual microservices.
In the age of the hybrid and multicloud environments, containers guarantee consistency and increase application portability across different cloud systems. Karbon – an enterprise Kubernetes management solution from Nutanix – is a multi-cloud PaaS that accelerates the development and deployment of cloud-native apps on-premises, in the public cloud, and at the edge.
Backing Services
No software is developed in isolation, least of all cloud-native apps. A lot of supporting systems and resources such as identity and monitoring services, tracking and analytics services, data stores, messaging and queueing systems, caching services, etc. are needed to make the application architecture cloud-ready.
Developers have the choice of hosting their own backing services or getting managed services from a cloud provider, which come with availability, redundancy, and monitoring built in.
Backing services can be bound dynamically to a microservice with configuration information (a URI and credentials). This way, the backing service acts as an attached resource but is decoupled from the application at the same time, making it interchangeable.
Backing services can be attached to and detached from a microservice without code changes by externalizing the configuration information using a configuration management tool.
Modern Design
The combination of microservices, APIs, and containers is certainly not a panacea for the challenges of application development in the cloud. IT teams need to develop customized application monitoring and management methods suitable to the cloud model and IT infrastructure they have in place.
Sean Roth, Director of Product Marketing at Nutanix, emphasizes the role of DevOps in enabling IT teams and software developers to work together to build and deploy modern cloud-native applications.
“In many cases, developers speed ahead with their applications and IT operations struggles to keep up with their resource needs,” said Roth. “DevOps, and the mindset that goes with it, alleviates that roadblock to a degree.”
“Traditional waterfall methodologies are characterized by gross disconnections between developers and IT operations, with development cycles that can stretch into years,” said Mark Lavi, DevOps Advocate at Nutanix. “Cloud-native eliminates many of those burdens by exploiting the scalability and automation features of cloud computing models and combining them with newer DevOps practices, which helps align development with business objectives.”
Some of these practices are:
- Adopting the twelve-factor methodology that makes apps suitable for deployment on cloud platforms by maximizing portability, obviating the need for server administration, augmenting hyperconvergence among various platforms and environments, allowing the workload to scale without significant changes to the architecture, and enabling continuous deployment
- Knowing when to develop new cloud-native applications from scratch, when (and how) to modernize, refactor, extend, or containerize existing apps, and when to buy a readymade or customized solution to scale existing workflows while capitalizing on the agility and flexibility of the cloud
- Decoupling data from the application (breaking out processing and data into separate components) and storing it in a public, private, or hybrid cloud as appropriate
- Optimizing communication between application components by grouping them into scheduled streams rather than continuous or on-demand transmission
- Unified and centralized performance monitoring and control along with automated provisioning and de-provisioning of resource instances according to workload needs
- A DevSecOps approach to security with responsibility shared by developers and the IT security team; systemic cloud-native security built into the application architecture, enabling it to leverage identity and access management (IAM) using a zero trust model
- Building observability throughout the stack and application container along with centralized logging, monitoring, and persistent storage, so as to ensure full and on-demand visibility into all the components of the application as well as the data that it processes
- Automated, developer-driven functional testing to free up QAs groups to focus on integration testing, client testing, and performance/load testing
There’s a Cloud for That
All this time, organizations have struggled to match their application development efforts with their business goals. This is perhaps where cloud-native technology delivers the most value – it has automated almost the entire software development lifecycle by commoditizing infrastructure and providing on-demand PaaS experiences for developers.
“If 2020 taught us anything, it's that you need to be able to dynamically reconfigure your IT environment based on what's happening in the world. Companies that are tied to legacy environments are the ones that really struggled,” explained McDowell. “Cloud-native isn’t going to put your company out of business if you don't adopt it, but it's going to make you a laggard in your industry. It is now the way we provide responsive IT services.”
Featured Image by Pxfuel
Dipti Parmar is a marketing consultant and contributing writer to Nutanix. She writes columns on major tech and business publications such as IDG’s CIO.com, Adobe’s CMO.com, Entrepreneur Mag, and Inc. Follow her on Twitter @dipTparmar and connect with her on LinkedIn.
© 2022 Nutanix, Inc. All rights reserved. For additional legal information, please go here.