As far as I know, Cloud computing might be a evolution in software architect, and it will replace some current architectures, such as client-server.
These two architecture seem to share similarities for me (I know very little about both), but I don't know the differences between them. What are the cons and pros of cloud computing over client-server architecture?
Thank you so much.
Cloud computing is just marketing wording of client-server architecture.
Client-Server
In the great-wide world of computing there are only two kinds of applications,
Standalone simply means the user-interface and the business logic and the datastore and any and all resources are completely self contained within a single execution environment - the end-user's machine.
In contrast, client-server means there is some logical segregation of these components, services, and resources. Typically we see user-interfaces in a local execution [aka "client"] and business and data store and other resources in a remote execution [aka "server"]. Some examples,
With this in hand, let's look at cloud computing.
Cloud Computing
Cloud computing is an abstraction of traditional server hosting solutions. Instead of buying 10 servers myself to run and manage in my own operations datacentre, I now lease X servers from a vendor where X is a variable number decided by me whenever I want.
There is a distinct advantage to leveraging a cloud. If I bought 10 servers, I must manage and maintain these 10 servers even if they are underutilized [say only 1 server is used 90% of the time, while all 10 are pinned 10% of the time at peak hours]. That means I am paying way too much in maintenance for 90% of the time, while being inflexible when I need to grow the remaining 10%.
The advantage of cloud computing is that "someone else" is managing the server farm for us, and is willing to lease out a variable number of machines to us on demand. So in our scenario above, I could lease 1 machine for 90% of the time in off-hours, and scale up to 10 or more machines the remaining 10% of the time.
Microsoft takes this abstraction one step further with Windows Azure. They do not lease generalized servers, but application domains. This is the one example [to mind] where a cloud implementation has actual design implications - but it is predicated on the same premise of elastic hosting.
Relation
For the most part, because client-server is a software paradigm and cloud computing is a hosting abstraction, they are independent concepts. Keeners, however will realize that cloud computing implies business, data stores, and other resources are remotely hosted, which necessitates that any application running within a "cloud" is part of a client-server application.
I think client server is generally implemented as a necessity for the software/application but cloud computing is generally opted for optimization like for saving on costs and maintenance.
Cloud Architectures are designs of software applications that use Internet-accessible on-demand services. Applications built on Cloud Architectures are such that the underlying computing infrastructure is used only when it is needed (for example to process a user request), draw the necessary resources on-demand (like compute servers or storage), perform a specific job, then relinquish the unneeded resources and often dispose themselves after the job is done. While in operation the application scales up or down elastically based on resource needs.
Example: an application that is currently in production using the on-demand infrastructure provided by Amazon Web Services. This application allows a developer to do pattern-matching across millions of web documents. The application brings up hundreds of virtual servers on-demand, runs a parallel computation on them using an open source distributed processing framework called Hadoop, then shuts down all the virtual servers releasing all its resources back to the cloud—all with low programming effort and at a very reasonable cost for the caller.