分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的
内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
简介
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和
逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过
计算机网络实现
信息交换。系统中存在一个以全局的方式管理计算机资源的
分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件
中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是
万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(
Web页面)一样。
在
计算机网络中,这种统一性、
模型以及其中的软件都不存在。用户看到的是实际的机器,
计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。
分布式系统和
计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在
物理结构上是基本相同的。
他们的区别在于:分布式操作系统的
设计思想和
网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。
网络操作系统要求
网络用户在使用
网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络
文件结构等情况,在网络中如果用户要读一个
共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;
分布式操作系统是以全局方式管理
系统资源的,它可以为用户任意调度网络资源,并且
调度过程是“透明”的。当用户提交一个作业时,
分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。
内聚性是指每一个数据库分布节点
高度自治,有本地的
数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在
分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。
分类
分布式计算机系统的
体系结构可用
处理机之间的
耦合度为主要标志来加以描述。耦合度是
系统模块之间互联的紧密程度,它是
数据传输率、
响应时间、并行处理能力等
性能指标的综合反映,主要取决于所选用体系结构的互联
拓扑结构和
通信链路的类型。
按
地理环境衡量耦合度,分布式系统可以分为机体内系统、建筑物内系统、建筑物间系统和不同地理范围的
区域系统等,它们的耦合度依次由高到低按
应用领域的性质决定耦合度,可以分成三类:
第一种是面向计算任务的分布并行
计算机系统和分布式
多用户计算机系统,它们要求尽可能高的耦合度,以便发展成为能分担
大型计算机和分时计算机系统所完成的工作。
第二种是面向
管理信息的
分布式数据处理系统。耦合度可以适当降低。
第三种是
面向过程控制的分布式
计算机控制系统。耦合度要求适中,当然对于某些实时应用,其耦合度的要求可能很高。
特征
分布式系统是多个处理机通过
通信线路互联而构成的松散耦合的系统。从系统中某台处理机来看,其余的处理机和相应的资源都是远程的,只有它自己的资源才是本地的。至今,对分布式系统的定义尚未形成统一的见解。一般认为,分布式系统应具有以下四个特征:
(1)分布性。分布式系统由多台
计算机组成,它们在地域上是分散的,可以散布在一个单位、一个城市、一个国家,甚至全球范围内。整个
系统的功能是分散在各个节点上实现的,因而分布式系统具有数据处理的分布性。
(2)自治性。分布式系统中的各个节点都包含自己的处理机和内存,各自具有独立的
处理数据的功能。通常,彼此在地位上是平等的,无主次之分,既能自治地进行工作,又能利用共享的通信线路来传送信息,协调
任务处理。
(3)
并行性。一个大的任务可以划分为若干个子任务,分别在不同的主机上执行。
(4)全局性。分布式系统中必须存在一个单一的、全局的
进程通信机制,使得任何一个进程都能与其他进程通信,并且不区分本地通信与
远程通信。同时,还应当有全局的保护机制。系统中所有机器上有统一的
系统调用集合,它们必须适应分布式的环境。在所有
CPU上运行同样的内核,使协调工作更加容易。
优缺点
优点
(1)资源共享。若干不同的节点通过
通信网络彼此互联,一个节点上的用户可以使用其他节点上的资源,如分布式系统允许设备共享,使众多用户共享昂贵的
外部设备,如
彩色打印机;允许
数据共享,使众多用户访问共用的数据库;可以共享远程文件,使用远程特有的硬件设备(如高速
阵列处理器),以及执行其他操作。
(2)加快计算速度。如果一个特定的计算任务可以划分为若干个并行运行的子任务,则可把这些子任务分散到不同的节点上,使它们同时在这些节点上运行,从而加快计算速度。另外,分布式系统具有计算迁移功能,如果某个节点上的负载太重,则可把其中一些作业移到其他节点去执行,从而减轻该节点的负载。这种作业迁移称为
负载平衡。
(3)可靠性高。分布式系统具有
高可靠性。如果其中某个节点失效了,则其余的节点可以继续操作,整个系统不会因为一个或少数几个节点的故障而全体崩溃。因此,分布式系统有很好的
容错性能。
系统必须能够检测节点的故障,采取适当的手段,使它从故障中恢复过来。系统确定故障所在的节点后,就不再利用它来提供服务,直至其恢复正常工作。如果失效节点的功能可由其他节点完成,则系统必须保证功能转移的正确实施。当失效节点被恢复或者修复时,系统必须把它平滑地集成到系统中。
(4)通信方便、快捷。分布式系统中各个节点通过一个通信
网络互联在一起。通信网络由通信线路、
调制解调器和通信处理器等组成,不同节点的用户可以方便地交换信息。在低层,系统之间利用传递消息的方式进行通信,这类似于单CPU系统中的
消息机制。单CPU系统中所有高层的
消息传递功能都可以在分布式系统中实现,如文件传递、登录、邮件、Web浏览和
远程过程调用( Remote Procedure call,
RPC)。
分布式系统实现了节点之间的远距离通信,为人与人之间的
信息交流提供了很大方便不同地区的用户可以共同完成一个项目,通过传送
项目文件,
远程登录进入对方系统来运行程序,如发送电子邮件等,协调彼此的工作。
缺点
尽管分布式系统具备众多优势,但它也有自身的缺点,主要是可用软件不足,系统软件、
编程语言、
应用程序以及
开发工具都相对很少。此外,还存在通信网络饱和或信息丢失和
网络安全问题,方便的数据共享同时意味着
机密数据容易被窃取。虽然分布式系统存在这些潜在的问题,但其优点
远大于缺点,而且这些缺点也正得到克服。因此,分布式系统仍是人们研究、开发和应用的方向。
应用
分布式系统被用在许多不同类型的应用中。以下列出了一些应用。对这些应用而言,使用分布式系统要比其他
体系结构如
处理机和共享存储器
多处理机更优越:
并行
原则上,并行应用也可以在共享存储器
多处理机上运行,但
共享存储器系统不能很好地扩大规模以包括大量的处理机。
HPCC(
高性能计算和通信)应用一般需要一个可伸缩的设计,这种设计取决于
分布式处理。
容错应用
因为每个
PE是自治的,所以分布式系统更加可靠。一个单元或资源(软件或硬件)的故障不影响其他资源的正常功能。
固有的应用
许多应用是固有分布式的。这些应用是突发模式(burstmode)而非批量模式(bulk mode)。这方面的实例有
事务处理和Internet Javad,程序。
这些应用的性能取决于
吞吐量(事务响应时间或每秒完成的事务数)而不是一般
多处理机所用的执行时间。
对于一组用户而言, 分布式系统有一个特别的应用称为计算机支持的
协同工作(Computer Supported Cooperative Working,
CSCW)或
群件(groupware), 支持用户协同工作。另一个应用是分布式会议, 即通过物理的
分布式网络进行电子会议。同样,多媒体远程教学也是一个类似的应用。
为了达到
互操作性,用户需要一个标准的
分布式计算环境,在这个环境里,所有系统和资源都可用。
DCE(
分布式计算环境)是OSF(
开放系统基金会)开发的
分布式计算技术的工业标准集。它提供保护和控制对数据访问的
安全服务、容易寻找分布式资源的名字服务、以及高度可伸缩的模型用于组织极为分散的用户、服务和数据。D C E可在所有主要的
计算平台上运行, 并设计成支持异型硬件和
软件环境下的
分布式应用。
DCE已经被包括TRANSVARL在内的一些厂商实现。TRANSVARL是最早的多厂商组(multi vendor team)的成员之一,它提出的建议已成为DCE
体系结构的基础。在中可以找到利用DCE开发
分布式应用的指南。
一些其它标准基于一个特别的模型,比如
CORBA(公用
对象请求代理程序
体系结构),它是由OMG (
对象管理组)和多计算机厂商联盟开发的一个标准。CORBA使用
面向对象模型实现分布式系统中的透明服务请求。
工业界有自己的标准,比如
微软的分布式构件
对象模型(
DCOM)和Sun Microsystem公司的Java Beans。
与计算机网络异同
分布式计算机系统与计算机网络既有类似之处又有不同点,其主要的异同如下:
(1)在计算机网络中,每个用户或任务通常只使用一台计算机,若要利用网络中的另一台计算机,则需要远程注册。在分布式计算机系统中,
用户进程在系统内各个计算机上
动态调度,并根据运行情况由分布式操作系统动态地、透明地将机器分配给用户进程或任务。
(2)在计算机网络中,用户知道它们的文件存放在何处,并用显示的文件传输命令在机器之间传送文件。在分布式计算机系统中,文件的放置由操作系统管理,用户可用相同方式访问系统中的所有文件而不管它们位于何处。
(3)在计算机网络中,各结点计算机均有自己的操作系统,资源归局部所有并被
局部控制,网络内的
进程调度是通过
进程迁移和
数据迁移实现的。在分布式计算机系统中,每个
场点上运行一个局部操作系统,执行的任务可以是独立的,可以是某任务的一个部分,也可以是其他场点上的(部分)任务,且各场点相互协同,合作平衡系统内的负载。
(4)在计算机网络中,系统几乎无
容错能力。在分布式计算机系统中有系统自动重构、适度降级使用及错误恢复功能。
(5)两者透明性的程度和级别不同。
(6)就
资源共享而言,计算机网络和分布式计算机系统是类似的。
系统设计难点
虽然分布式系统具有很多优点,然而由于分布式系统自身的特点及应用环境的复杂性,分布式
系统设计有如下的很多难题需要解决:
1.部分失效问题
由于分布式系统通常由若干部分组成,各个部分由于各种原因
可能发生故障,如硬件故障、
软件错误及错误操作等。如果一个分布式系统不对这些故障进行有效的处理,系统某一组成部分的故障可能导致整个系统的瘫痪。
2.性能和可靠性过分依赖于网络
由于分布式系统是建立在网络之上的,而网络本身是不可靠的,可能经常发生故障,
网络故障可能导致
系统服务的终止。另外,网络超负荷会导致性能的降低,增加系统的响应时间。
3.缺乏统一控制
一个分布式系统的控制通常是一个典型的
分散控制,没有统一的
中心控制。因此,分布式系统通常需要相应的
同步机制来
协调系统中各个部分的工作。设计与实现一个对用户来说是透明的且具有容错能力的分布式系统是一项具有挑战性的工作,而且所需的机制和策略尚未成熟。因此什么样的程序设计模型、什么样的控制机制最适合分布式系统仍是需要继续研究的课题。
在集中式系统中,所有的资源都由操作系统管理和分配,但在分布式系统中,资源属于各节点,所以调度的灵活性不如集中式系统,资源的物理分布可能与用户请求的分布不匹配,某些资源可能空闲,而另一些资源可能超载。
开放性使得分布式系统中的许多
软件接口都提供给用户,这样的
开放式结构对于开发人员非常有价值,但同时也为破坏者打开了方便之门。
针对分布式系统存在的上述难点,要保证一个分布式系统的正常运行,就必须对系统资源进行有效的管理,对计算机之间的通信、故障、安全等问题提供有效的处理手段和支持机制。
用户对分布式系统的要求是透明性、安全性、灵活性、简单性、可靠性,也要求方便在局部失效时重构系统,以及集成
不均匀子系统的能力。
资源的分布性、缺乏全局
状态信息及
传输延迟,意味着集中式操作系统的某些方法和技术不能应用于分布式系统中。即使集中式系统中的某些技术满足上面的要求,其实现通常也是要付出很大代价的。