Tech Insights / Cloud Native

What is cloud native? Demystifying the cloud native application architecture

Defining cloud native

Cloud native is an approach to developing, deploying, and running applications using cloud computing methods and tools. Fundamentally, cloud native is about structuring teams, culture, and technology to take advantage of modern architectures and advanced automation to manage complexity and increase software development velocity.

Organizations that build and operate applications using a cloud native architecture are able to bring new ideas to market faster and respond sooner to customer demands. Cloud native applications are built to take advantage of core technologies including containers, Kubernetes, and the Kubernetes ecosystem. Cloud native development (modern development) incorporates the concepts of DevOps, continuous integration, and continuous delivery (CI/CD) and embraces modern architectures including microservices and serverless.

Cloud native development is about how applications are created and deployed, not where. No matter whether you deploy on-premises, in a public cloud, or using a hybrid or multi-cloud model, on-demand computing power and access to modern data services and application services are essential for success.

Developing applications with cloud native architecture

The Cloud Native Computing Foundation (CNCF) encourages organizations “to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds.” Building and operating cloud native applications requires you to rethink your approach to application delivery based on cloud native architectural principles. Cloud native application development builds on containers, Kubernetes, and other infrastructure elements, creating code using cloud native development tools and cloud native architectures:

  1. Immutable infrastructure offers predictable performance and increased speed for cloud native software development by never modifying deployed servers. Instead, new servers are built automatically with appropriate changes, updates, or fixes provisioned.
  2. Containers make cloud native applications more reliable and portable across environments. Applications encapsulate code in one or multiple containers, and Kubernetes automates the deployment and operation of these containers.
  3. A service mesh provides a dedicated infrastructure layer that facilitates communications between services or microservices and enables multi-cloud, multi-runtime connectivity with zero-trust application security, API protection, and data encryption.
  4. DevOps creates a culture and an environment between software developers and IT operations where building, testing, and releasing high-quality software happens rapidly, frequently, and more consistently.
  5. CI/CD is the process of moving incremental software changes into production on a continuous basis using automation. CI/CD enables developers to deliver code changes quickly and securely, so you can deliver software more frequently with less risk.
  6. Microservices architecture breaks up an application into a collection of smaller services (each deployed in a separate container or set of containers). Each service implements a specific capability or a small set of capabilities and communicates via APIs or messaging.
  7. Serverless is a cloud native computing model that encourages developers to write code—or functions—without having to concern themselves with server management or underlying infrastructure.
  8. Event-driven architecture utilizes a tell, don't ask approach. Event-driven code only performs its function in response to a specific type of event. Event-driven architecture can incorporate both microservices and serverless components.

“One of the things we’ve learned is that if you can’t get it to market more quickly, there is no doubt that the market will have changed and no matter how well you’ve engineered it or built it or deployed it or trained your folks, it’s not going to be quite right because it’s just a little too late.”

James McGlennon, Executive VP and CIO
Liberty Mutual Insurance Group

What are the benefits of cloud native?

Cloud native applications are built and deployed in a rapid cadence, by small, dedicated teams, to a platform that offers easy scale-out and the ability to decouple hardware. This approach provides organizations with the benefits of cloud native architecture such as greater agility, resilience, and portability across cloud environments.

Further benefits of cloud native applications include:

  • Decreased time to market. Cloud native development means switching from a focus on IT cost savings to recognizing digital services as an engine of business growth. In the digital age, businesses that can quickly build and deliver applications in response to customer needs will achieve enduring success.
  • Increased reliability and flexibility. When legacy infrastructure fails, services can suffer. In a cloud native world, teams focus on architecting for resilience. The rapidly expanding open source and cloud native landscape helps developers and architects design software services that stay online despite hiccups in the environment.
  • Independence and freedom of choice. Public cloud providers continue to offer impressive services at a reasonable cost. But most enterprises aren’t ready to choose just one cloud environment. With a platform that supports cloud native development, enterprises build applications that run on any cloud without modification. Independent teams retain the ability to run apps and services where it makes the most business sense—while avoiding vendor lock-in.
  • Reduced downtime. By automating IT operations, enterprises can transform into lean, focused teams aligned to business priorities. This eliminates the risk of failure due to human error as teams focus on automation to replace manual admin tasks. Automated live patching and upgrades at all levels of the stack eliminate downtime and the need for IT experts.
  • Improved security. Cloud native security offers a transformative way to reduce risk. Threat mitigation occurs when systems can be quickly updated. Automation and the adoption of immutable infrastructure help to eliminate systems with unique (and therefore problematic) security configurations.

