Provide an easy way to provision new infrastructure and application services for a computing cloud
To run a large-scale computing infrastructure, you will need many different types of services, including compute, storage, and networking, among others. After virtualization has successfully detached compute from the physical hardware, it’s very easy to provision and scale compute. But compute requires storage and networking which are lagging behind. To maximize the benefits of virtualization and cloud computing, it’s natural to push the storage and networking in the same direction.
Looking beyond the infrastructure to consider applications, we need various types of services such as database, directory, messaging, and more. I’ve covered the App VM pattern that allows using IaaS for PaaS in a previous blog. While you can pack some of these services into an application VM, the problem is that it scales well but does not follow the aspectual centralization pattern.
The solution is to have dedicated VMs for either the infrastructure level services or the application level services. In so doing, you can use the same provisioning mechanism with service VMs as with any other virtual machines.
One extra benefit with infrastructure level service VMs is that you don’t need dedicated or special hardware. This hardware freedom saves you on capital spending and operations expenses, and frees you to plan and allow resource sharing and management across the traditional boundaries among compute, storage, and networking.
With the application service VMs, you can simplify the app VMs by removing the service components already offered by the service VMs. These service VMs can be managed and maintained by different teams. That’s one less thing the application teams need to worry about!
Using service VMs does come with challenges. First, your service VM should have stable service interfaces that others can bind to. It’s preferably based on open standards. For the storage VM, you want to use NFS, iSCSI, and other open protocols.
Secondly, your service VMs should be highly available. Whoever builds on top of your service VM can’t be any more available than your service VMs. You have to raise the bar first.
Thirdly, you will need to have a stable service catalog so that people can pick and provision easily. You should not remove any service VM that is in current use, but you still need to patch and upgrade your service VMs.
Lastly, you will need to manage the service VMs effectively and efficiently. Some service VMs might have special requirements. For example, a storage service VM that serves others VMs on the same host should not be relocated to other hosts for good performance. You have to prevent arbitrary migration in this case.
Consider a service VM pattern when you want to:
- Virtualize and standardize all your IT infrastructure and application infrastructure for flexibility and cost saving;
- Simplify the IT planning and provisioning management.
The infrastructure service VMs may not perform to the same level of its physical equivalents on a per unit basis, but may outperform them while scaling out. On the management side, you will have many more VMs to manage with considerations on special requirements on service VMs. It may require more investment on management stacks which may offset the cost savings from your unified infrastructure.
While your application VMs can leverage services VMs, it affects portability. Your application VMs can no longer freely move to other clouds alone due to service accessibility or performance.
In today’s market, you can find many different service VMs such as VMware Shield Zones. It is deployed as a virtual appliance and integrated with VMware vCenter™ Server, and “helps make it easy to centrally manage and enforce compliance with security policies across large pools of servers and virtual machines. Built-in auditing capabilities make compliance straightforward and verifiable.” On the storage side, you can find products such as the HP Lefthand virtual storage appliance.
On the application related services you have more choices. In fact, you can build your own dedicated service VMs based on your own requirements. For example, a service VM preinstalled and configured with MySQL database.
VM Factory: create new instances for service VMs.
App VM: can leverage the services provided by service VMs.
VM Pipeline: combine several service VMs in a row for serial processing.