Friday, May 13, 2011

Distributed Cloud Providers

Cloud computing is all about distributing your resources across several physical nodes. We enjoy this tactic for several reasons – redundancy, concurrency, and generally feeling good about having a legion of computers at your disposal. Another attractive feature of the cloud is that it does all hard work for us, behind the scenes. We select a provider based on their advertised features. They'll make our lives better, so they say. As we saw last month with the Amazon EC2 outage, there is no real protection against what can go wrong with any service provider, be it cloud, or some other service. Failure isn't restricted to any one provider. Amazon is the king of cloud computing providers, and they've got a great service 99% of the time. Putting all your faith in a single provider, however, means that the repercussions of downtime are exemplified. Examples like these illustrate why those using the cloud need to distribute amongst cloud providers.

Think about investing your money. You've got your savings account at the bank. You've just received a bonus and the first thing that comes to mind is to save it. Alternatively, you've now got a little money you can use to invest in that company you've been watching, or maybe you're concerned about the all-mighty dollar and want to buy some gold bullion. Regardless of where you put your money, having it all in one place is dangerous. If you invest all your capital in a company that flops, you feel 100% of the collapse. Likewise, if the company is a soaring success, you feel 100% of the positive outcome. Its simple risk management, and its really no different from choosing a cloud provider, or diversifying across several cloud providers.

Starting a web company usually requires a lot of compute capacity, guaranteed up-time, and so on. Going with the name brand only makes sense. Most likely, you'll invest 100% of your efforts with this one perfect provider with a near flawless reputation. Consequently, you'll get 100% of their awesomeness - when they're being awesome. Not to mechanically pick on Amazon, but its just a perfect illustration of my point – when the provider is down, or slow, or decided to make fun of you that day, you'll get 100% of their meagerness, with nothing else to fall back on.

We've seen cloud providers going down over the past several years, and these are caused by internal issues. The provider's infrastructure is experiencing some kind of bug, hardware failure, whatever. They're generally not transparent in communicating the details of these issues to end users. Providers assume that cloud computing consumers don't necessarily care about this kind of thing. And they're probably right, for the most part. Users of cloud services mostly just want they're systems up and running, everything else is secondary. However, we're not limited to internal failures of the provider's infrastructure.

Nothing stops a provider from changing some fundamental aspect of their system. The API could change, a minor annoyance but nonetheless important for consumers. Maybe their policies change regarding QOS or maybe their performance characteristics go down the tubes for one reason or another. Externally, changes like these don't really affect the perception of the provider quality - they're functional, up-time is maintained, etc. They appear to be working as expected but these small changes can have drastic consequences for consumers. Changes such as these introduced by the provider don't even need to be technological to have an impact. As a consumer of a single service provider, imagine the cost spikes. You're stuck with incurring 100% of the increase. If you distribute your cloud technology across providers, maybe you only have to take 20% of the hit.

The trouble is that a single service provider isn't a market, it only appears that way. Providers offer different hardware resources at different costs. You can browse these offerings and choose one that is cost-effective. However, you're still stuck with the brand. Cloud providers are like an outlet store – you can shop for good deals on products made by the same manufacturer. You can't necessarily compare characteristics of the provider that fall outside of the technical specifications of what they're offering. This includes things like bad past experiences – if a service provider has failed you in the past, their brand will leave a sour taste in your mouth.

The answer for cloud consumers is to distribute their activities across providers. The solution isn't as straightforward as it may sound. If you're in the business of making software that runs in the cloud, you're probably not interested in searching the web for good providers as you would a for a new laptop. No, you need an actual market. If a cloud provider is like an outlet store, than we need a shopping mall filled with nothing but cloud outlets. This is what we're trying to do with SpotCloud. We didn't design it with provider diversity in mind, however, it certainly seems relevant these days.

Building your application on one cloud provider is enough of a challenge, let alone trying to distribute amongst several cloud providers. Who supports what features you need? In SpotCloud, you've got a minimal feature set – instances minus the bells and whistles. It takes one piece of the cloud diversity out of the equation – finding the right provider. The hard part is building software for the cloud, but I think that is best left to the developer – inventing ways to use instances profitably. The cloud market, be it SpotCloud or something else, is a necessary tool if we're not going to be constrained by provider's technological and business decisions.