The concept of hardware virtualization — essentially the decoupling of the execution environment from the hardware substrate on which it runs — is not a new one. The term has been used to describe various such approaches since the 1960s. However, over the last couple of years, a particular flavor of virtualization has started to garner increased attention from progressive IT organizations.
This approach, known as server virtualization, refers to running multiple operating system instances on a single machine, without the need for a host operating system. This approach allows for performance of the virtual operating systems that is very close to the capabilities of the underlying hardware (i.e., virtualization overhead is very low). This removes what was a traditional objection to virtualization — namely that it suffered from the poor performance inherent in software emulation.
Virtualization is one aspect of the increasing sophistication of computational models. Along with compute grids (distribution of computational burden) and data fabrics (the associated distribution of data) it represents an increasing level of abstraction of the computational process. In a sense, it is part of the same continuum that has moved development from register level to compiled programming, and from there to high-level languages built on top of their own virtual machines. In all cases, the drive is toward a more generic and powerful abstraction that is not limited by the intrinsic characteristics of the local environment.
In more pragmatic terms, server virtualization has seen most of its recent adoption driven by its value in addressing a few primary areas: server consolidation, high availability, reliability and testing. Server consolidation refers to the recognition that, in many cases, organizations dedicate specific hosts to running key services. In some cases, this is because the service requires a particular operating system version or configuration; in others, it is to avoid potential interference with critical services by other processes sharing operating system resources. Over time, this can lead to a proliferation of dedicated hardware, all of which is lightly loaded. The ability to consolidate this hardware, using virtualization to provide discrete operating system instances, has proven to be low-hanging fruit for many organizations.
Benefits of high availability and reliability are related. The ability to manage applications as an entire operating system instance that can be quickly restored in case of failure, and the fact that these instances exhibit complete logical isolation even when sharing the underlying host, allow for improved manageability and recovery time and decreased failures due to unexpected operating system-level interactions.
Testing is an obvious use case, and one that is not limited to server virtualization. Even virtualization solutions that use emulation to run the guest operating system on top of a host operating system are extremely useful for testing. The ability to pre-configure operating system instances that can have software installed on them for testing, and then readily discard and re-instantiate them, has been leveraged by testing organizations for several years.
What is lacking in many virtualization efforts, however, is a high-quality provisioning model. It is one thing to take a large number of existing servers and consolidate them through virtualization. It is quite another to leverage virtualization to achieve the promise of on-demand computing.
Last year, Amazon.com launched a new service called EC2, which stands for “Elastic Compute Cloud.” EC2 represents Amazon’s effort to bring server virtualization to mainstream developers — and it is an impressive achievement. EC2 provides a complete model for on-demand computing on a broad basis. Users are able to boot pre-configured operating system images created by Amazon, other vendors or themselves. All instances have both public and internal IP addresses, and traffic over the internal network is both free and fast. The billing rate is per hour of instance uptime, based on public network traffic, and represents only a modest premium over what one would pay for a dedicated machine at a hosting vendor.
Amazon currently provides three logical instance types, evocatively named “Small,” “Large” and “Extra Large,” and ranging in power from the equivalent of a 32-bit 1.1GHz 2007 Xeon processor with 1.7GB of memory to the equivalent of a 64-bit, quad-core 2.2Ghz machine with 15GB of memory, with cost more or less proportional to computational power. What is compelling, though, is how simple it is for users to scale this computational power dynamically. Once the environment is properly configured, a simple command line instruction can boot or shutdown an arbitrary number of hosts (typically limited to 20, but readily increasable to much higher numbers). For applications that are easily parallelizable — and this includes the bulk of Web applications that scale linearly with their ability to respond to requests — this provides an almost effortless model for managing computational capacity.
For developers working on distributed systems, the experience is even more compelling. No longer does the developer need to worry about provisioning physical hardware to create discrete hosts and to test the interaction between them. Instances can be booted in a matter of seconds, and Amazon provides a simple mechanism for providing configuration data to all instances via a predefined REST (REpresentational State Transfer) scheme.
Due to security concerns, however, most Fortune 500 companies, especially those that have computation centers based on proprietary data (e.g., financial and pharmaceutical firms), probably will not be able to leverage EC2 directly. While it is possible that Amazon could evolve into a provider that is able to offer the requisite level of security assurance to such firms, it seems more likely that commercial usage will be limited to smaller companies, particularly Web-based start-ups. However, the large firms have a great deal to learn from the elegance of Amazon’s implementation. If they are not already, they should be seriously considering dynamic provisioning schemes along these lines.
For many firms, the capacity requirements of different groups are widely variable. In finance, for example, the load on trading, pricing and risk systems is heavily dependent on the economic calendar or events in the market. Trading activity associated with particular economic announcements can result in computational demands that are two orders of magnitude above those of normal periods. Similarly, for much scientific analysis, usage patterns are characterized by long periods of quiescence interspersed with intensive computation.
For large organizations, dynamic provisioning offers the promise of a statistical smoothing of these load profiles. Instead of adopting the standard approach, which is to specify the hardware capacity at a level that can scale to the peak loads but is severely underutilized the rest of the time, organizations could provision computation services where required from a computational infrastructure that is sized to the mean computational requirements of the organization. Much computation is uncorrelated between different groups, and the dynamic reallocation of services will allow for much more efficient and timely allocation of computing resources.
Further, the aforementioned trend toward abstraction implies a move away from knowledge of the underlying computational hardware. In most large organizations, developers and users of computational systems do not have physical access to the hardware on which their systems run. The systems are maintained somewhere in a datacenter and identified only by host-names. However, there remains a coupling between the logical host instance and the hardware that provides the computational power. Increasingly, this coupling will be seen as archaic, just as the coupling between the business goal and the CPU register used to hold an intermediate value now seems archaic to us. Amazon’s EC2 represents an interesting first vision of this future world.
About Luke Flemmer
Luke Flemmer is a managing director and co-founder of Lab49, a consulting firm that specializes in building advanced applications for global financial institutions, and advising firms on their technology strategy.