Capacity management in physical versus virtualized worlds
In the physical world, capacity management is very straightforward and simple. Traditionally, capacity is project-driven based on the requirements of an individual line of business (LOB). In a one-application-per-server model, the business owner knows exactly what capacity is available. It's very clear, delineated and siloed; the server and all of its capacity are owned by one user or application.
Unfortunately, this resource silo leads to a fundamental dilemma: an explicit tradeoff between efficiency and predictability. In the physical world, efficiency is usually achieved when you plan for the short term (today). If you want to be highly efficient, you just provision IT capacity to your highest peak. However, you will encounter risk when capacity demand spikes unexpectedly.
Predictability is achieved when you plan for the longer term time horizon (tomorrow). If you try to mitigate any risk by over-provisioning, you will have unnecessary waste. This "spare" capacity represents capacity into which you can grow. Unfortunately, the physical world too often requires optimizing for one goal or the other: predictability or efficiency. If an environment is fully efficient, it lacks the spare capacity needed to be entirely predictable. Adding additional capacity, which is the common response, may ensure predictability but it results in inefficiency or waste.
Virtualization forces capacity planning, purchasing and provisioning decisions to be driven top-down in the context of an aggregate resource pool. Virtualization allows your capacity to be shared and adaptive-two fundamental benefits of virtualization. Sharing allows capacity to behave as a communal pool of resources for both used and spare capacity. Adaptability allows capacity to expand and contract on an as-needed basis.
If an application or a VM needs more resources, then it can be borrowed from another VM that may not need as much. Further, adaptability and flexibility allows adding compute, storage and network capacity in granular increments. For example, when a server is added to a resource pool, its capacity becomes "communal property" not owned by any particular application or even business unit. It becomes a slice of capacity that can be used by any VM that needs it most. With virtualization, capacity can be optimized for both efficiency and predictability by matching peaks and valleys of individual applications at the right time across the environment.