Cloud native vs traditional monolithic applications

Cloud native applications
Traditional monolithic applications
Predictable. Cloud native apps conform to a framework or “contract” designed to maximize resilience through predictable behaviors. The automated, container-driven infrastructure used in cloud platforms drives the way software is written. A good example of such a “contract” is illustrated by the 12 principles first documented as the 12-factor app. Unpredictable. Traditional applications can’t realize all of the benefits of running on a cloud native platform due to the unique way each application is architected or developed. This type of application often takes longer to build, releases improvements in big, infrequent batches, scales up instead of out, and assumes the underlying infrastructure provides high availability.
OS abstraction. A cloud native architecture gives developers a means of abstracting away underlying infrastructure dependencies. Instead of configuring, patching, and maintaining operating systems, teams focus on software. The most efficient means of abstraction is a formalized platform. OS dependent. Traditional application architecture requires developers to build close dependencies between the application and underlying OS, hardware, storage, and backing services. These dependencies make migrating and scaling the application across new infrastructure complex and risky.
Right-sized capacity. A cloud native application platform automates infrastructure provisioning and configuration, dynamically allocating and reallocating resources at deploy time based on the needs of the application. Building on a cloud native runtime optimizes application lifecycle management, including scaling to meet demand, resource utilization, orchestration across available resources, and recovery from failures with minimum downtime. Over-sized capacity. Traditional IT designs a dedicated, custom infrastructure solution (“snowflake”) for an application, delaying deployment of the application. The solution is often over-sized and built to satisfy worst-case capacity estimates with little ability to scale beyond design limits to meet demand.
Collaborative. Cloud native architecture facilitates DevOps, a combination of people, process, and tools that increases collaboration between development and operations teams to speed and smooth the transfer of finished application code into production. Siloed. Traditional applications utilize an over-the-wall handoff of finished application code from developers to operations. Organizational priorities take precedence over customer value, resulting in internal conflict, slow and compromised delivery, and poor staff morale.
CI/CD. IT teams make individual software updates available for release as soon as they are ready. Organizations that release software rapidly get a tighter feedback loop and can respond more effectively to customer needs. CI/CD works best with other related approaches such as test-driven development. Waterfall development. IT teams release software periodically, typically at intervals of weeks or months, despite the fact that many components of a release may have been ready much earlier with no dependencies. Features that customers want or need are delayed and the business misses opportunities to compete, win customers, and grow revenue.
Independent. Microservices architecture decomposes applications into small, loosely coupled, independently operating services. These services map to smaller, independent development teams and make possible frequent updates, scaling and failover/restart without impacting other services. Dependent. Monolithic architectures bundle many disparate services into a single deployment package, causing unnecessary dependencies between services and leading to a loss of agility during development and deployment.
Automated scalability. Infrastructure automation at scale eliminates downtime due to human error, consistently applying the same set of rules across any size deployment. Cloud native also goes beyond the ad-hoc automation built on top of traditional virtualization-oriented orchestration. A fully cloud native architecture is about automating systems, not servers. Manual scaling. Manual infrastructure includes human operators that manually create and manage server, network, and storage configurations. At scale, operators are slow to correctly diagnose issues and fail to correctly implement solutions due to the level of complexity. Hand-crafted automation recipes have the potential to hard-code human errors into the infrastructure.
Rapid recovery. The container runtime and orchestrator provides a dynamic, high-density virtualization overlay, ideally matched to the microservices architecture. Orchestration dynamically manages placement of containers across a cluster to provide elastic scaling and recovery/restart in the event of app or infrastructure failure. Slow recovery. VMs by themselves are a slower and less efficient foundation for microservice-based applications due to slower startup/shutdown and operating system overhead for each VM.
Streamline productivity. Developer experience (DevX) assesses how well developers interact with the systems and tools necessary for cloud native application development. A positive DevX allows developers to better deliver robust, scalable apps, ship software quickly in response to changing market dynamics or customer needs, and deliver business value. Entrenched culture. Legacy platforms are significant obstacles to developer productivity. Many businesses tend to be reactive and treat software development as a “one-off” project, even while recognizing how important developer experience is to achieving positive business objectives.

