There's no longer much debate over whether an organization benefits from migrating at least part of its overall software architecture to the cloud. There is still a debate, however, around which architectural approach organizations should take to design reliable and resilient cloud-based application systems.
Often, organizations will turn to one of two major approaches: a cloud-native approach, where organizations commit to working within the confines of one exclusive cloud platform, and a cloud-agnostic approach, which emphasizes portability and functionality across most, if not all, cloud environments.
The choice between a cloud-native vs. cloud-agnostic approach has become increasingly prominent with the rise of multi-cloud strategies. The decision will have a huge impact on an architecture's ability to sustain in the cloud.
What is a cloud-native architecture?
The cloud-native architecture approach encourages developers to build applications that work natively within a particular cloud environment. While some organizations maintain their own private cloud platforms, most of the time this involves a proprietary, third-party platform provider like AWS, Google Cloud, Azure, Alibaba Cloud or Oracle.
In this approach, software teams benefit from sophisticated features and plugins within the proprietary cloud platform, as well as the stability of managed services. Developers and other application managers are free from the burdens of many back-end configurations and integration concerns and can usually fall back on the provider's support in the case of a major local failure.
Consequently, however, developers may design apps and services that can only function within a specific cloud platform. While it's possible for some of these proprietary platforms to maintain cross-functionality, especially as multi-cloud catches on, porting those applications to another platform will likely require intensive code refactoring and application rebuilds.
What is a cloud-agnostic architecture?
A cloud-agnostic architecture strategy focuses on designing applications that can run seamlessly in any cloud environment. Cloud-agnostic applications and services are not dependent on the limited toolchains of one major cloud platform. Instead, they can integrate with a completely customized mix of vendor-provided and open source tools. While this arguably introduces a degree of risk in terms of tool compatibility and standardized application management, it does liberate the organization from vendor lock-in.
The flexibility and freedom of a cloud-agnostic approach appeal to many organizations, which is why it has gained traction in many development shops. However, developing a vendor-independent app or service requires more work to build and integrate all the required features, which can be a tedious task for development teams.
Cloud-native vs. cloud-agnostic architecture
While both architecture approaches lead to the same goal -- to host distributed applications in the cloud -- the cloud-native approach presents development teams a much different experience than the cloud-agnostic approach. While there are plenty of comparison points to examine, below are six key areas of application development and architecture management where the differences between cloud-native and cloud-agnostic are hard to ignore:
Proprietary cloud service providers (CSPs) typically charge enterprise customers based on a combination of licensing and data storage requirements, allowing organizations to follow a pay-as-you-go model rather than pay flat-rate subscription fees. On top of that, CSPs like AWS, Azure and Oracle offer dedicated cloud cost management services that help organizations keep cloud spending in check.
With the cloud-agnostic approach, however, organizations are on their own. Because cloud-agnostic architectures have greater accessibility to open source tools, some argue it provides more direct control over costs and the ability to make spending adjustments as needed. However, this requires organizations to carefully track spending to ensure that money isn't wasted on tools or platform services the development team doesn't use. On top of that, the organization is responsible for the cost of recovery from major application failures -- which can amount to a hefty bill.
Cloud-agnostic approaches typically offer more development flexibility compared to cloud-native ones. This is because, with cloud-agnostic architectures, developers are not restricted to one proprietary cloud platform's capabilities or tools. In addition, cloud-agnostic architecture often incorporates open source tools, libraries and integrations that constantly evolve to reflect emerging development trends.
On the other hand, cloud-native applications can benefit from a proprietary platform's built-in provisions for security, networking, monitoring and other underlying architecture concerns that tend to stymie large development efforts. AWS CodeCommit and CodePipeline are examples of powerful tool sets that only those who subscribe to the platform can enjoy.
It's worth noting that automation and DevOps platforms like Jenkins and Gitlab provide a viable level of support for independent, cloud-agnostic application builds. However, the cloud-agnostic lifestyle will inevitably require developers to create and integrate functionalities on their own, which can be a costly and time-consuming process that requires significant levels of in-house expertise.
3. Time to market
A cloud-native strategy will often allow for shorter time to market for application builds than cloud-agnostic, thanks to the array of prebuilt templates, tools and ready-to-use infrastructure that most providers include within their proprietary platform. For example, the Cloud Build service within Google Cloud Platform enables developers to build, deploy and test applications out of the box, and even provides a streamlined system for quick multi-cloud deployments.
The complexity of calibrating a cloud-agnostic architecture to take on new applications and features means that it can take a while for projects to get off the ground. Because of this, organizations may risk losing a competitive edge.
Cloud-agnostic architecture is, arguably, the better option when it comes to application and service scalability. This is because, in a cloud-agnostic architecture, apps and services can move across cloud platforms, which means they can quickly scale up to meet demand.
This is particularly useful when migrating on-premises architectures to the cloud, because having a cloud- or platform-agnostic architecture makes it easier to transition while still maintaining core business services on premises. Open source tools like Helm charts for resource creation, or Prometheus for monitoring, operate the same irrespective of which cloud platform they're used on.
Cloud-native architecture makes the most of CSP tools, and the cost of those tools will include support for things like security enforcement, back-end management and continuous application monitoring. With a cloud-agnostic approach, on the other hand, you might pay for tools you never use.
There can also be orchestration challenges associated with cloud-agnostic architectures in which applications run across several platforms. For example, it can be difficult to build a unified orchestration layer that can efficiently manage the complexities and differences of each cloud platform.
Developing applications and services to function in any production environment, as is the case with cloud-agnostic architectures, can provide a good amount of redundancy and recovery speed in the event of a failure. To further minimize downtime, you can switch services over to another platform while one platform undergoes maintenance or experiences a disruption.
Cloud-native strategies, on the other hand, often carry the risk of vendor lock-in. If a CSP decides to significantly hike their prices or discontinue their services, businesses with cloud-native architecture can be left in the lurch.
When to use each approach
Cloud-native and cloud-agnostic approaches are not mutually exclusive, and you don't necessarily have to go all in when picking a strategy. It's technically possible to use each approach for different business teams with unique needs.
A common approach is to adopt a cloud-agnostic strategy when development teams are focused on core business apps and services, so that the continuity of your business model does not depend on the proficiency or survival of a cloud provider. You can then exploit the speed and cost-efficiency of cloud-native architecture to run ancillary apps and services in the cloud.
You could also start out with a solely cloud-native approach to quickly get consumer-facing web applications to market, and then slowly migrate to cloud-agnostic architecture once you have established business stability or acquired the specialized resources needed to build a cloud-agnostic infrastructure. For instance, slowly introducing some of the open source tooling mentioned earlier could protect you from vendor lock-in, which can offer you the best of both cloud-native and cloud-agnostic architecture.