Cloud Architecture Patterns: App VM
Provide packaged software stack as Platform-as-a-Service (PaaS) platform for running applications
As Known As
We all know the three different types of cloud services from Infrastructure-as-a-Service (IaaS), PaaS, to Software-as-a-Service (SaaS). If you want to leverage PaaS, you have to choose one of the PaaS service providers like Google or Microsoft. Leveraging an external PaaS has its own benefits.
What if you want to keep your applications running in-house but still enjoy the benefits of PaaS? Today you don’t have much choice. Google, for example, does not sell its App Engine as a product that you can install and run on premise. You have to run it on the Google cloud.
The solution is clear and even easy – build your own PaaS. Yes, that’s right! Although you won’t get the same software stacks as as your service providers, you can easily install software stacks from either open source or commercial products onto virtual machines. Following the same naming convention for App Servers, I refer to these virtual machines as “App VMs.”
Note that you may have applications written in different programming languages/architectures/frameworks (for example, LAMP – Linux/Apache/MySQL/PHP), or J2EE, and therefore you should create different virtual machine templates accordingly. By the same token, you may need software stacks like a database, messaging server, and a directory server. For a complete PaaS platform, you should create different VM templates or reuse existing ones.
With many different software configurations in place, you should test the templates thoroughly before deploying them. You also need to manage and patch these templates and maintain and evolve them over time.
When you need to run your application on your own PaaS, you can simply provision these virtual machines and inject your application code there. It will require more management on the infrastructure than using external service providers.
Building your PaaS on VM allows you full control over the software stack: what goes there and with what configurations. It also gives you much more portability for your applications than on a typical service provider PaaS. For one thing, you can move your VMs around more easily than moving your typical PaaS applications because the underlying touch points of VMs are mostly X86 instructions. It means you can easily move VMs among different X86-based hypervisors, either inside or outside of an enterprise.
With the portability provided by this App VM pattern, you can also consider building App VMs and running them at IaaS service providers. You can move these VMs back to the enterprise whenever you want without rewriting your applications.
Consider App VM pattern when you:
- Want to construct your own PaaS platform with full flexibility and control over your software stack;
- Cannot find a PaaS service available that satisfies your need;
- Need truly portable applications that run across both private clouds and public clouds.
The biggest challenge of this pattern is provisioning and management. With so many potential virtual machines, you have to manage and patch them effectively. When the scale of your system reaches a certain size, management may become a big burden.
If you decide to run the an App VM with IaaS providers, you also need to check out if the service providers offer easy solutions for you to move these VMs back to the enterprise.
It’s pretty common that people use IaaS to run applications. There are also pre-packaged virtual machines templates with software installed, like IBM WebSphere AMI in Amazon.
For enterprise use, VMware demoed CloudTools at VMworld 2009 that can provision J2EE App VMs. The CloudTools was originally created by Chris Richardson for Amazon EC2, and I ported it to vSphere.
VM Factory: it can help provision the App VMs.
VM pool: it can help pool the App VMs for fast provisioning.
Façade VM: helps build a large scale PaaS platform with App VM.