I just finished a series of seven blogs on emerging technologies that are driving Software Defined Datacenters (SDDC) @ http://www.vamsitalkstech.com/?p=1833. The key business imperative driving moves to new datacenter architectures are their ability to natively support digital applications. Digital applications are “Cloud Native” (CN) in the sense that these interactive applications are originally written for cloud-based IaaS deployments. This as an alternative to simply being ported over to the Cloud, as an afterthought. Thus, Cloud Native application development is emerging as the most important trend in digital platforms and one that determines enterprise competitiveness. This blog post will identify the four key considerations of embarking on an enterprise CN strategy.
Every Enterprise Needs a Cloud Native Strategy…
Cloud Native applications need to be architected, designed, developed, packaged, delivered and managed based on a deep understanding of the frameworks of cloud computing. The application itself is designed for scalability, resiliency, and incremental enhance-ability from the get-go. Depending on the application, supporting tenets include IaaS deployment & management; and Container Orchestration. These applications need to support the development of & incremental enhancements using agile principles. The fundamental truth is that not only will this change how your infrastructure is provisioned & deployed but also how it is managed.
A Galaxy of possible technology choices…
Cloud Architecture typically spans four different areas – 1) Business Architecture, 2) Data Architecture, 3) Application Design & 4) Deployment Architecture. Given rapidly maturing cloud-based delivery models (IaaS and SaaS) – many 2018 EA and innovation committees in Fortune 1000 enterprises now compulsorily include an awareness of cloud-native architecture strategies and design across these four key technical domains.
Step #1 Perform an Enterprisewide Application Portfolio Rationalization Assessment…
One of the key things I recommend organizations do at the onset of their cloud journey is to perform either an enterprise-wide or key department wise assessment of both their application landscape and their current strategic initiatives. It is very important to understand which of these applications across departments can benefit from a cloud-based development and delivery model based on business requirements. The move to a cloud is dictated by Quantitative factors – economics (such as infrastructure costs, developer/admin training/interoperability costs), Return on investment (ROI), the number of years/quarters passed before breakeven & Qualitative factors – the tolerance of the business for short-term pain, the need for the enterprise to catch up with and disarm competition etc. It may also very useful to combine this analysis with existing IT vendor investments, (contracts and the like) across full global infrastructure footprint so that a holistic picture of the risk/rewards continuum be built. One also needs to take into account if combining planned cloud spend can somehow be incorporated into existing legacy modernization/replatforming projects or datacenter consolidation projects.
Another important thing to consider is that public cloud spend is sometimes misleading to estimate in terms of cost. Once lines of businesses in large organizations start using public clouds – the financial promise of zero CapEx is outweighed as OpEx costs begin to run amok. In a lot of these cases, a private cloud powered by commodity open source platforms such as OpenStack may be the right way to begin. To counter the complexity of OpenStack, it may be a step in the right direction to consider a SaaS-based OpenStack management plane so that risk is minimized in terms of both the operator and developer experience. This is a key theme that will be expanded on in later posts.
Let us be clear in that not every enterprise application is a candidate for cloud migration. Given that a monolithic departmental application runs on legacy virtual machines – what are the ideal criteria to make this decision of when to migrate it over?
At a very high level, I recommend that those legacy applications that serve #1 a limited community of interest & #2 the community isn’t anticipated to grow much or #3 result in frequent changes to the concerned suite of applications. These legacy applications can be made resident in a private cloud leveraging OpenStack.
They can then be incrementally enhanced over time (starting with changes around their provisioning, development, management etc) to take advantage of a private cloud design until such time that business needs dictate that they can be migrated over to a true CN development model.
Enterprise CIOs also need to ensure that their investments in the cloud don’t result in a significant container or VM sprawl, which will add to the compounding of the technical debt challenge.
Consideration #2 Adopt Hybrid Cloud…
As discussed above, a range of cloud choices exist, namely –
- The public cloud providers – Amazon AWS, Microsoft Azure & Google Cloud Platform
- Open Private Cloud Platforms such as OpenStack
- Proprietary Cloud or Legacy virtualization approaches – VMWare, KVM, Xen etc
- Converged Hardware Infrastructure
- Enterprise Cloud Services such as IBM, Oracle etc
- SaaS Platforms such as Salesforce, Workday etc
When you combine the above notion with the complex vendor landscape out there, a few important truths emerge –
- The Enterprise Cloud will be hybrid, no question.
- Workloads will be placed on different providers based on business and cost considerations. Examples include – flexibility, advantages of the application frameworks and data services provided by the cloud vendor
- IaaS lockin makes zero business sense from both a business and technology perspective.
- Multi-cloud management is a challenge your cloud admins need to deal with and something management needs to account for in the entire business case – economics, value realization, headcount planning etc.
Consideration #3 Adopt Kubernetes…
It may seem odd to find direct mention of a software platform in a blog about enterprise cloud but this is a very special project and perhaps the most transformational cloud technology. Across all the above cloud provider choices, Containers are unquestionably the granular unit of application development and deployment. Kubernetes is the defacto standard in container orchestration across multiple cloud providers. As far as technology goes, this is a sure thing to bet on and one you can’t go wrong with.
With its focus on grouping containers together into logical units called pods, Kubernetes (k8s) enables lightweight deployment of microservice based multi-tier applications.
Kubernetes also provides autoscaling (both up and down) to accommodate usage spikes. It also provides load balancing to ensure that usage across hosts is evenly balanced. The Controller also supports rolling updates/canary deployments etc to ensure that applications can be seamlessly and incrementally upgraded. The service abstraction then gives a set of logical pods an external facing IP address.A Service can be discovered by other services as well as scaled and load balanced independently. Labels (key, value) pairs can be attached to any of the above resources. K8s is designed for both stateless and stateful app as it supports mounting both ephemeral as well as persistent storage volumes.
Developers and Operations can dictate whether the application works on a single container or a group of containers without any impact to the application.
These straightforward concepts enable a range of architectures from the legacy stateful to the microservices to IoT land – data-intensive applications & serverless apps – to be built on Kubernetes.
However, with Kubernetes still being in a relative stage of enterprise infancy, it makes a lot of sense to consider a SaaS-based managed plane as a solution so that install, troubleshooting, deployment management, upgrades and mgmt & monitoring do not end up cause significant business disruption and cost increases especially in personnel.
Consideration #4 From Monoliths to Microservices to Serverless…
The vast majority of applications being developed now are systems of engagement being directly used by customers. These apps support a high degree of interactivity and rate of change to the application based on the data gathered using millions of micro customer interactions. All of this results in a high degree of velocity from a development standpoint. Monolithic architectural styles are no longer a fit for digital platforms as discussed below.
Why Legacy Monolithic Architectures Won’t Work For Digital Platforms..
It is no surprise then that Cloud Native apps need a range of architectural style to accommodate this discrete nature of business functionality and change. Accordingly, most enterprise apps need to consider approaches ranging from microservices to serverless architectures. Microservices apps are broken down into smaller business services and then deployed/maintained & managed separately. Typically each service can be run in its own process. The promise of this style is greater flexibility for development teams, higher release velocity as the whole app doesn’t need to be changed to accommodate changes in smaller units and scalability. In addition, frameworks that support microservices provide functionality such as load balancing, discovery, high availability and flexibility in upgrades (blue/green deployments, rollbacks/roll forward etc). The more cutting-edge cousin of microservices is serverless architectures. Each of the serverless functions can be deployed into a docker container which is instantiated when invoked and destroyed when idle. Serverless architectures and frameworks can dramatically reduce the time spent on building up the infrastructure for container driven applications. They reduce business time to value by eliminating a lot of operational steps involved in packaging, deploying and managing infrastructure around development pipelines.
The Road Ahead…
Five strategic areas of exploration for execs considering moved to Cloud Native model are –
- Driving the business case with economics and value realization models in mind. An inefficiently designed cloud landscape can actually be catastrophic for business in terms of both cost and operational challenges
- Considering a range of hybrid cloud architectures keeping the above possibilities in mind. Avoid lockin to IaaS providers or to cloud stacks as much as possible. Invest in a private cloud strategy
- Considering retraining development teams and operations teams in the CN landscape. Lift and Shift of applications won’t result in the best economics and has often failed to reduce technical debt – a key reason in adopting CN models. Consider microservices and serverless architectures as a way of rearchitecting your application footprint
- Leveraging successful blueprints and patterns around vertical industry adoption
- Investments in SaaS-based management planes as a way of derisking your hybrid cloud and container management investments