Clouds computing is about buying just the amount of data center resources that you need, and having the ability to change your mind about that quickly. Any IaaS cloud provider worthy of the name will let you spin up a new virtual machine any time you want to add capacity to your data center. The hard part is getting your application to take advantage of that extra capacity. (Despite what I wrote here, this applies to private clouds, too.) Most off-the-shelf applications don’t go twice as fast if you have twice as many servers – in fact, most off-the-shelf applications are designed to run on just one server (or virtual machine). Even the typical n-tier application is constructed from a handful of special purpose system – e.g. web servers, database servers, application servers, file servers. Although the web layer in this architecture can often benefit from just adding more servers, the database layer typically doesn’t. If you are building something more specialized than the typical “web server that displays stuff from a database”, you probably have to invent a way to distribute your work across many machines, and then you have to build admin or automation tools to support adding and removing resources. Now you are hiring developers that are good at building distributed applications, and spending lots of time (and perhaps a limited supply of start-up capital or project budget) building out a robust platform that your real project will run on.
In Rework, the founders of 37signals suggest that you should not worry about the scalability of your application, because once you start making money, you can always buy a more powerful machine. I believe that their point was that instead of worrying about a hypothetical scaling problem, you should get some customers and generate some revenue, after which you will have some money to throw at the problem. I agree wholeheartedly with that point. But more and more of us are in environments where we know that if we cannot support a large number of users, or a large data set, or provide fast response times, the project will fail. And we sometimes realize that even if we buy the biggest server that Dell or HP makes, it isn’t going to be enough.
So what we need is a good cloud platform for developing distributed applications that can go faster when we add more hardware, but runs fine with a small amount of hardware. It should be something that doesn’t require super-human distributed computing development skills, that lets the developer focus on his application rather than the plumbing, and that an administrator can configure for whatever scale the occasion demands (e.g. seasonal load spikes).
Got a solution like this? I’d love to hear about it. If not, I might have to go build it – feature requests welcome 😉