Difference between cloud computing and distributed computing?
In my mind what defines cloud computing is that the underlying compute resources (storage, processors, RAM, load balancers, etc) of cloud-based services and software are entirely abstracted from the consumer of the software / services. This means that the vendor of cloud based resources is taking responsibility for the performance / reliability / scalability of the computing environment.
From an application developers point of view, this can be a tremendous advantage, as procuring, maintaining, tuning, monitoring and scaling hardware to meet the demands of growth is both difficult and expensive.
For smaller ISV's, cloud computing offers the ability to prototype, test and deploy software without any capital expense.
For larger applications, the benefit is generally unlimited scalability and what amounts to the outsourcing of IT / application hosting responsibilities, as well as instant access to new servers / storage / whatever on demand. Often cloud providers will offer levels of redundancy, reliability and even security all but the largest in-house IT shops could never achieve for the sheer cost of it all.
The main disadvantage to application developers is loss of control. Not only is the hardware externally hosted in a cloud environment, but abstracted, so if your application needs direct control over hardware, you're out of luck. And you need to trust the cloud provider. They all offer 99.9% repeating up time and SLA's, but I doubt those stats are actually realized. But you have to ask yourself, could I do better? The answer is often no. But control of hardware isn't the only place control is lost - integration with cloud based systems can also be more difficult than on premise or self-managed software for obvious reasons. However, it seems to me that this roadblock is evaporating as new technologies and robust API's eliminate many integration difficulties created when running applications outside the LAN/WAN.
Another disadvantage can be performance. Running an application on your local LAN will probably provide a somewhat snappier experience to local users than running from the cloud. But if your audience is distributed, that benefit may only apply to a subset of your application's audience.
Distributed computing, as has been said already a few times, is just computing orchestrated between two or more computers. Cloud Computing is, by definition, distributed computing, but a specialized form.
Here is a nice whitepaper by David Chappell. It is a Microsoft sponsored paper, so it is presented in terms of Microsoft's cloud platform (Azure) but the underlying principles are pretty universal, and David Chappell is always a pretty easy read.
Let me start by saying that we run a significant financial services offering on a 100% cloud-based environment.
Cloud computing is not really that well defined (like with any buzz word, everyone wants to somehow brand their existing product with the newest buzz word).
The key to cloud computing in my mind is that I can look at computing resources (CPU, memory, etc) like a commodity rather than as capital.
What does that mean?
Traditionally, if I want to add some computing power to my organization, I need to go out and buy more computers, set them up, and maintain them. Cloud computing (Eric J.'s definition) lets me grab extra computing power exactly when I need it, and then release it when I don't. We offer a sales tax calculation service. In the run up to Christmas, we need a lot more computing power than at other times of the year. Our cloud environment lets me add resources in seconds and then release them just as quickly when I don't need them. One of our big customers sometimes has 1-hour mega-sales. I can add extra processing power just for that hour then release it when done.
The solution we offer on top of that cloud computing infrastructure is Software-as-a-Service (SaaS). Things like GMail are SaaS, not cloud computing, in my view.
So how does all of this compare to distributed computing?
Distributed computing just means I break up a problem so that I can have a whole bunch of computers work on it at the same time. Berkeley University's BOINC project is an excellent example of this (and please consider signing up for it). They distribute scientific research projects across all computers that volunteers provide.
The computers involved in BOINC and other distributed projects can be people's laptops, desktops, servers. They can be installed in my office, virtual servers leased from an ISP, or virtual servers that are part of a "cloud". It matters not one bit where the computers come from. If I can install the distributed computing software on a computer, it can be part of the distributed solution.
Distributed computing is where multiple computers participate in solving/computing a task. Like Folding@Home.
Cloud computing is about having data (documents, pictures etc.) on internet services. I guess GMail and Google Docs form a sort of cloud computing.
Distributed computing involves dividing a large problem into smaller slices and having multiple networked computers process the slices.
Cloud computing usually refers to providing a service via the internet. That service can be pretty much anything, from business software that is accessed via the web to off-site storage or computing resources.
Edit: As the poster below me notes, it is generally a marketing term for those services.