It doesn’t matter what cloud provider you use if the workload is architected to be portable. When designing with portability and standardization in mind, start by identifying vendor lock-in points or where there’s potential for a cloud vendor to prevent you from moving to another provider.
For instance, designing around things like Kubernetes is not always enough. Think about other systems the Kubernetes cluster might interact with or need to interact with. Assess those requirements and design your architecture using open source solutions and core cloud infrastructure primitives, which you can find across any cloud provider.
Focus on standard APIs to ensure compatibility between the application and other systems. Start with RESTful APIs for components that use synchronous (request/response) communication. Their popularity comes from using HTTP, the most common and widely-supported protocol. While other protocols have come and gone and will keep coming for things like video streaming, the ones that have stuck are HTTP-based.
Modular designs with microservices or containers break down the application into smaller, more manageable components, making it easier to add or remove functionality as needed and making the application more flexible and scalable. A cloud-native approach shines as it provides an efficient process for updating and replacing those components without affecting the entire workload.
Once you have a portable architecture, how do you keep it from being so overwhelming from a management point of view? Automation simplifies and streamlines the deployment and management of the application. Use continuous integration/continuous deployment (CI/CD) pipelines and infrastructure-as-code (IaC) tools.
A declarative approach to deployment allows you to codify every part of your workload: the application, software, system configurations, and everything it runs on in dev, staging, and production environments. As a result, you can quickly spin up on a new cloud, failover, or burst onto another cloud provider. With a fully-codified environment that is also versioned, you have everything documented regarding exactly how everything gets set up, and you have a transparent history of all of the changes and everyone who has made changes to it.
And, of course, we must remember security. Following this path to portability allows you to develop a more standard approach to security, eliminating a dangerous “set it and forget it” mentality. I’ve seen this a lot. You deploy a workload in a virtual private cloud (VPC) and assume it’s secure.
Within the same “Everything-as-Code” approach, we implement a portable, standardized architecture; aspects of your security posture can also be standardized and codified. In addition to DevSecOps practices that automate feedback loops, vulnerability testing, and so on, think about access control policies and hardened configuration templates—these can be un-opinionated about the underlying platform and thus can secure your resources with consistency across environments. This approach to security can be immensely powerful, especially when you can pick up that application and drop it on any cloud provider. Being able to pick up your workload and move it around is a solid defensive strategy for disaster recovery.
Benefits of a Portable Architecture
A portable cloud architecture offers flexibility, cost optimization, resilience, scalability, and improved deployment practices. It empowers you to choose the best cloud solutions for your needs, avoid vendor lock-in, and adapt quickly to evolving requirements or market conditions. You also can:
- Increase availability: A portable architecture ensures that applications can be easily deployed across multiple cloud platforms, reducing the risk of downtime due to platform-specific issues.
- Improve agility: A cloud-native architecture enables developers to rapidly iterate and deploy new features and functionality, reducing time-to-market and improving competitiveness.
- Improve security: A portable architecture enables applications and infrastructure components to be more consistently secured, with security features like encryption and identity management integrated into the architecture instead of relying on platform features.
- Increase resilience: A portable architecture ensures that applications can survive hardware and software failures without interruption or data loss.
- Easier management: A portable architecture enables applications to be managed more efficiently, with tools for monitoring, automation, and orchestration that work across multiple cloud platforms.
- Increase innovation: A portable architecture enables organizations to use new and emerging technologies, such as AI and machine learning, to create innovative new applications and services.