2 客户/服务器系统
客户/服务(client/server)系统的主要思想是,你有一个中央信息库(central repository of information)—通常是保存在数据库中一些信息—要根据需要,把它们分配给某些人或机器。客户机/服务器系统的关键在于,信息库会集中管理信息,因此信息的修改能够传播到用户那里。信息库,分发信息的软件,以及存储信息和软件的机器合起来称为服务器。存储在远程机器上的软件会同这个服务器通讯,提取信息,处理信息,并且在远程机器上显示结果。这被称为客户。
这么看来,客户/服务器计算的基本概念没那么复杂。但是,当你试图用孤零零的一个服务器来为很多客户服务的时候,问题就来了。这个架构通常都会牵扯到数据库管理系统,所以为了优化应用,设计人员会去“平衡”数据的格式。此外,通常系统还允许客户往服务器里插入新的数据。这就意味着你必须保证一个客户的新数据不会和另一个客户的新数据搅在起,以及数据不会在添加的过程中遗失(这被称为事务处理transaction processing)。当客户端的程序修改之后,还必须重新编译,调试并且安装到客户机上,这要比你相像的复杂昂贵得多。而且如果要支持多种机器或操作系统的话,事情会更麻烦。最后还有一个最重要的性能问题:服务器可能会同时响应成百上千个客户,所以再小的耽搁都是很要命的。为了把延时降到最低,程序员们尽量减轻服务器的负载,通常会把这些处理任务挪到客户端,不过有时也会移到所谓的中间件(middieware)的服务器上。(中间件也被用来增进系统的可维护性。) 分发数据这个简单的思想竟然会引出这么些复杂层次,而所有这些问题看起来都像是根本不可能解开的谜。但还有更重要的:大约有一半的开发项目都是基于客户/服务器架构的。它们包括像接收订单,信用卡交易以及分发各种各样的数据—股票市场的,科研的,政府部门的,只要你能叫的上名字的。以前我们的作法是为每个问题设计不同的解决方案,每次都发明一种新方法。这种项目开发起来难,用户用起来也不方便,它们必须适应新的界面。客户/服务器架构这个问题必须要能在总体上解决。
3 把Web当作巨型的服务器
Web实际上就是个巨型的客户/服务器系统。实际上还更差一点,因为所有的服务器和客户机是共存在同一个网络上的。不过这点你并不知道,因为你只关心是不是能连到那台服务器,并且对它进行操作(尽管你可能得先在什么地方找到那台服务器)。
最初这只是个单向过程。你向服务器提请求,它交给你一个文件,然后你用本地机上的浏览器(也就是客户)来解释这个文件并且为它重新排版。但没过多久,人们就不满足于仅仅从服务器收发文件了。他们需要完整的客户/服务器功能,所以客户也能向服务器发送信息了,比如查询服务器端的数据库,向服务器添加新的信息,或者下定单(这项任务所要求的安全性要比系统原先能提供的要高得多)。这些就是我们在Web的发展历程中亲眼目睹的变化。
Web浏览器是一项巨大的进步:它的思想是要让同样的信息以通常的形式显示在所有的机器上。然而浏览器还是太原始了一些,而且也很快被加在它身上的任务给拖垮了。它的互动性不好,而且所有需要编程解决的任务都要交到服务器上去处理,所以经常会把服务器和Internet给堵了。有时可能会花儿秒钟,甚至是儿分钟,才会发现提交的请求里面有一个拼写错误。由于浏览器只是用来显示,不能承担哪怕是最简单的计算任务。(另一方面这样也很安全,因为它不会在你的本地机上执行可能包含bug或病毒的程序。)为了解决这个问题,人们用了很多办法。开始是升级图形标准,让览器器能显示效果更佳的动画和视频。但是有些问题,只能通过让客户端的浏览器运行程序来解决了。这被称为客户端编程。