1.4 关注资源共享
用户已经习惯了资源共享带来的好处,以致很容易忽视它们的重要性。大家通常共享硬件资源(如打印机)、数据资源(如文件)和具有特定功能的资源(如搜索引擎)。14
从硬件资源的观点看,大家共享设备(如打印机和磁盘)可以减少花费,但对用户具有更大意义的是共享与用户应用、日常工作和社会活动有关的更高层的资源。例如,用户关心以共享数据库或Web页面集方式出现的共享数据,而不是实现上述服务的硬盘和处理器。类似地,用户关心诸如搜索引擎或货币换算器之类的共享资源,而不关心提供这些服务的服务器。
实际上,资源共享的模式随其工作范围和与用户工作的密切程度的不同而不同。一种极端是,Web上的搜索引擎给全世界的用户提供工具,而用户之间并不需要直接接触;另一种极端是,在计算机支持协同工作(Computer Supported Cooperative Working,CSCW)中,若干直接进行合作的用户在一个小型封闭的小组中共享诸如文档之类的资源。用户在地理上的分布以及用户之间进行共享的模式决定了系统必须提供协调用户动作的机制。
我们使用术语服务表示计算机系统中管理相关资源并提供功能给用户和应用的一个单独的部分。例如,我们通过文件服务访问共享文件;通过打印服务发送文件到打印机;通过电子支付服务购买商品。仅仅通过服务提供的操作可以实现对服务的访问。例如,一个文件服务提供了对文件的read、write和delete操作。
服务将资源访问限制为一组定义良好的操作,这在某种程度上属于标准的软件工程实践,同时它也反映出分布式系统的物理组织。分布式系统的资源是物理地封装在计算机内的,其他计算机只能通过通信才能访问。为了实现有效的共享,每个资源必须由一个程序管理,这个程序提供通信接口使得对资源进行可靠和一致的访问和更新。
大多数读者很熟悉术语服务器,它指的是在连网的计算机上的一个运行程序(一个进程),这个程序接收来自其他计算机上正在运行的程序的请求,执行一个服务并适当地做出响应。发出请求的进程称为客户,整个方案称为客户-服务器计算。在这个方案中,请求以消息的形式从客户发送到服务器,应答以消息的形式从服务器发送到客户。当客户发送一个要执行的操作请求时,就称客户调用那个服务器上的操作。客户和服务器之间的完整交互,即从客户发送一个请求到它接收到服务器的应答,称为一个远程调用。
同一个进程可能既是客户又是服务器,因为服务器有时调用其他服务器上的操作。术语“客户”和“服务器”仅仅是针对在一个请求中扮演的角色而言。客户是主动的(发起请求),服务器是被动的(仅在它们收到请求时唤醒);服务器是连续运行的,而客户所持续的时间只是客户所属的那部分应用程序持续的时间。
注意,默认情况下,术语“客户”和“服务器”指的是进程而不是运行客户或服务器的计算机,15虽然在日常用法中这些术语也指计算机。另一个不同(我们将在第5章讨论)是在用面向对象语言实现的分布式系统中,资源被封装成对象,并由客户对象访问,这时,称一个客户对象调用了一个服务器对象上的方法。
许多(但不是所有的)分布式系统可以完全用客户和服务器交互的形式来构造,万维网、电子邮件和连网的打印机都符合这种模式。第2章将讨论除客户-服务器系统之外的其他系统类型。
一个正在执行的Web浏览器是一个客户的例子。Web浏览器与Web服务器通信,从服务器上请求Web页面。我们在1.6节详细讨论Web和其相关的客户-服务器体系结构。