Cloud computing is changing the landscape for technology projects and initiatives in many ways, but today I wanted to take a look at how cloud computing can help reduce risks when doing server capacity planning for a project.
Traditionally, server capacity planning has consisted of gathering application/database/processing specs, talking to the business about growth projections, and balancing initial cost vs. future capacity needs. One constant in many projects is that the initial processing needs are smaller than what is predicted for the future. However, there are many times that it doesn’t make sense to buy the full capacity needed to support the long term growth upfront.
Back In 1999, capacity planning was easy: Take your largest growth estimates, multiply by 3, then disregard the results and buy the biggest server you can find. Cost consciousness was not an issue (I remember having to track down several $500k servers because there was no justification or documentation needed to get a P.O. cut), but after 2000-2001, this all changed.
Capacity planning evolved into — and still largely is to this day — the act of balancing the initial project investment with the ability to incrementally scale to meet future growth plans.
There are two basic methodologies for scaling: vertical and horizontal. Vertical scaling is done by adding additional resources (CPU, RAM, hard drives, etc.) into an existing server to handle growth. Horizontal scaling is accomplished by adding more distinct servers to the processing mix. Capacity planning for an app that requires vertical scaling tends to be carry more financial risk and is the focus of this post.
An example of vertical capacity planning: For a project that has 1,000 users in year one with growth projections of reaching 1,000,000 users in three years, a common vertical capacity planning methodology would be to buy a server that has the capacity to handle 1,000,000 users when fully loaded, while initially only configuring the server a minimal base configuration. As the usage grows, you'd pay an incremental cost to add more capacity to the server to support the increased resource demands.
When you use this approach, one of the main decisions comes down to how big you want your server to be when it is fully loaded. While the cost per additional CPUs or RAM is about the same for any given server family, the upfront cost of buying a server with greater scalability is substantially more (i.e. Buying base configuration server scalable to 8 CPUs is more expensive than the base config of a server scalable to 4 CPUs).
To buy this additional potential capacity, you pay a premium. In our above example, if you determined a long term need for a 4-CPU server, you'd be paying a "scalability premium" for the time you don't have 4 CPUs installed. And even then, the success of your strategy will depend on the growth predictions you had and their actual CPU/RAM consumption. Not only would you pay somewhere between 700% and 1600% over the base configuration, you increase your risk exposure if your capacity or growth numbers are off. If your capacity numbers were high or the business did not meet growth projections, you have spent more money than you should have. If you missed low or the product surpassed expectations, you now might have to buy an even bigger server that would make your initial investment obsolete.
The value of cloud computing is that it changes this scenario. Customers don't pay the scalability premium they would run into if they were buying their own servers and hosting them in-house. If you want to start small, you pay for a small cloud server with fewer resources. As you grow, you pay for the additional capacity you need. Another benefit of cloud computing on vertical capacity planning is that there is no prolonged turnaround time for ordering and installing of new capacity. Your server is virtualized, so if you decide you needed 8 more CPUs and 8GB RAM in your cloud instance you can schedule those upgrades with a few clicks.
While these are just a couple of the ways cloud computing can benefit vertical capacity planning and reduce risk, horizontal capacity planning with cloud computing is even easier. Think: Click a button to make a new copy of a cloud computing instance in a hurry ... but maybe that will be in another post.