Certain elements of cloud computing are inarguably beneficial. The ability to quickly provision, clone, and deploy servers to address capacity issues is a definite plus, and the fact that you can effortlessly add elements such as load balancers, big storage, and databases is equally compelling. However, there is a downside that needs to be understood: the fact that, in many cases, cloud server instances can exhibit wildly different performance metrics, measured from second to second.
Sure, SLAs and guarantees made by the cloud provider can address these issues after the fact, but when it's crunch time, there's nothing you can do other than communicate the problem and hope it gets fixed quickly. You may have visibility into what your instances are doing, but you have no idea what the underlying hardware is doing, how it's configured, or how oversubscribed it might be. That's the nature of the cloud.
[ Benchmarking Amazon EC2: The wacky world of cloud performance | 8 public cloud services put to the test | Stay on top of the cloud with InfoWorld's "Cloud Computing Deep Dive" special report. ]
There's no secret involved in how cloud providers operate. They have built tools around various virtualization platforms to allow for self-service VM provisioning, and they've tied in other value-adds, but in the end, it all comes down to the same basic virtualization frameworks that we use in-house today. Those, however, we control both inside and out. In the cloud, we're stuck on the inside.
Let's say we're deploying a service on a public cloud that will require some number of Web servers, at least one database server, and a load balancer. The load balancer is run by the cloud provider, and we have no visibility into its load or performance. As a result, if we start to see the number of incoming connections drop, we won't know whether the incoming load is dipping or if there's a capacity issue with the load balancer. Or to take another example, we might find the performance of our Web servers varying greatly, despite being identically configured -- as I recently saw with a cloud server instance.