So, what is Cloud Computing?
First, what is "the cloud"? The term "cloud" is often used to describe the Internet. It is a complex structure that wraps so much of what we do with computers, yet it remains separate to some extent from our desktops.
From Wikipedia, Cloud Computing is defined as:
... Internet-based use of computer technology, whereby dynamically scalable virtualised resources are provided as a service over the Internet. Users need not have knowledge of, expertise in, or control over the technology infrastructure that supports them.
So cloud computing is where users can run applications (or perform other computing) from servers on the Internet. They don't need to worry about the infrastructure or operation of these servers, but the application is usually "virtual" and "scalable".
What do we mean by "virtual" and "scalable"? Scalable refers to the fact that the service provider can add many more instances of the application or many more servers as needed without any overhead to you - you can expect decent performance all the time no matter the load or traffic. The term "dynamically" implies that this can happen behind the scenes, automatically and without any downtime.
With most cloud computing providers, you only pay for what you use. If you have a small web application that no one uses, you only pay for a small amount of storage and small amount of bandwidth. If this application becomes popular, the cloud model can handle the increase load easily, and you only pay for the increased usage when it is incurred.
Virtual refers to the fact that you aren't always running something exactly the way it seems. If I set up an Amazon EC2 account and run a Windows server in the cloud, I'm not REALLY running my own little Windows machine within Amazon. I'm simply running to a "virtual" windows instance within what I can only imagine to be a massive complex arrangement of servers.
Think about running your e-mail client over the Internet (like hotmail or gmail) - you have no idea what is running in the background.
What is different between cloud computing and any regular Internet hosting or service?
This is a tough one. The lines are blurry and this is a reason that people are quite critical of the concept of cloud computing. The major difference is the focus as defined above:
- Users do not concern themselves with the inner workings of the application, and
- The application is built to be "dynamically scalable", often using virtualization
So what kind of applications are good candidates for cloud computing?
My opinion here is that the ideal application that could take full advantage of cloud computing would include:
- Applications that have peaks of traffic or use, since the cloud model allows it to scale to handle peaks in traffic or load seamlessly.
- Applications that are created to take advantage of the scalability. For example, if I'm using an application that allows me to manage files, the application better be sure that as it is scaling those files are always available.
- Security should be taken into consideration - are there special security issues if you are hosting an application in this environment?
- Cloud computing is a great way to potentially save money by minimizing overhead - however, approach this carefully as the savings are not always as great as you might think especially while this concept is still maturing.
That said, I think most applications would work in the cloud, and as much as it is a buzzword I am excited about this technology.
I like this article on Sys-con where a few major Internet consultants talk about what 2009 will hold for Cloud Computing: The Future of Cloud Computing
I follow Dexin on Twitter because she posts fantastic Cloud-related links
HowStuffWorks has a good article as well - How Cloud Computing Works