Of all the buzz-terms that I have ever heard in my life, the "cloud" is without doubt the most irritating.
The "cloud" is only a part of the future, and since there is nothing new under the sun, it is also only a part of the past. That is, it is just one of many design patterns in the overall scheme of networking and communication techniques.
As FireFleur has suggested, this "cloud" thing is actually only a part of how the network can be leveraged by businesses. And as DaveIC (InterconnectIC) has pointed out, the "cloud" is not a panacea for the solution of all distributed computing problems.
In fact, those developers who insist that there is no other way to operate are depriving themselves and their clients of some very useful tools which require desktop processing, along with local data storage and peer-to-peer communication, and where applications need to switch between playing the roles of both client and server. Such developers are also depriving themselves of revenue streams which I think would be far more lucrative than just collecting monthly subscription fees for the use of web applications.
In order to get an idea of how this "cloud" thing works, let's take a look at a diagram. The following diagram is probably not entirely accurate, and I welcome any corrections so that I can update it. However, there are two crucial points to grasp...
(1) Nothing happens without the browser making a request for something to happen. This has huge implications for the amount of power and control that you lose over *your* data. In particular, it prevents you from using the 'event-handling' design pattern.
(2) The web application cannot use the browser or web page (the web application UI) to access data anywhere on your local machine (except for cookies which are of very limited use), and nor can it communicate with other processes on your machine. Rightly so, otherwise there would be no such thing as the web as we know it. This severe restriction is represented in the diagram below by the detachment of local activity on the client machine from the rest of the system.
It goes something like this...
Please note that I am not trying to give this design pattern a fisting. Indeed, it is obviously a highly useful and established networking paradigm. But let's consider some of the highly useful things that it cannot do...
(1) You can only perform those queries which the web application allows you to perform. That is, you get the web-application-tailored reports, concocted from *your* data, that the web application says you are allowed to have- like them or lump them.
(2) It is unlikely that you will be given remote access from your own machine to the DBMS which manages *your* data. This means that you cannot perform ad-hoc SQL queries in order to discover useful new information from *your* data. However, the people who are storing *your* data can perform whatever queries they like on it. It's a little like letting some strange company look after all of your filing cabinets which are full of *your* data, much of which will be highly confidential, and allowing them to restrict access on it to you!
(3) The server will not notify the client's web application UI of any events of interest which may occur in real time on the server or on any peer. For example, the client can only be notified of changes to the data when the client makes its next request to the server.
(4) Processing time is increased. Two important guidelines of network programming concerning efficiency are far too often ignored when restricted to "cloud" operations only. These guidelines are:
> Minimise the transfer of data over the network.
> Place data so that most processing is performed locally.
(5) Clients may only interact through the server. So if, for example, client A needs to send a message to client B, then A must send the message to the server which saves it, and then passes it on to B only when B makes its next request to the server. As a loose analogy, and ignoring speed, this is little like trying to operate with only a postal service, instead of both a postal service and a telephone service. That is, the recipient of any message is not alerted, and must keep polling even if there are no messages to be received.
(6) A web application cannot be bought and owned. It must be rented with continuous, periodic payments for as long as you use the software.
(7) Data on other computers which you may own, for example, in the office, cannot be accessed from a remote location via a web application. For example, when you are at home in front of the tele and you suddenly realise that you need to access a file on the office computer.
(8) The server, or any other part of the network which you rely on, may go down at any time without warning.
(9) You have no control over the local or global logical schema of the database. For example, it would be impossible for you to distribute *your* data, even according to the most simple logical schema, to allow, for example, data to be accessed autonomously on a 'need-to-know' basis.
I could sit here all night and state reasons why the "cloud" is only a part of the future - and I'm only a *novice* network programmer! I'm sure that there are many other general and specific problems which you too could think of if you put your mind to it.
Please feel free to post any comments, arguments and/or corrections below.
Dave