When planning a virtualization infrastructure, the processor and memory requirements of the servers that will be virtualized are usually used to determine the resource requirements for the host server(s). However, these statistics can be deceiving, since they only represent an application's resource usage at a point in time, or at best over an insufficient duration of time.
It may be possible to design a virtualization infrastructure that can cope with short-term growth, but to truly build a robust virtual environment long-term growth must also be handled. That's why application scalability characteristics must not be ignored.
All applications share a common criteria: If an application's load increases beyond a node's ability to handle said load, then the application and/or node must be scaled to cope with the increased demand. However, not all applications scale the same direction. Some applications are designed to scale horizontally; additional nodes are provisioned in order to enable the application to distribute its load. There are applications that scale better vertically, where additional resources are allocated to the node on which the application is hosted.
This article will discuss how to design a virtualization infrastructure that can host applications that scale both vertically and horizontally.
Scale-up or vertical scaling
Database servers almost demand to be scaled vertically. Mainstream products -- such as Oracle 10g, Microsoft SQL Server, and MySQL -- all support various methods that enable horizontal scalability, including Continuous Replication, Federated Database Design, or Database Load Balancing.
Unfortunately, all of these methods have their own issues.
- Continuous replication does not use live data, and not all database products support conflict resolution.
- Federated database design operates only at the speed of the slowest member of the federation and the entire database goes offline if just one server is down. There is a way to ensure high availability (HA) with a federated design, but it's costly since it means providing a redundant node for every federation member server.
- Database load balancing works by synchronizing all writes to a database to several nodes at once while read operations are directed to any member of the load balanced nodes. But if writes are not properly committed, then the read ops can return erroneous data.
Scaling out a database presents its own challenges, and in the end the easiest way to provide a database with more resources is to scale up. One school of thought dictates that applications which scale up should not be virtualized because they will eventually consume all available host resources. While this is a very true statement with regards to virtualizing scale-up applications, it is also just as true if the application is installed on a physical server, and mobility and freedom from physical hardware only exist with virtualization.
Despite the issues that exist when scaling up, virtualizing these types of applications is still a good idea; but careful attention must be applied when planning the infrastructure's design.
For every scale-up application that exists there must be enough resources available on a single host to handle the application's prospective load. At the same time, make sure that there are sufficient resources available on other nodes to handle virtual machines that may be forced to migrate off a node if a scale-up application requires additional resources. Virtualization software allows it to create policies that bind virtual machines with scale-up applications to the host servers with the most available resources. And because virtualization creates a new level of application mobility, it is not necessary to purchase a giant server from the get-go. Instead, it's very attractive to start small, and then migrate the vertical application's virtual machine to a larger host server when business growth requires the application to scale. The aforementioned scenario also solves the problem of scaling applications horizontally, but it is a poor solution when there are better ones available.
Scale-out or horizontal scaling
Everyone is aware of at least one type of application that is embarrassingly parallel, an application that scales very well horizontally: Web servers. It is a Web server's job to serve Web pages, and this by itself is a very resource-lite task.
Serving Web pages becomes resource intensive as a Web site's usage increases to the point where the node the Web server is hosted is not able to allocate sufficient resources to the Web server. At this point there are two options: 1)Add more resources to the node; or, 2) Add another node that can host a Web server.
Like the database application mentioned above, option 1 is about scaling up, and it is a perfectly valid method to increase the number of pages a Web server can serve. However, unlike database applications, Web servers can very easily be scaled out with little to no problems. It just requires that a Web site's data be on shared storage, such as NAS. And since major Web servers such as Apache and IIS can both store their state on shared file systems, servers, or processes, a Web server becomes nothing more than a data access gateway.
This makes Web servers very easy to scale horizontally: Simply add another node, install a Web server on it, then configure the Web server to access the existing file and state data.
Applications like Web servers that scale out with ease are the best candidates for virtualization because they take advantage of many of the existing virtualization solutions' benefits, such as shared memory access, quick virtual machine provisioning, and management capabilities. Designing a virtualization infrastructure to compliment scale-out applications is quite easy, just don't over do it. Only buy what is necessary. Scale-out applications do not tend to need 64 GB of RAM and eight-way processing power. Many smaller virtual host servers will work just as well, and more nodes will provide extra redundancy in case of host server hardware failure.
Then there are those applications that can scale either way, such as file servers. When presented with this choice, this author would scale out rather than up. The reason is the added redundancy extra nodes provide. In the end, most applications these days can be scaled either way, up or out, but there are definitely preferential directions. When designing a virtualization infrastructure please take care to identify applications' scalability characteristics and plan the virtual environment carefully. The devil is in the details.
About the author:Andrew Kutz is an analyst with Burton Group. Prior to that he was a IT systems specialist at the University of Texas-Austin. He is a Microsoft Certified Solutions Developer (MCSD), a SANS/GIAC Certified Windows Security Administrator (GCWN) and a VMware Certified Professional (VCP) in VI3. He also was recently granted SANS GOLD status.