Managing Multi-Cloud Micro-Services with CloudFoundry APIs

This blog is the first in a series of postings that will provide a deep dive into the design of a Multi-Cloud architecture supporting the management of Micro-Services running on multiple cloud environments. We built a distributed application that uses CloudFoundry APIs to manage different cloud environments running CloudFoundry as a PaaS hosting multiple applications and micro-services. The video below demonstrates the capabilities of a Multi-Cloud controller application that uses this architecture. Subsequent discussions will explain in detail how the different features demonstrated work and how software developers can use the same CloudFoundry APIs to accomplish similar tasks.

CloudFoundry is an open source Platform as a Service (PaaS) that provides a polyglot environment for running cloud agnostic distributed systems. As depicted below, applications run as micro-services within kernel containers on top of the CloudFoundry PaaS. The applications consume resources from the underlying Infrastructure as a Service (IaaS, i.e. AWS, OpenStack, VMWare, etc.) thru the provisioning capabilities of CloudFoundry. That is, CloudFoundry calls IaaS services to provision virtualized resources which are then divided up into kernel containers with specific amounts of resources (cpu, memory, disk, etc.) for each of the applications to use.

wordpressimg1

In this environment, applications of the distributed system interact as loosely coupled micro-services. They are logically connected to each other using late binding mechanisms provided by the PaaS. The applications may execute either as a unit over one cloud infrastructure or execute separately across multiple cloud infrastructures. The PaaS provides the late-binding mechanism so that the applications can reach one another independent of where the application is running, as applications may be (re)deployed anywhere the PaaS is managing an IaaS.

wordpressimg2

CloudFoundry provides the capabilities described above and exposes these as APIs for software developers to use. With these capabilities available to the developer, a new breed of cloud-agnostic solutions can be created that effectively use CloudFoundry as an operating system on top of multiple clouds. One such application is the Multi-Cloud Controller described in the video.

The Multi-Cloud Controller and its associated processes manages the distributed micro-services by deploying different components of the distributed system across multiple CloudFoundry instances. The Multi-Cloud Controller monitors the applications resource consumption and scales resources based on application specific requirements. The Controller also binds the micro-services together, so that they can discover one another no matter where they are deployed. The figure below depicts how the Controller communicates with multiple CloudFoundry’s and manage the applications and micro-services that run on it, thru a Multi-Cloud Monitor service that also runs as an application on individual CloudFoundry instances.

wordpressimg3

In the next posting, we will dive into the specific CloudFoundry API’s used by the Multi-Cloud Controller and discuss how they’re used to manage applications on multiple cloud environments. Some details can also be found on the slides below.