Below article is from Pano Tsirigoti (Cloud Velocity's Chief Software Architect) blog post
Today's applications are running on a physical or virtual infrastructure with virtual infrastructures eventually evolving into private clouds. Applications are also evolving from single-system to multi-tiered deployment. The canonical example of a multi-tiered application is one employing a web-based frontend and database backend. Additionally, applications may depend on network services (for example, DNS, Active Directory), or the services of other applications that are running in the same physical/virtual infrastructure or private cloud.
For several reasons, one may want to deploy applications that are not limited to the resources of a data center or private cloud, but rather also able to use the resources of a public cloud:
- running multiple instances of an application for devtest (cloud devtest) purposes
- providing for business continuity by maintaining an always up-to-date application 'copy' in ready-to-launch state in a public cloud
- managing resource demand spikes
- addressing temporary capacity constraints (for example, maintenance windows), or even longer-lasting capacity constraints (for example, reach capacity of local data center)
A hybrid cloud architecture is then necessary to seamlessly combine an existing physical/virtual infrastructure or private cloud with the resources provided by a public cloud. A successful hybrid cloud architecture should provide the following capabilities:
- helping the user identify application boundaries by discovering systems that are part of the application and detecting their dependencies, and then instantiating the entire application in a public cloud as a single operation (as opposed to instantiating the systems individually)
- identifying the configuration of the systems that participate in an application and intelligently mapping their hardware resource requirements to the resources offered by a public cloud (for example, amount of memory, processing power)
- transparently configuring existing application software stacks, including the operating system, to run in a public cloud environment
- enabling transparent and secure access of network services and applications running in a private cloud by applications running inside a public cloud (for example, the authentication/authorization service accessed by an application running in a public cloud may reside in the private cloud)
- synchronizing continually, efficiently, and securely the application software, configuration and data between a private and public cloud
- providing a public cloud abstraction layer that can be implemented by multiple public clouds, while at the same time working around specific public cloud limitations (say, the 1 TB volume limit in AWS)
- supporting data privacy for data that resides on a public cloud (for example, use encryption)
- maintaining isolation of applications deployed in a public cloud by leveraging the mechanisms of such cloud (for example, in the AWS cloud use VPCs)
Hybrid cloud architectures could therefore address numerous new use cases that would be difficult to address solely within public and private clouds.