As we move into the cloud, new problems are going to occur. That's standard issue for any new technology, as is one important aspect of the problem – we always end up fighting the last war, not seeing what's different about the new challenges. .
An interesting blog post from F5's DevCentral highlights this. Scaling cloud applications to work efficiently under heavy loads isn't going to be the same as scaling ordinary web usage – the terminology used in the post is vertical scaling versus horizontal scaling. (I'm not sure these are the best terms, but they'll do for now.)
Horizontal scaling is what we've all done until now – you increase your ability to handle increased demands by building in caching, load balancing and other server-side modifications. You get an increase in the number of demands for the database? Fine, increase the number of parallel, optimized ways those demands can be met.
With cloud applications, that may not be good enough. The application itself has to be much more aware of how it is structuring and making the requests – otherwise the cloud may deliver, sure, but at a much greater cost than necessary. Cloud providers will love serving such a huge increase, when every one of them comes with a little packet of money. But that will put a greater strain on two of the most important aspects of commercial cloud usage, the bandwidth across the connection, which is harder to scale and really affects user perception, and the drain on the corporate purse. Money, as we know, does not scale well when input and output are unbalanced.
The solution is to put more intelligence in the application, for it to be aware of the nature of the requests it makes and to be very smart about optimising them. This is particularly true when the application needs to provide high performance across a range of cloud resources, making overall performance contingent on a lot of unrelated factors – here, getting the basic architecture right to minimise interdependence and maximise the value of each request may be the difference between work and fail.
We'll learn all this as we go along – but without awareness of these factors at all stages of cloud application design, the chances are good that we'll end up in bad places that are very expensive to escape from. A good first step in our learning will be the evolution of decent simulation and optimisation tools that expose these problems at an early enough stage to make a difference. The cloud vendor which understands this and isn't afraid to promote efficiency over immediate revenues will be handsomely rewarded in the future by contented customers and a stellar reputation. It's never too early to start.