Question

Watching a CEO for a new "cloud computing" company describe his company on a finance TV program today, he said something like "Cloud computing is superior to old-fashioned client-server computing".

Now I'm confused. Can someone please explain what "cloud computing" means in contrast to client-server?

As far as I understand it, cloud computing is more of a network services model, such that I do not own or maintain the physical hardware. The "cloud" is all the back-end stuff. But I still might have an application that communicates with that "cloud" environment. And if I run a web site presents a form that a user fills out, pushes a button on the page, and returns some report that was generated by the web server, isn't that the same as "cloud" computing? And would you not consider my web browser as the "client"?

Please note my question is specific to the concept of "cloud computing" with respect to "client-server".

Sorry if this is an inappropriate question for this site; it's the one closest in the Stack universe and this is my first time here. I'm an old timer, programming since mainframe days in the late 70's.

Was it helpful?

Solution

Strictly speaking, there is no 'Cloud'. Not in the sense of what that CEO was spouting. There's an Internet, of course. There's hosted services. There's VPS's. There's content delivery systems. We've (technical folks) have adapted to the term to reference certain hosted service models. But 'Cloud' in consumer media is largely a marketing term loosely translated as 'internet'. More often than not, it also means 'I get to charge you by the month'.

You are correct in your thoughts that the two terms, 'cloud' and 'client-server' aren't related. Having a service hosted 'in the cloud' (I always want to add a dramatic 'dun-dun-daaaaaaa' after using that phrase) does not make a client-server app any less client-server-y. For example, the 'web' primarily uses a client-server model. The web browser is the client. The web server is the server. That a web server is hosted 'in the cloud' does not change the fact that the web browser / web server relationship is client-server.

So the term client-server defines the relationship between two entities in a system. Where the entities are physically hosted is irrelevant.

Basically, you are correct. The two are not comparable.

OTHER TIPS

"Cloud computing" is a blanket term meant to do two things: first, to abstract all possible uses of a client-server model behind a single term, as opposed to more specific use cases like "file servers", "database servers", "web servers", "application servers" etc.; and second, to abstract the server architecture itself, in terms of hardware, topology, location, and even ownership.

In a traditional client-server model, which is definitely still in common use today, a client connects to a server that performs a particular job. This server may host a database, or a series of file shares, or a webpage. When the client connects to that server, there is an implicit understanding of the type of communication and data transmission that will ensue between the two computers. There may also be an understanding by the client, or the end user, of the capabilities of the server's hardware, and its limitations. This relatively "tight coupling" between the client machine and its server can pose problems for a sysadmin who needs to take down a server for maintenance; all the applications dependent upon resources provided by this server have to be pointed at another server, and not all applications and infrastructures are designed with this type of redundancy and failover-tolerance in mind.

In a cloud model, the hardware, topology, division of labor, and even number of actual machines involved is all abstracted behind a single endpoint. The analogy could be drawn to a modern "web application", as opposed to older generations of "website" which were more static. We might guess that there is an application server and a DB server behind the scenes, but we really don't have to care; the web server, as part of its job to serve the full application to users beyond the "edge", provides a unified endpoint allowing controlled access to all the data and services provided by other machines behind this front door.

The upshot is that, with a single endpoint exposed to provide the functionality of the application, that's all a client consumer of the application ever has to care about, instead of where to get its data, where to call such and such a remote application process, etc; that means that the administrators and architects of the service provider within this cloud are more or less free to change the machines, topology and other specific implementation details of this "cloud service" without the clients being any the wiser. Facebook could, if it thought it wise, rebuild its entire data storage system from scratch using a different DBMS and all new servers, and as long as the site remained available during the transition, nobody would ever be the wiser; in fact, Facebook did just that, many times, as it expanded from a site hosted from Mark Zuckerberg's personal machine in a dorm room to dedicated hosting off-campus, to server farms in several locations worldwide.

