As with every new topic in IT, people are wondering about the same questions: Hype or reality? Didn't we kinda have this before? What's in it for me? What's so special about it? Cloud computing is no exception and I've had the privilege to discuss this topic with a number of very bright people over the last couple of months.
To separate the wheat from the chaff, here are the top three key principles of cloud computing that struck me as making this topic very relevant, interesting and definitely the way of the future:
For decades, IT providers have tried to standardize their operations so they can concentrate on optimizing their IT.
But this is in contrast to what IT developers and users want: They want their special version of Apache, with the newest version of PHP and "sorry, but I can't live without these 5 plugins in exactly that versions".
So much for standardization, and thus we ended up with dozens of different versions of the same services, hundreds of different services that we grew up over time with ("Of course we need the foo service, our company can't live without it! No, we can't re-implement it, that would be too expensive, you'll have to continue operating it!"). This is why compute centers today tend to look like Frankenstein's lab instead of the clean infrastructure we'd really like to have, from an architecture perspective.
Cloud computing has found a way to break out of this: A cloud gives you just a few basic, but well-defined services and that's it. Take it or leave it. "Do you like our simple, RESTful foo interface? Fine, use it!", or: "Oh, you want your own special custom version? Sorry, we don't have it. Go away." It's that simple.
This is obviously good for cloud providers, because they now can optimize the bejeezus out of their infrastructure and provide nice, massive scale, low-cost, simple to administer services, which is every IT provider's dream come true.
The new thing here is that now the developers have realized this is good for them, too (and Amazon's success is a testimony to that effect): They can now use whatever version of their software they want, on whatever OS they want and get as many updates as they want, without having to ask their IT provider.
Granted, now the burden of managing the software falls onto the developer/user, but in the end this is a win-win for both, because both sides know exactly what to expect from the other, the rules are clear, and the interface between provider and developer/user is well-defined. Of course, low service costs to the developer always helps, but we'll get to that later.
So the key point here is that well-defined abstraction layers between clouds and developers/users are the grease that lets both sides operate efficiently and completely independent of each other.
#1.1: Layers of Abstraction in Clouds
There are three layers of abstraction in clouds:
- Application as a Service (AaaS): This is what the end-user gets when they use a service like GMail, DropBox (please make an OpenSolaris version, thanks), the myriads of Facebook apps, SmugMug or even Adobe's online photoshop web service. AaaS services are very popular and there's really no reason to start a new application any other way today.
- Platform as a Service (PaaS): The abstraction layer here is some kind of developer environment, but the details of implementation (OS, Hardware, etc.) are completely hidden. You just get a programming language and some APIs/Libraries and off you go. This is what Zembly gives you (check it out and create your own Facebook app in minutes), or the Google App Engine. This is the development model of the future: Develop against the cloud, no need to know the details behind it.
- Infrastructure as a Service (IaaS): These are the Amazon S3s, EC2s, etc. and we recently introduced our own version of IaaS as the Sun Cloud (featuring open interfaces and a lot of Sun technology goodness under the hood.) In this model, you get access to a virtual server or virtual storage, treat them like real machines, but the physical details of what machine is in what rack or which disks you use are hidden from you.
Most discussions around clouds center around IaaS, but remember that the basic principle of abstraction applies to the other two as well. Also, many AaaS offerings are either implemented on top of a PaaS or IaaS offerings on someone else's cloud, so we already see a whole ecosystem of cloud components working together in a pyramid like fashion, building on top of each other.
The nice thing about the Sun Cloud here is that it'll open up the abstraction layer. Just like programming environments, file server or web protocols, there's a lot of value in open standards and interfaces. That's what Sun's cloud offering is about, so our "open grease" between cloud providers and developers will enable freedom of choice, better interoperability and bigger, open cloud market for all. Check out "RESTing on the Cloud with Open APIs" for a discussion on the Sun Cloud APIs.
Again, this may seem like nothing new, because IT operators have tried to automate as much as possible within their datacenters forever. From our own history of Sun MC through N1 and now xVM Ops Center to other people's Tivoli's, OpenView and whathave you, we've seen a lot in data center automation, but none of these went the whole way of providing true one-click setup or tear-down of a complete server over the public internet.
Automation in the cloud means the developer/user is in complete, automatic control over their resources. No human interaction whatsoever, even from a developer/user perspective. Need more servers? Let the load-balancer tell the cloud how many more to provide. No need to wait for someone to unpack and cable your machine, no need to wait for your IT department to find the time to install. Everything is automatic.
Again, this is a win-win for both sides. While full automation reduces cost and complexity for the cloud provider, it puts the developer/user in control. Now you can reduce your time to market for your next rollout because you can do it yourself, fully automatic, and you don't need to call anybody, rely on someone else to set up stuff for you, or wait days until some minor hardware/software installation is completed.
The Sun Cloud brings automation to the next level: With its Virtual Datacenter Technology, you'll be able to automate a full virtual datacenter in the cloud out of standard components, not just individual machines.
In the nineties, people bought large, expensive, scalable servers and waited for them to fill up over time as their companies grew. This was of course highly inefficient because most of the time you didn't use most of your server. After the dot-com bust, people became smarter and started scaling horizontally. That allowed you to add capacity to your datacenter in smaller chunks and on an as-needed basis. But what if you need a lot of capacity on one day (because your startup got Techcrunched), but the next day you're back to humble levels of usage, because it's the weekend or the wrong season or there's a major recession coming up? As an extreme case: What if you ran the Olympics website and the games are just over?
That's when elasticity comes in very handy: You can easily scale up your cloud usage, but you can just as easily scale it down again. One day you have 500 web servers, 50 app servers and 10 database servers, the next day you could easily go back to the old 50:5:2 ratio. And you only pay for what you use, never for what could have been.
On a technical level, elasticity is a direct outcome of automation, our #2 principle outlined above.
But the real invention here is in the business model of cloud providers: By multiplexing their resources over a large number of customers, they can level out differing capacity needs, so that they get good resource utilization on a big scale, no matter how much or little resources individual users actually use. And by giving their customers transparent access to this model, they enable them to take advantage of a fully elastic pay-per-use-no-strings-attached model that makes a cloud service so attractive.
And this is what your traditional hoster never gave you before: Whenever you wanted some service from an old-school hoster, you'd have to sign a contract that looks like a mobile phone contract with lots of fine print and whatnot. It's easy to scale up, but then you have to commit to some usage period (like 24 months) and usually it's hard or downright impossible to scale down the size of the service you got. You could easily get stuck.
Cloud computing changes everything with its "look Ma, I can scale like Google!" model: Everybody with a credit card can operate a large datacenter for whatever time they want (and have credit for), and shut it down whenever they like.
The Sun Cloud will expand the business possibilities of the cloud model: You can choose to be the cloud (and we'll help you build it), you can choose to build the cloud (for others, out of our cloud components), you can build your own cloud (we'll help you build that, too) or you can just use it (the Sun Cloud). Just like we believe in open standards, we also believe in partnering, so no matter what your cloud business model is, Sun can help.
A lot of people discuss a lot of aspects of clouds these days, but to me, it's just the three principles above that really count.
You can use them as a litmus test for clouds: Where's the abstraction layer? Is it open? Is it fully automated? Where's the API? What if I scale down, not up? What's the cost model? If one of the above principles are missing, it's probably not a cloud. If they are there, it's most probably a cloud.
Or you can use these three principles to figure out if your internal IT operations are ready for the cloud: Can you implement your service by exclusively using a cloud API? Would you be able to encapsulate your current service inside a virtual machine, then redeploy elsewhere? How about using a PaaS model for developing your next app? Do you really want to afford your own IT infrastructure if you can just rent it like a taxi? What services would need to be re-implemented, and why? These are all good questions to ask when discussing clouds with colleagues and vendors.
But remember that cloud computing is not going to end hunger, bring world peace and cure cancer, all at once and today: Some services fit the cloud model very well (hint: Everything that looks like a web service also looks like a good candidate), some don't (If it's still on a mainframe, forget it). The answer is almost always a mixture, and it will become more interesting as public and private clouds start to interoperate, much like intranets and the internet interoperate today.
Useful Cloud Resources
There's a lot to learn about clouds and a lot of bright people are blogging about it. Here are a few points to start from:
- Play a bit on Zembly.com. This is a great IDE for web apps, offered as a PaaS in the cloud. Translation: Log in and create your own Facebook/Meebo/iPhone app in your browser in minutes, the social way.
- Check out the Innovating@Sun blog entry on "RESTing on the Cloud with Open APIs" to learn about what Hal Stern and Tim Bray have to say on the Sun Coud's RESTful APIs. Also, the Virtual Datacenter Demo is very impressive, and there are a number of other interesting videos on that site.
- Glenn Brunette has a lot to say about security and clouds, certainly a hot topic. His Immutable Service Containers are the way to go for securely deploying web services in large infrastructures, including clouds.
- If you understand German, there are some excellent German blogs to read. Check out Ralf Zenses' Blog, or Jan Brosowski's (who offers a slightly different definition of cloud principles) or the Serverwolken blog.
- If you prefer to read English, don't despair. Check out the Sun Cloud Blog, or Alka Gupta's Blog with many interesting articles. Marc Hamilton also let's you look at cool hardware building blocks for the cloud as well as HPC clouds.
- There's a great whitepaper from Berkeley University called Above the Clouds, a real must-read. Also, there's a great Cloud Computing Guide on the Sun Cloud page, well worth the small hassle to register for it.
- Finally, if you think you've read enough, then relax by watching a cool video from our partner rPath: Cloud Computing in Plain English.
What are your cloud principles? What aspects of cloud computing are important to you? What important cloud aspect am I missing that would warrant its own principle? Feel free to add your own comment on cloud computing to this post!