I keep hearing about Cloud technology, although mostly in social networking development, etc. I heard about it today again, and now I'm very curious: what is the 'Cloud' and how does it relate to me (in my case, I guess) as a Web Developer? How do I answer the question I keep getting asked—"is it on the cloud?"—without saying "What you are asking is meaningless?"
The "Cloud" is a buzzword. It has no definition that doesn't include the word "Cloud" Here is how Dell describes their Cloud:
Cloud computing delivers IT as a service. It might be your own private cloud accessible only within your organization, the public cloud of an external provider, or a hybrid cloud that spans both.
Oh, so the cloud is IT as a service. Right. I thought the Geek Squad was IT as a service? So, is the cloud the Geek Squad, or is the Geek Squad the cloud? And if the Geek Squad starts offering Cloud services, will a universe ending singularity result? There is no hell hot or deep enough for marketing people.
Basically its the logical progression of clusters, virtualization, and faster internet connections. Companies can specialize in providing storage and processing power, and you can host your application in their cluster, and access it over the internet. And, using virtualization, it can exist in an arbitrary environment unrelated to the actual physical hardware it's running on. Very cool.
The ability to host an application on third party equipment that can be transparently scaled is very powerful. You can create a web presence without having to over-commit on hardware. The specific hardware implementation doesn't matter to developers, so that's nice as well.
The reason they call it the "cloud" is because in traditional network diagrams, the internet, the rest of the world, the WAN, the networking and hardware that is beyond the scope of the immediate diagram, is always represented as a cloud.
The very nature of the cloud as unknown country has persisted to the present day, and is at the root of why no one can satisfactorily describe what the cloud is. The whole point is that you don't know what it is. You don't need to. You just know that you can give your app to Amazon, or IBM, or any other "Cloud" provider, and they'll host it, and bill you based on usage.
When you hear the term "cloud", it is really a (poor) abstract term that runs the gamut from:
- Infrastructure as a Service (IaaS) - where you have virtualized computing resources available to you through both a remote provider and a programmatic API. Common examples of this are Amazon EC2 and Rackspace Cloud. Note, the "programmatic API" portion of that description is the kicker - otherwise you are just talking about remote hosting or virtual private servers (VPSs).
- Platform as a Service (PaaS) - which is an abstraction up to the application layer. For example, you as an web application developer would build a deployable artifact (let's say .war in java or a gem in ruby, for instance) and then deploy that artifact to a PaaS provider. They take your app, hide all of the hardware and OS details from you, and managing scaling your app up and down based on the traffic/throughput of your app for you. You as a developer are concerned only with writing the app itself and nothing else (that's a gross exaggeration, but meant to make the point that you only control the app, really). Examples are Google App Engine or Heroku.
- Software as a Service - this is where you as a developer relinquish control of everything to a third party with the exception of becoming a client of their services. You basically use an externally provided API to work with your data on someone else' infrastructure through a set of web services. Probably the most popular example of this is Salesforce.
The term "cloud" itself is a really poor description of those three things. In general when people refer to "cloud computing" what they are getting at is the paradigm shift where you have specialized providers where you relinquish control of some (or all) of the non-functional concerns of your software as opposed to both hosting, writing, and managing everything yourself.
Long before "The Cloud" was a buzzword, people drawing network diagrams would draw all the clients, servers, routers, and switches under their direct control, and the connections between them, but traditionally just draw a cloud for parts of the network they don't control. For some examples do a google image search for PSTN (public switched telephone network). The cloud represents a nebulous thing our wires go into and out of. We don't have to understand how it works because other people take care of that. We just trust the packets to come back out in the right place on the other side. Usually the internet is drawn as a cloud, because once your packets hit your ISP, you trust that it knows how to get them to the right place and don't care what specific routers it travels through.
"Cloud computing" in a nutshell refers to services that are hosted inside the cloud on your home or business's network diagram, i.e. the internet. The hardware isn't under your direct control, you just send your data "into the cloud" and trust your vendor to process and store it so it's available for you when you need to pull it back out. The buzz word meaning of it also implies that the things now being handled "in the cloud" were traditionally the domain of a local computer. You might traditionally have had a backup server, but switched to a service like carbonite that does your backups "in the cloud." You previously used MS office on your local desktop, but now use google docs, etc.
As a web developer what it means to you is that customers are often looking for ways to replace services traditionally handled by desktop computers with web applications. Being able to replace and not merely supplement desktop software may give you a competitive edge.
A lot of people have admirably explained what cloud is, So I will try to address what cloud can bring to you (a web developer) in addition to unicorns and golden rainbows: (with shameless plugs to our technology)
- Hosting and horizontal scaling on demand - Amazon EC2. Say our website gets slashdotted or redditted and you need extra hosts for the next few days alone - no problem. They can be brought up and down on demand.
- fine grained Charging - pay only for what you use. The cheapest service in AWS is actually free for limited usage! So try building your website at no cost. No more springing for datacenter hosting etc.
- You want to build a site that needs a backing database - no problem. You can use AWS SimpleDB for noSQL / RDS if you need SQL.
- You want to store those cute kitten images and link to them? AWS S3.
- You want to address a global set of people, with low latency? AWS Cloud front! These have edge servers co located near your customers so they get those images lightning quick!
- Live monitoring /reporting of usage of your sites
- You want a distributed system to solve a huge dataset problem? AWS MapReduce
- You want to email your customers reliably? AWS SES
- You want to do some asynchronous processing like a backend for online orders? AWS SQS
There are a lot more at http://aws.amazon.com/. Check it out! Obviously, this is all from AMZN, Others like Google have competitive offerings as well.
The problem is "Cloud" is a somewhat ambiguous meaning (in scope).
The minimum most people think when they hear "Cloud" is virtualized infrastructure and it's benefits:
- elminate the redundancy needed to account for potential hardware failure
- the potential to have "elastic" or on demand infrastructure resources (ie. spinning up 10 more fully provisioned vms to handle peak or seasonal load)
- ease of reallocating/reassigning/decommissioning resources
- ease of replicating environments
- ability to "snapshot" and "rollback" virtualized infrastructure resources and in some cases entire environments
By the way you don't always get everything in the list, and even if you do it may not be 100%. You can Google for what happened to "AWS US East Outage" for a real world example.
People will also sometimes add on other services as part of "Cloud" like Database, Logging, and any other service which kind of straddles the space between "infrastructure" and "application".
Some people also use "Cloud" as a synonym for "virtual". Sometimes people also use it to mean "Software and Platform As a Service".