A key part of "cloud computing" is the deployment management tooling.

In "classic" deployments one ordered a specific machine for a specific application and did quite fixed configuration.

In a cloud environment there is more or less standardized hardware in a pool and an API which creates and configures virtual machines on it from some form of templates. By that faulty systems can easily be replaced, scaled up or scaled down depending on needs and the hardware be allocated as needed, een in an automated way.

Of course proper admins did most of that before, too, but besides pure marketing, there is a foundation of standardized APIs (Aamzons AWS API which is also offered by tools like Eucalyptus for "private clouds") and tools (i.e. puppet) emerging.

In 'traditional' client-server architecture you had statically assigned resources (or at least it is presented as such - I don't have experience from pre-cloud period so please correct me if I'm wrong and depend on false marketing). The database server was called db.yourcompany.com and your webserver communicated with it. If you wanted to increase resources you might add another dedicated webserver and provide load-balancing etc.

On the other hand in cloud stress have been put on abstraction of lower levels and denote how the 'server' is constructed. On the For example you have:

  • HAAS (Hardware As A Service) - client (company) gets a hosted computer on which they can install any OS they want. The difference is that they don't 'really' get a computer but a virtual machine in a farm. Because it is virtualized they don't need to care about lower level details like amount of computational power, pay the bills regardless if machine is used, how it is connected etc.
  • PAAS (Platform As A Service) - a level highier - you write an aplication which somehow somewhere runs. As API is general enough the cloud providers may allocate resources on demand so if your application got slashdotted you will pay for more resources rather then suffer from non-malicious DDOS.
  • SAAS (Software As A Service) - yet another level highier - you don't write an application - you use one. You don't care how it is implemented or what resources it uses. It is available everywhere and at any time.

Please note that while in most cases it is implied that actual service is outsourced to large company (say Amazon or Google) it is not necessary the case - large companies or universities deploy their own internal clouds to allow easier management of resources. This allow to add the resources to the application their run to be added as needed. If the new internal startup got successful they don't need to worry that the servers got overloaded. However as economy of scale play role it is usually done only when there are special requirements (for example regarding security).

From user perspective it is transparent and it have look'n'feel of client-server architecture. Webserver might live 'in the cloud' while using plain old HTTP. The ideas problems and solutions indeed run back to 50s mainframes and currently they come back more as a contrast to thick client PCs.

Having said that it might also be a buzzword in given sentence and state that company is dynamic and focus on their core competence while enabling their employees.

Can someone please explain what "cloud computing" means in contrast to client-server?

It depends on your perspective. For businesses, cloud computing is good because it (usually) allows you to be more flexible with the number of machines supporting your services. That flexibility allows you to be more responsive, which should save you money. Businesses can also take advantage of letting the cloud provider do backups, disaster recovery, physical security, and all of the other infrastructure stuff that they don't want to deal with. This usually leads to savings and improved quality.

From the consumer's perspective, the increased connection quality and reliability are good. Some cloud providers also help distribute their servers to help consumer's latency.

For programmers... it's pretty much client-server programming where the server is a pain to get to and you occasionally need to use some specialized APIs.

I think it is fair to say that "cloud computing" and "client-server" are very similar. From my perspective, cloud computing seems to rely more on the server than the "client-server" model. In theory, some forms of cloud computing can happen regardless of a client connection. The benefit of an application only running on the cloud with no client communication doesn't seem very helpful, so it makes sense to create some form of client communication to that server.

Essentially I think it mostly relies on where the majority of your computing power is being done. A server generally has better specs, in terms of hardware and computing power, than a standard user computer in order to simply manage many client connections and concurrent operations to serve those connections. Cloud computing uses this as an advantage by moving what would normally be client run code to the server and allowing the client to be as "dumb" as possible. Thus requiring less user resources, to handle the same type of operations.

Might not be the best answer, but that is how I see it.

Licensed under: CC-BY-SA with attribution
scroll top