The third technology component of the Ravello stack is our storage virtualization solution. Storage virtualization is very different from its compute and network counterparts. Compute and network virtualization virtualize something that is transient that can arbitrarily be started up and shut down. Data on the other hand is permanent, and needs to be kept even after an application is shut down. Therefore our storage virtualization solution focuses mostly on access and performance. The data access primitives themselves are much more straightforward than those for compute and network, and can be mapped with relative ease onto each cloud’s storage solution.
The Ravello storage virtualization solution acts as a global overlay on top of a distributed object store that contains the storage volumes. The overlay is responsible for the copying of data between the object store and the cloud provider’s local block storage. The copy process is adaptive and can select multiple strategies in order to get the best performance: from purely on-demand copying, to various read-ahead strategies and prefetching the entire volume.
When a virtual machine updates its storage, this is always done in a copy-on-write fashion. This allows us to implement our multi-VM snapshot feature, and thin provisioning of new application instances.