Information Technology is always focussed on abstractions as a way to remove complexity and simplify IT use for end users. IT evolution can be directly correlated to the quest to abstract at higher layers. Whether it is an evolution from binary programming to programming in higher level languages or virtualizing the servers for operations efficiencies or an evolution from IaaS to PaaS for developer productivity, the quest to abstract away complexity, at times at a cost of losing some flexibility, has been the path of IT evolution. In this post, I will talk about how abstractions play a role in the multi-cloud world.
Abstraction & Operational Efficiencies
Starting with server virtualization, the focus is on using the software on top of physical infrastructure to remove operational complexities and provide a managementplane for operations staff to operate at scale. Cloud computing took it to the next level by removing the bottleneck in provisioning, thereby improving developer productivity along with operational and resource efficiencies. Beyond compute, SDN and NFV helped abstract physical networks and made them programmable. Software Defined Storage decoupled the underlying physical storage from the end users and making it easy for developers to access storage.
Multi-Cloud brings in certain additional operational complexities to users but there are various efforts going on to help reduce operations pain. Cloud management offerings remove significant operational pains with Multi-Cloud by bringing a control plane between the user and the underlying clouds. Projects like BOSH from CloudFoundry are also attempting to simplify the complexity associated with Multi-Cloud.
Abstraction & Developer Productivity
We have always seen developer focussed abstraction bringing in increased productivity and agility in the software delivery process. Whether it is the evolution of higher level languages in the early days of computing or a platform abstraction encapsulating runtimes and libraries or PaaS. improving the developer productivity has always been a key driving point for IT. Platform as a Service offerings like Heroku, Engine Yard, CloudFoundry and OpenShift enabled abstraction at a level above infrastructure, encapsulating various runtimes, middleware and developer services along with infrastructure, and giving the developers an API to push their application code. Everything else happened automagically and this approach to an abstraction on top of compute helped organizations maximize both operational efficiencies and developer productivity.
Let us now look at how abstractions help developers in the multi-cloud world. With platforms like OpenShift (or other Kubernetes based platforms) and CloudFoundry, organizations can take advantage of multi-cloud while giving the developers the same interface to push their applications. These platforms bring a level of simplicity while also providing a seamless portability of applications as these platforms can be deployed in multiple clouds and also on premise. Portability of the platforms across clouds along with a standardized API that abstracts the compute in a multi-cloud scenario is a no-brainer for any Modern Enterprise. Projects like Kubernetes and CloudFoundry are leading the way in providing this flexibility to developers in a multi-cloud world without having to learn about their services and the associated APIs. Since every application has a touch point with the compute, this abstraction over compute helps increase developer productivity in a multi-cloud scenario.
Most applications have a touch point with storage and, in a multi-cloud world where storage offered by various cloud providers are different, an abstraction offering a standardized API is essential. S3 defined a standard for object storage in AWS cloud but there are no S3 alternatives available for other clouds. Minio brings in an abstraction, running natively on all the cloud providers on top of their storage offerings and providing an S3 like API for developers.
Among the three key infrastructure components, compute, storage and network, very few applications have a touch point with the network. Gaming or streaming applications needing multicast setup or other niche applications requiring access to load balancers or other infrastructure components are the types of applications that require access to the networking layer. Some of the legacy applications that are forklifted to the cloud will also require access to the network. SDN offerings like OpenContrail or VMware’s NSX which also includes assets from NFV player Nicira which they acquired are perfect examples of abstractions which allow developers a simplified interface without worrying about the complexities of the underlying physical networks. For most other applications, a platform abstraction like CloudFoundry or Kubernetes can encapsulate the (virtual) networking layer and remove network entirely from the “field of view” of the developers.
In a nutshell
The abstractions are critical in a multi-cloud world to maximize developer productivity and keep the business agility unimpacted by the complexities of multi-cloud. If you are an enterprise customer planning a multi-cloud strategy, figuring out the right developer abstraction, along with the right operations management layer is going to be critical.
Disclaimer: Minio is a client of Rishidot Research