Examining the Client-Server Nexus From 1,00,000 Feet above
It is important for every program to clearly distinguish between clients and servers so that it may perform its specialized task most effectively. A client can showcase a highly responsive and user friendly interface whereas a server is expected to efficiently interact with numerous clients simultaneously. A few examples in this regard for clients, also sometimes referred to as production clients, would be browsers such as Chrome, Safari, Internet Explorer and even open source browsers such as Firefox. Whereas WEBrick is not called a production server but rather a mini server that can handle just a single individual – the developer.
Now let us take a real website which would use a production server such as the Microsoft Internet Information Server or the Apache Web Server. Those familiar with production servers will appreciate their colossal capacity to serve up copies of the same website for millions of users.
Introduction of open standards
Introduction of the web's open standards were like a breath of fresh air for the online fraternity. Before their proposal in 1990, users would have to deploy different and mutually-incompatible proprietary clients for each Internet service used. For instance to access or read emails they would use Eudora, Lotus, etc, AOL was extensively used to access proprietary content portals, similar to today's Yahoo, Rediff and MSN.
In the modern times we live in, the Web browser has successfully supplanted these proprietary clients and adopted a holistic view of the web world. Therefore there is some justification when they are popularly termed as "universal client". Notwithstanding this radical transformation, the erstwhile proprietary clients and servers still were the best examples of client-server architecture – especially with clients asking questions on behalf of users and servers answering these questions received from many clients. We can therefore deduce that the Client-server relationship is our first example of an established pattern that can be consistently followed, trusted for behavior and strategy. It can also be categorized as a technique that offers a proven solution to a collection of similar problems.
So eventually the similarity in the client-server architectures is the separation of concerns or questions between the client and the server, despite dynamic changes across clients and servers. Earlier the complexity of the servers was far more than a client. Today that difference has been erased with contemporary clients who follow their protocols and operating standards. Using the Web's ubiquity which is its principal strength, client-server systems were built to operate using the open standards of the Internet or online super highway. With this the crop of clients with equal or comparable complexity grew and they became as important and specialized as their server counterparts, albeit in their clearly demarcated roles.
Modern architectural patterns
Coming a long way from the client-server relationship spanning decades, we must also understand that they alone are not the only architectural pattern found in the universe of computing. There's the peer-to-peer architecture, extensively employed in torrent based platforms such as BitTorrent. Here every participant is considered an equal and is both a client and a server. So you can term it as a two way highway whereby anyone can ask anyone else for information. Therefore in such systems where a single program must execute both the roles, it's harder to undertake specialization to achieve certain tasks. So, the client-server relationship however remains the strongest and most preferred contender amongst the architectural patterns.