The purpose of Ravello’s application framework is to enable a monolithic description of a multi-VM application and all of its infrastructure. This description encapsulates the static nature of the application - a set of virtual machines with software components installed on them, and all underlying required infrastructure including network connectivity and storage. In the future it will also encompass the dynamic nature of the application (scaling out/in, monitoring, alerting etc.).
Operating at the application level (and not a single VM level) allows a user to define application-wide attributes and policies such as security and access control, cost, versioning, performance, and availability. Once Ravello has such a description of an application, our multi-cloud provisioning engine can reliably deploy this application to different cloud providers.
In order to deploy the application, a “cloud fitting” process is executed. This cloud fitting process receives a set of constraints (such as VM sizes, available cloud resources, cloud preference, geographical zone preference etc.) and optimizes the deployment target for the Cloud Application Hypervisor to best fit the application. Ravello also transparently takes care of common cloud provisioning errors and automatically corrects them.
The framework also supports application duplication, as well the ability to save an application as a blueprint for future reuse (the blueprinting process snapshots all VMs using a delta encoding technique).
In the future, we plan to introduce integration points with configuration management tools (such as Chef and Puppet). This will enable users to control the software installed on the application’s VMs, configuration parameters, and also dynamically respond to application-wide events.
In addition to the GUI, this functionality is also exposed using our RESTful API. This enables you to manage your entire application and its infrastructure in your source-control as code. The API can also be used to integrate Ravello with other systems. For example, you can easily integrate Ravello with your Continuous Integration server and then launch entire application instances for automatic testing. Further, you can snapshot the entire multi-VM application when you encounter a bug and easily reproduce it later. In addition, you can use the API to integrate Ravello into your IT service-management solution.