What to keep in mind if you're considering cloud native applications

With a cloud native architecture, your operations teams become champions of process improvement and automation, delivering direct value to the business. A cloud native platform takes care of Day 1 release and Day 2 application operations, automatically monitoring and remediating issues that previously would have needed manual intervention.

Checklist of considerations

This cloud native checklist will help you get the most from your development efforts.

  • Prioritize workloads for modernization. Not every application should be converted to cloud native. Business and IT professionals need to work together to prioritize legacy and greenfield workloads to determine the technical feasibility, strategic importance, and ROI in each case.
  • Make good decisions. Developers require more discipline to standardize cloud native platforms and services. With so many choices available, it’s tempting to embrace new technology and patterns for every app. Smart teams embrace a set of platform constraints and focus on innovative software, rather than reinventing the wheel for each application.
  • Decide whether to build or buy a platform. Some teams can build their own platform using a combination of open source automation and container technologies. However, a do-it-yourself (DIY) platform requires an expert skill set to implement and maintain. A proven, integrated cloud native platform provides a built-in set of developer tools and systems that lets teams focus on building and deploying software quickly and securely on any public or private cloud with more confidence and less preoccupation with ops and infrastructure.
  • Offer Golden Paths. A Golden Path is a supported approach and defined set of components for building and deploying software using cloud native technologies and methods. A Golden Path centralizes tools, frameworks, and documentation into an opinionated process that reduces cognitive load, boosts developer productivity, and simplifies the software development process.
  • Choose between self-paced and immersive skill-building. Learning through immersion can give a team a solid foundation in Agile product development practices such as CI/CD and reinforce new development habits. There’s a wealth of information out there about this model: consume it and try it out.

Do you need a platform engineering team?

Platform engineering is a discipline that focuses on the design, development, and maintenance of the underlying platform that supports the development and deployment of modern applications. Platform engineering sprang from the DevOps movement and, when implemented properly, helps organizations optimize their development processes and reduce overall cycle times. Platform engineering teams focus on creating and maintaining a platform that supports the development and deployment of applications, services, and infrastructure. They also help provide the tools developers need to deploy software securely and quickly, resulting in a curated experience and a paved path to production.

Prioritize DevSecOps and shift-left security

Whether you’re automating software builds, testing, or deployment, DevOps teams work together, sharing responsibility for the entire process. Implementing DevSecOps extends this collaboration, embracing a “shift left” philosophy that brings security teams into the DevOps pipeline from the start, improving the overall security of application development and resulting in faster, safer, and more cost-effective software delivery.

While part of DevSecOps is getting developers to write more secure code, you shouldn’t overload developers by expecting them to handle the majority of security tasks. Instead, "shifting left" means moving security activities and policy enforcement closer to developers and building out the guardrails, platforms, and tools necessary to build secure applications. For example, a software bill of materials (SBoM) maintains a list of an application’s dependencies (such as third-party services, software packages, open source software stacks, and codebases) and manages those software dependencies in an automated, machine-readable manner. This allows teams to more easily track application changes and identify and remediate vulnerabilities.

Cloud native applications at VMware

The VMware team and the VMware Tanzu portfolio of products and services deliver the expertise, advice, and tools you need to get started on your cloud native journey.

VMware Tanzu Application Platform encompasses the capabilities you need to jumpstart your cloud native efforts, boost developer velocity, and accelerate the path to production. Tanzu Application Platform supports multi-cloud environments and runs on any API-conformant Kubernetes distribution.

VMware Tanzu Labs can help your teams build the skills they need to succeed with cloud native and modern development methods. Our experts can help you get better results from any and all stages of the application lifecycle from governance to development to maintenance.

VMware Tanzu for Kubernetes Operations provides a simplified, consistent approach to container deployment, scaling, and management with tools, automation, and data-driven insights.