What Is Cloud Native, Exactly?
I had the pleasure recently of interviewing Robert Vettor, a Premier Developer consultant who specializes in microservices and cloud native architecture. Robert’s in the process of writing a great book on “Architecting Cloud-Native .NET Apps for Azure” which is available now in a preview version. I found our conversation enlightening – Robert’s always so locked into the realities of both legacy code and the real-world strengths and liabilities that come with developing and supporting enterprise software. I’m sure you will too!
A condensed version of our interview is below. I encourage you to check out the podcast – and then dive deeper into Robert’s book for more! There’s also extensive coverage of many of these principles in my book “Achieving DevOps”, which Robert was instrumental in helping me launch. Thanks again my friend!
The book begins with a description of the “Fear Cycle” that may be all too familiar – the life of someone in charge of a brittle, hard to maintain application. It all started out so easy – but as its functionality has expanded, so has the complexity, to the point where no one understands it well. Each change comes with unintended and costly side effects – new features are increasingly expensive to implement, and often breaks important pieces elsewhere. Deployments happen slower and slower, often quarterly, with frequent “red” builds and all-weekend build parties in corporate war rooms. The framework – which is impossible to modernize with newer libraries – ages and becomes increasingly unstable. This system cannot go down – the business depends on it – but change is becoming near impossible, and highly risky. Things simply cannot go on this way.
Enter the world of the cloud native application. At Microsoft, we’ve followed the definition set by the Cloud-Native Computing Foundation (CNCF):
“Cloud-native technologies 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.”
For example, look at this diagram below of a sample web-native architecture:
This is a big difference from a traditional n-tier application (or monolith). This cloud-native application is decomposed across a set of small isolated microservices. Each service is self-contained and encapsulates its own code, data, and dependencies. Each is deployed in a software container and managed by a container orchestrator. Instead of a large relational database, each service owns its own datastore, the type of which vary based upon the data needs.
Note how some services depend on a relational database, but other on NoSQL databases. One service stores its state in a distributed cache. Note how all traffic routes through an API Gateway service that is responsible for routing traffic to the core back-end services and enforcing many cross-cutting concerns. Most importantly, the application takes full advantage of the scalability and resiliency features found in modern cloud platforms.
In the book, we explore all of the key concepts described by CNCF in the definition of cloud native: Containers, API Gateways, Immutable Infrastructure, Microservices, and Declarative APIs. Along the way we answer questions like the following:
- Should everything be cloud native?
- What approach should I use for brownfield (legacy) applications?
- What business problems can the cloud-native approach help resolve?
- What three different approaches are there in migrating existing applications to the cloud?
- How can the 12-Factor Methodology help create a pragmatic checklist to audit my applications for cloud readiness?
Another great resource for you Premier customers out there is a brand new chalk talk called “Thinking in Cloud Native”. In two hours we condense the essence of the book – exploring how companies are constructing their digital foundation with cloud native architecture, fusing microservices, containers, automation and cloud infrastructure. Get in touch with your Premier Developer Application Development Manager (ADM) to get this on your team’s radar!
To stay competitive, move fast and use the cloud as a competitive advantage, you too need to be “thinking in Cloud Native.” With some outside-the-box thinking, your applications can become more robust, easier to maintain, and built for the modern cloud.
- Our 30-minute podcast interview: https://anchor.fm/dave-harrison5/episodes/Interview-with-Robert-Vettor-of-Microsoft—What-Is-Cloud-Native-eb4ur3
- The Cloud Native Computing Foundation (CNCF) Cloud-Native Trail Map, and the official definition
- Preview edition of “Architecting Cloud-Native .NET Apps for Azure”: https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/
- A good exploration of Infrastructure as Code, or IaC. Sam Guckenheimer describes how, “Teams who implement IaC can deliver stable environments rapidly and at scale. Teams avoid manual configuration of environments and enforce consistency by representing the desired state of their environments via code. Infrastructure deployments with IaC are repeatable and prevent runtime issues caused by configuration drift or missing dependencies. DevOps teams can work together with a unified set of practices and tools to deliver applications and their supporting infrastructure rapidly, reliably, and at scale.”
- An excellent resource that we explore at length in the book – and align with cloud-native architectural principles – is that of 12-Factor Methodology. We also highly recommend the book “Beyond the Twelve-Factor App” by Kevin Hoffman, which provides three additional factors that reflect today’s modern cloud application design.
- Last, the Microsoft e-book Modernize existing .NET applications with Azure cloud and Windows Containers provides guidance for migrating on-premises workloads into cloud. We explore this more in the book – but there is no single, one-size-fits-all strategy for modernization.