Nov 1 2016

The Importance Of Accurate Capacity Planning

Posted by Mike Brunt at 3:40 PM Web Servers | DataBase | CloudComputing | Tomcat | Languages | Performance | JavaEE | Caching | Java-JVM | ColdFusion | JRun-J2EE

Imagine being asked to re-design a computer based system on which peoples lives depended; 24x7.  That happened to me, 19 years ago and it absolutely involved accurate capacity planning.  It was a large Unix based Teleradiology system which linked 13 hospitals in Southern California to a central radiology reading centre.  However, this blog post is not about me, it is about, as the title says, the importance of accurate capacity planning. 

There is one more formal capacity planning training which I cannot recommend highly enough for those wishing to learn formal-empirical capacity planning via applied mathematics and queuing theory etc.  This is via Dr. Neil Gunther and his Guerilla Capacity Planning training, I can attest to that as I took that training.

For this blog post, I will detail steps I have taken over many years, including that Teleradiology system; prior to my formal training with Dr Gunther.  These steps are neither complex or exclusionary and some sort of capacity planning is pretty much required as a precursor to any system changes.  As an illustration of this, I was contracted by a client who had 4 large ColdFusion servers with 16 CF clustered instances replicating sessions across the network and who were theoretically looking at almost $40,000.00 in licensing upgrades.  By measuring capacity we reduced that to two servers (for redundancy reasons) and two instances.  In essence they had been paying for capacity they never needed for years.  Here are the steps I follow:

1/ Firstly establish what is going on now: Find the traffic levels and behavior, I always use logs for this.  If the client has FusionReactor or SeeFusion installed we can discover much from logs, particularly in the case of FusionReactor for logs or SeeFusion if database logging is installed.  Even without either of those tools, system logs, web server logs and application server logs will all help.  For the log analysis I use a tool called Sawmill which you can get here.  From these sources establish a current baseline and determine how much resource capacity is being used.

2/ Audit all system details: Take note of RAM, CPU, storage capacity of current systems, also pay attention to NIC card quantity and speed.

3/ Get details of any coming changes: Are any changes planned or expected, these could be either increses or decreases. 

4/ Plan needed capacity: Using the baseline in step one and any expected changes from step 3 extrapolate the actual resource capacity needed.  One tip which I touched on in phase 2 is NIC card qty; for instance splitting load by traffic path can help, two NIC’s one for incoming traffic one for outgoing traffic (incoming web traffic, outgoing database traffic for instance.

I will finish with one more illustration of capacity planning well applied.  One of my clients, now a world leader in application design tooling, approached me when they had all running on a single server. They grew very fast due to a great product set backed by venture capital.  Via constant accurate capacity planning they grew to a 60 server operation over a period of 18 months and retained stability throughout that growth.


Hopefully this short piece will help you with any capacity planning needs you have.