分布式系统
建立在网络之上的软件系统
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
系统信息
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。
在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。
分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。
内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。
专业测评
分布式软件系统(Distributed 软件 Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
操作系统
负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
程序设计语言
用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
文件系统
具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
数据库系统
由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来操纵这些结点上的子数据库。分布式数据库系统在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。当然,分布在各个结点上的子数据库在逻辑上是相关的。
邮件系统
分布式邮件系统的部署设计,即同一域名下,跨地域部署的邮件系统。适用 于在各地设有分部的政府机构或者大型集团,有效管理各地的人员结构,同时提高了邮件服务器应用效率。
分布式邮件系统由多个数据中心组成,大量分支机构或较小的分散站点与数据中心的连接。分支机构需要建立自己的邮件服务器,来加快处理当地分支机构的邮件。承载相应的数据处理量。以提高邮件处理能力,邮件收发速度,邮件功能模块化。
分布式部署方案适合以下情况
1、公司有不同分支机构或较小的分散站点与公司总部的网络连接通常是低带宽、高滞后或不可靠的。
2、公司总部网络无法处理中心位置的服务流量。
3、分支机构有自己的服务器、企业网络、域控制器和系统管理员,包含数目不定的用户。
4、用户要求有更快的邮箱访问速度、更佳的用户体验和可用性
5、邮箱用户数量大,并发线程多。
6、对于安全要求高,需要把邮件服务器不同的功能分开部署。
分布式邮件系统方案情况
1、异地同域名分布式
此方案适用于集团邮件系统,各个下属子公司为了提高邮件收发速度,降低邮件负载而提出的方案。分为同域名不同用户数分布式和同域名同用户数分布式。
2、功能分布式
邮件负载比较重,对于某一些功能要求比较高,需要邮件服务器功能分开部署的客户。
3、用户分布式
邮箱用户数巨大,单机邮件服务器无法承载,服务器做集群。
分布式系统,最简单的例子是Browser--Server结构,这两者结合起来就成了最简单的分布式系统,或者可以这样理解:基于网络的软件系统大多都是分布式系统,只不过在系统的复杂程度上有所区别而已。
容错应用
因为每个PE是自治的,所以分布式系统更加可靠。一个单元或资源(软件或硬件)的故障不影响其他资源的正常功能。
固有的应用
许多应用是固有分布式的。这些应用是突发模式(burstmode)而非批量模式(bulk mode)。这方面的实例有事务处理和Internet Javad,程序。
这些应用的性能取决于吞吐量(事务响应时间或每秒完成的事务数)而不是一般多处理机所用的执行时间。
为了达到互操作性,用户需要一个标准的分布式计算环境,在这个环境里,所有系统和资源都可用。
一些其它标准基于一个特别的模型,比如CORBA(公用对象请求代理程序体系结构),它是由OMG (对象管理组)和多计算机厂商联盟开发的一个标准。CORBA使用面向对象模型实现分布式系统中的透明服务请求。
工业界有自己的标准,比如微软的分布式构件对象模型(DCOM)和Sun Microsystem公司的Java Beans。
系统优点
与集中式比较
系统倾向于分布式发展潮流的真正驱动力是经济。25年前,计算机权威和评论家Herb Grosch指出CPU的计算能力与它的价格的平方成正比,后来成为Grosch定理。也就是说如果用户付出两倍的价钱,就能获得四倍的性能。这一论断与当时的大型机技术非常吻合,因而使得许多机构都尽其所能购买最大的单个大型机。
随着微处理机技术的发展,Grosch定理不再适用了。到了二十一世纪初期,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理机每秒钟所执行的指令还多。如果你愿意付出两倍的价钱,将得到同样的CPU,但它却以更高的时钟速率运行。因此,最节约成本的办法通常是在一个系统中使用集中在一起的大量的廉价CPU。所以,倾向于分布式系统的主要原因是它可以潜在地得到比单个的大型集中式系统好得多的性价比。实际上,分布式系统是通过较低廉的价格来实现相似的性能的。
与这一观点稍有不同的是,发现微处理机的集合不仅能产生比单个大型主机更好的性能价格比,而且还能产生单个大型主机无论如何都不能达到的绝对性能。例如,按二十一世初期的技术,能够用10000个现代CPU芯片组成一个系统,每个CPU芯片以50 MIPS(每秒百万指令)的速率运行,那么整个系统的性能就是500,000 MIPS。而如果单个处理机(即CPU)要达到这一性能,就必须在2×10 秒(2 微微秒,0.002纳秒)的时间内执行一条指令,然而没有一个现存的计算机能接近这个速度,从理论上和工程上考虑都认为能达到这一要求的计算机都是不可能存在的。理论上,阿尔伯特·爱因斯坦相对论指出光的传播速度最快,它能在2 微微秒内传播0.6毫米。实际上,一个包含于边长为0.6 毫米大小的立方体内的具有上面所说的计算速度的计算机产生大量的热量就能将它自己立即熔掉。所以,无论是要以低价格获得普通的性能还是要以较高的价格获得极高的性能,分布式系统都能够满足。
另一方面,一些作者对分布式系统和并行系统进行了区分。他们认为分布式系统是设计用来允许众多用户一起工作的,而并行系统的唯一目标就是以最快的速度完成一个任务,就像 的速度为500,000MIPS的计算机那样。认为,上述的区别是难以成立的,因为实际上这两个设计领域是统一的。更愿意在最广泛的意义上使用“分布式系统”一词来表示任何一个有多个互连的CPU协同工作的系统。
建立分布式系统的另一原因在于一些应用本身是分布式的。一个超级市场连锁店可能有许多分店,每个商店都需要采购当地生产的商品(可能来自本地的农场)、进行本地销售,或者要对本地的哪些蔬菜因时间太长或已经腐烂而必须扔掉作出决定。因此,每个商店的本地计算机能明了存货清单是有意义的,而不是集中于公司总部。毕竟,大多数查询和更新都是在本地进行的。然而,连锁超级市场的高层管理者也会不时地想要了解他们还有多少甘蓝。实现这一目标的一种途径就是将整个系统建设成对于应用程序来说就像一台计算机一样,但是在实现上它是分布的,像 前面所描述的一个商店有一台机器。这就是一个商业分布式系统。
另一种固有的分布式系统是通常被称为计算机支持下的协同工作系统(CSCW,计算机 Supported Cooperative Work)。在这个系统中,一组相互之间在物理上距离较远的人员可以一起进行工作,例如,写出同一份报告。就计算机工业的长期发展趋势来说,人们可以很容易的想像出一个全新领域计算机支持的协同游戏(CSCG:Computer Supported Cooperative Games)。在这个游戏中,不在同一地方的游戏者可以实时的玩游戏。你可以想像,在一个多维迷宫中玩电子捉迷藏,甚至是一起玩一场电子空战,每个人操纵自己的本地飞行模拟器去试着击落别的游戏者,每个游戏者的屏幕上都显示出其飞机外的情况,包括其它飞入它的视野的飞机。
同集中式系统相比较,分布式系统的另一个潜在的优势在于它的高可靠性。通过把工作负载分散到众多的机器上,单个芯片故障最多只会使一台机器停机,而其它机器不会受任何影响。理想条件下,某一时刻如果有5%的计算机出现故障,系统将仍能继续工作,只不过损失5%的性能。对于关键性的应用,如核反应堆或飞机的控制系统,采用分布式系统来实现主要是考虑到它可以获得高可靠性。
最后,渐增式的增长方式也是分布式系统优于集中式系统的一个潜在的重要的原因。通常,一个公司会买一台大型主机来完成所有的工作。而当公司繁荣扩充、工作量就会增大,当其增大到某一程度时,这个主机就不能再胜任了。仅有的解决办法是要么用更大型的机器(如果有的话)代替现有的大型主机,要么再增加一台大型主机。这两种做法都会引起公司运转混乱。相比较之下,如果采用分布式系统,仅给系统增加一些处理机就可能解决这个问题,而且这也允许系统在需求增长的时候逐渐进行扩充。表1中总结了以上这些优点。
从长远的角度来看,主要的驱动力将是大量个人计算机的存在和人们共同工作与信息共享的需要,这种信息共享必需是以一种方便的形式进行的,而不受地理或人员、数据,机器的物理分布的影响。
与独立PC比较
既然使用微处理机是一种节省开支的办法,那么为什么不给每个人一台个人计算机,让他们各自独立地工作呢?一则,许多用户需要共享数据。例如,机票预订处的工作人员需要访问存储航班以及现有座位信息的主数据库。假如给每个工作人员都备份整个数据库,那么在实际中这是无法工作的,因为没有人知道其他工作人员已经卖出了哪些座位。共享的数据是上例和许多其它应用的基础,所以计算机间必须互连。而计算机互连就产生了分布式系统。
共享并不只是仅仅涉及数据。昂贵的外设,例如彩色激光打印机照相排版机以及大型存储设备(如自动光盘点唱机)都是共享资源。
把一组孤立的计算机连成一个分布式系统的第三个原因是它可以增强人与人之间的沟通,电子邮件比信件、电话和FAX有更多的诱人之处。它比信件快的多,不像电话需要两人同时都在,也不像传真,它所产生的文件可在计算机中进行编辑、重排和存储,也可以由文本处理程序来处理。
最后,分布式系统可能比给每个用户一个独立的计算机更灵活。尽管一种可能的模式是给每个人一台personal computer并把它们通过LAN联在一起,但这种方式并不是唯一的。另外还存在一种模式是将个人计算机和共享计算机混合连接在一起(这些机器的型号可能并不完全相同),使工作能够在最合适的计算机上完成,而并不总是在自己的计算机上完成。这种方式可以使工作负荷能更有效地在计算机系统中进行分配。系统中某些计算机的失效也可以通过使其工作在其它计算机上进行而得到补偿。表2总结了以上所介绍的各点。
系统缺点
尽管分布式系统有许多优点,但也有缺点。本节就将指出其中的一些缺点。前面已经提到了最棘手的问题:软件。就目前的最新技术发展水平,在设计、实现及使用分布式系统上都没有太多的经验。什么样的操作系统、程序设计语言和应用适合这一系统呢?用户对分布式系统中分布式处理又应该了解多少呢?系统应当做多少而用户又应当做多少呢?专家们的观点不一(这并不是因为专家们与众不同,而是因为对于分布式系统他们也很少涉及)。随着更多的研究的进行,这些问题将会逐渐减少。但是不应该低估这个问题。
第二个潜在的问题是通信网络。由于它会损失信息,所以就需要专门的软件进行恢复。同时,网络还会产生过载。当网络负载趋于饱和时,必须对它进行改造替换或加入另外一个网络扩容。在这两种情况下,一个或多个建筑中的某些部分必须花费很高的费用进行重新布线,或者更换网络接口板(例如用光纤)。一旦系统依赖于网络,那么网络的信息丢失或饱和将会抵消 通过建立分布式系统所获得的大部分优势。
最后,上面 作为优点来描述的数据易于共享性也是具有两面性的。如果人们能够很方便地存取整个系统中的数据,那么他们同样也能很方便地存取与他们无关的数据。换句话说,经常要考虑系统的安全性问题。通常,对必须绝对保密的数据,使用一个专用的、不与其它任何机器相连的孤立的个人计算机进行存储的方法更可取。而且这个计算机被保存在一个上锁的十分安全的房间中,与这台计算相配套的所有软盘都存放在这个房间中的一个保险箱中。分布式系统的缺点如表3所示。
表 3.分布式系统的缺点
尽管存在这些潜在的问题,许多人还是认为分布式系统的优点多于缺点,并且普遍认为分布式系统在未来几年中会越来越重要。实际上,在几年之内许多机构会将他们的大多数计算机连接到大型分布式系统中,为用户提供更好、更廉价和更方便的服务。而在十年之后,中型或大型商业或其它机构中可能将不再存在一台孤立的计算机了。
系统应用
分布式系统被用在许多不同类型的应用中。以下列出了一些应用。对这些应用而言,使用分布式系统要比其他体系结构如处理机和共享存储器多处理机更优越:
并行应用
原则上,并行应用也可以在共享存储器多处理机上运行,但共享存储器系统不能很好地扩大规模以包括大量的处理机。HPCC(高性能计算和通信)应用一般需要一个可伸缩的设计,这种设计取决于分布式处理。
容错应用
因为每个P E是自治的,所以分布式系统更加可靠。一个单元或资源(软件或硬件)的故障不影响其他资源的正常功能。
分布式应用
许多应用是固有分布式的。这些应用是突发模式(burstmode)而非批量模式(bulk mode)。这方面的实例有事务处理和Internet Javad,程序。
这些应用的性能取决于吞吐量(事务响应时间J或每秒完成的事务数)而不是一般多处理机所用的执行时间。
对于一组用户而言,分布式系统有一个特别的应用称为计算机支持的协同工作(computer supported Cooperati veworking,CSCW)或群件(groupware),支持用户协同工作。另一个应用是分布式会议,即通过物理的分布式网络进行电子会议。同样,多媒体远程教学也是一个类似的应用。由于在不同的平台上如:Pc、工作站局域网广域网上可获得非常多样的应用,用户希望能超出他fliP c的限制以获得更广泛的特十牛、功能和性能。不同网络和环境(包括分布式系统环境)下的q 操作性变得越来越重要。为了达到互操作性,用户需要一个标准的分布式计算环境,在这个环境里,所有系统和资源都可用。
DCE(分布式计算环境)是OSF (开放系统基金会)开发的分布式计算技术的工业标准集。它提供保护和控制对数据访问的安全服务、容易寻找分布式资源的名字服务、以及高度可伸缩的模型用于组织极为分散的用户、服务和数据。D C E可在所有主要的计算平台上运行,并设计成支持异型硬件和软件环境下的分布式应用。
大连商品交易所已经被包括TRANSVARL在内的一些r一商实现。TRANSVARL是最早的多厂商组(multi vendor team)的成员之一,它提出的建议已成为DC E体系结构的基础。在中可以找到利用DCE开发分布式应用的指南。具有标准接口和协议的系统也叫做开放系统。一些其它标准基于一个特别的模型,比如CORBA (公用对象请求代理程序体系结构),它是由OMG (对象管理组)和多计算机厂商联盟开发的一个标准。CORBA使用面向对象模型实现分布式系统中的透明服务请求。工业界有自己的标准,比如微软的分布式构件对象模型(DCOM)和Sun Microsystem公司的Java Beans。
系统测试
在测试执行过程中,对测试结果的分析是一个需要进行深入思考的重点问题。分布式系统测试的重点在于对后端服务器集群的测试,而判定系统中是否存在Bug则是 需要解决的重要问题。那么应该如何确定是否存在Bug呢?
对于测试结果的分析,通常观察下面几种情况。
观察前端应用的返回结果。这里需要分两种情况来考虑:第一,按照前端应用业务功能点及流程进行操作,观察返回结果是否符合业务方的需求预期;第二,操作后端的服务器(通常是重启、宕机、断网等操作),观察前端应用的返回结果是否符合系统的设计需求。
分析服务器日志。在功能测试过程中,当 在启动服务器的时候,需要将日志级别定义为Debug级别(最低级别)。这样做的主要目的是为了能便于测试工程师来分析日志和定位问题。为了能更好地定位问题,常常需要在服务器程序代码中进行日志打桩,把程序中的一些重要数据通过日志的方式展现出来。通常情况下,需要对日志的格式进行约定,在日志行中增加一些关键字来进行分类,这将便于测试工程师进行日志分析,也有利于开展分布式系统的自动化测试。另外,值得注意的是,尽可能地将打桩代码放在Debug代码中,避免影响系统代码,引入新问题。
分析操作系统的一些重要信息。测试的分布式系统绝大多数是基于Linux操作系统开发的,在测试的过程中,除了详细分析程序日志以外,还需要对操作系统的一些重要数据信息进行分析,从而来诊断服务器程序是否存在异常。以Linux操作系统为例,常常会使用top命令、netstat命令及sar命令来查看操作系统的一些数据信息。例如,可以通过netstat命令检查服务器程序是否正确地监听了指定的端口等。
借助其他分析工具。例如,如何判断服务器程序是否产生了内存泄漏?通常需要借助于内存检测工具来进行分析。在Linux环境下,常用Valgrind来进行内存检测。这是一款非常好用、功能强大的分析工具,可以帮助测试或者dotnet快速发现很多隐藏的程序Bug,尤其是在内存检测方面(同时它还具有很多其他优秀的功能,读者可以自己查看官网中的使用手册)。
压力性能测试
对于分布式系统而言,压力测试和性能测试非常重要。在进行压力测试和性能测试的时候,可能会碰到下面一些难点。
数据准备。如何准备海量的测试数据并保证模拟数据的真实性?以一个分布式的文件系统为例,预先存入100GB的数据还是存入100TB的数据、存入的文件是大小基本一致差别不大还是各不相同甚至差异很大(例如,从几十字节至几十兆字节不等),这些因素对于分布式系统的性能影响是有很大差异的。另外,如果需要预先存入100TB的数据,若按每秒写入100MB数据来计算,写入100TB数据需要100×1024×1024/100=1048576秒=291.27小时=12天。是否能忍受这么长时间的数据准备工作?为了解决这样的问题,需要对系统架构设计进行深入分析,设计好测试场景,并提前进行测试用例的设计,以尽早开始准备测试数据。
性能或压力测试工具。通常来说,分布式系统的测试需要开发一些测试工具来满足性能测试的需求。如果可以的话,建议这样的测试工具最好由测试工程师自己来实现,因为测试工程师更清楚自己的测试需求。当需要自己开发测试工具的时候,有两个关键问题需要重点关注:第一,一些关键数据的收集方式与计算将成为性能测试工具的关键,例如,TPS(每秒请求数)、Throughput(吞吐量)计算的准确性;第二,要保证性能测试工具的性能,如果工具本身的性能不好,将无法给予分布式系统足够强大的压力来进行测试。另外,当考虑到多并发(例如有10万客户端同时并发连接)时,如果性能测试工具在一台测试机器上只能运行50个或者更少的话,那么需要的测试机器数量也将会很庞大(例如2000台测试机),这个成本或许是许多公司不能承受的。因此,性能测试工具本身的性能必须要足够好才能满足需求、降低测试成本。
自动化测试
自动化测试是测试行业发展的必然趋势,对于分布式系统测试而言也不例外。在实施分布式系统自动化测试的过程中,可能会碰到下面两个难点问题。
涉及平台多且硬件杂,测试流程控制困难。在实施自动化测试的过程中,测试脚本需要控制的操作系统和应用程序很多,而且存在跨平台的特性,同时还有可能需要控制一些网络设备。因此,选择一个优秀的自动化测试框架成为了非常重要的工作之一。以 的实践经验来看,STAF是一个不错的选择,它的平台(Windows及Linux各版本)支持及开发语言的支持都很全面。
测试结果验证复杂。对于分布式系统的自动化测试来说,需要通过测试脚本来收集各种测试结果数据以验证测试结果的正确性。在实施自动化测试的过程中,可以将测试结果数据收集部分模块化,通过各子模块来检测各项数据是否正确。例如,会设计一个日志分析模块,主要负责从服务器应用程序的日志中收集相应数据进行对比验证(本文前面提到的在打桩日志中增加关键字部分就显得格外重要)。
随着互联网的发展,大型分布式系统也越来越多、越来越复杂、越来越重要。如何有效地保证大型分布式系统7×24小时全天候持续稳定地运行也就成为了一个重要课题。
系统目标
计算机网络异同
分布式计算机系统与计算机网络既有类似之处又有不同点,其主要的异同如下:
(1)在计算机网络中,每个用户或任务通常只使用一台计算机,若要利用网络中的另一台计算机,则需要远程注册。在分布式计算机系统中,用户进程在系统内各个计算机上动态调度,并根据运行情况由分布式操作系统动态地、透明地将机器分配给用户进程或任务。
(2)在计算机网络中,用户知道它们的文件存放在何处,并用显示的文件传输命令在机器之间传送文件。在分布式计算机系统中,文件的放置由操作系统管理,用户可用相同方式访问系统中的所有文件而不管它们位于何处。
(3)在计算机网络中,各结点计算机均有自己的操作系统,资源归局部所有并被局部控制,网络内的进程调度是通过进程迁移和数据迁移实现的。在分布式计算机系统中,每个场点上运行一个局部操作系统,执行的任务可以是独立的,可以是某任务的一个部分,也可以是其他场点上的(部分)任务,且各场点相互协同,合作平衡系统内的负载。
(4)在计算机网络中,系统几乎无故障容许度能力。在分布式计算机系统中有系统自动重构、适度降级使用及错误恢复功能。
(5)两者透明性的程度和级别不同。
(6)就资源共享而言,计算机网络和分布式计算机系统是类似的。
系统设计难点
虽然分布式系统具有很多优点,然而由于分布式系统自身的特点及应用环境的复杂性,分布式系统设计有如下的很多难题需要解决:
1.部分失效问题
由于分布式系统通常由若干部分组成,各个部分由于各种原因可能发生故障,如硬件故障、软件错误及错误操作等。如果一个分布式系统不对这些故障进行有效的处理,系统某一组成部分的故障可能导致整个系统的瘫痪
2.性能和可靠性过分依赖于网络
由于分布式系统是建立在网络之上的,而网络本身是不可靠的,可能经常发生故障,网络故障可能导致系统服务的终止。另外,网络超负荷会导致性能的降低,增加系统的响应时间。
3.缺乏统一控制
一个分布式系统的控制通常是一个典型的分散控制,没有统一的中心控制。因此,分布式系统通常需要相应的同步机制来协调系统中各个部分的工作。设计与实现一个对用户来说是透明的且具有故障容许度能力的分布式系统是一项具有挑战性的工作,而且所需的机制和策略尚未成熟。因此什么样的程序设计模型、什么样的控制机制最适合分布式系统仍是需要继续研究的课题。
4.难以合理设计资源分配策略
在集中式系统中,所有的资源都由操作系统管理和分配,但在分布式系统中,资源属于各节点,所以调度的灵活性不如集中式系统,资源的物理分布可能与用户请求的分布不匹配,某些资源可能空闲,而另一些资源可能超载。
5.安全保密性问题
开放性使得分布式系统中的许多软件接口都提供给用户,这样的开放式结构对于开发人员非常有价值,但同时也为破坏者打开了方便之门。
针对分布式系统存在的上述难点,要保证一个分布式系统的正常运行,就必须对系统资源进行有效的管理,对计算机之间的通信、故障、安全等问题提供有效的处理手段和支持机制。
用户对分布式系统的要求是透明性、安全性、灵活性、简单性、可靠性,也要求方便在局部失效时重构系统,以及集成不均匀子系统的能力。
资源的分布性、缺乏全局状态信息及传输延迟,意味着集中式操作系统的某些方法和技术不能应用于分布式系统中。即使集中式系统中的某些技术满足上面的要求,其实现通常也是要付出很大代价的。
分类
分布式计算机系统的体系结构可用处理机之间的耦合度为主要标志来加以描述。耦合度是系统模块之间互联的紧密程度,它是数据传输率、响应时间、并行处理能力等性能指标的综合反映,主要取决于所选用体系结构的互联拓扑结构和通信链路的类型。 
按地理环境衡量耦合度,分布式系统可以分为机体内系统、建筑物内系统、建筑物间系统和不同地理范围的区域系统等,它们的耦合度依次由高到低按应用领域的性质决定耦合度,可以分成三类: 
第一种是面向计算任务的分布并行计算机系统和分布式多用户计算机系统,它们要求尽可能高的耦合度,以便发展成为能分担大型计算机和分时计算机系统所完成的工作。 
第二种是面向管理信息的分布式数据处理系统。耦合度可以适当降低。 
第三种是面向过程控制的分布式计算机控制系统。耦合度要求适中,当然对于某些实时应用,其耦合度的要求可能很高。
特征
分布式系统是多个处理机通过通信线路互联而构成的松散耦合的系统。从系统中某台处理机来看,其余的处理机和相应的资源都是远程的,只有它自己的资源才是本地的。至今,对分布式系统的定义尚未形成统一的见解。一般认为,分布式系统应具有以下四个特征: 
(1)分布性。分布式系统由多台计算机组成,它们在地域上是分散的,可以散布在一个单位、一个城市、一个国家,甚至全球范围内。整个系统的功能是分散在各个节点上实现的,因而分布式系统具有数据处理的分布性。 
(2)自治性。分布式系统中的各个节点都包含自己的处理机和内存,各自具有独立的处理数据的功能。通常,彼此在地位上是平等的,无主次之分,既能自治地进行工作,又能利用共享的通信线路来传送信息,协调任务处理。 
(3)并行性。一个大的任务可以划分为若干个子任务,分别在不同的主机上执行。 
(4)全局性。分布式系统中必须存在一个单一的、全局的进程通信机制,使得任何一个进程都能与其他进程通信,并且不区分本地通信与远程通信。同时,还应当有全局的保护机制。系统中所有机器上有统一的系统调用集合,它们必须适应分布式的环境。在所有CPU上运行同样的内核,使协调工作更加容易。
优缺点
优点
(1)资源共享。若干不同的节点通过通信网络彼此互联,一个节点上的用户可以使用其他节点上的资源,如分布式系统允许设备共享,使众多用户共享昂贵的外部设备,如彩色打印机;允许数据共享,使众多用户访问共用的数据库;可以共享远程文件,使用远程特有的硬件设备(如高速阵列处理器),以及执行其他操作。 
(2)加快计算速度。如果一个特定的计算任务可以划分为若干个并行运行的子任务,则可把这些子任务分散到不同的节点上,使它们同时在这些节点上运行,从而加快计算速度。另外,分布式系统具有计算迁移功能,如果某个节点上的负载太重,则可把其中一些作业移到其他节点去执行,从而减轻该节点的负载。这种作业迁移称为负载平衡。 
(3)可靠性高。分布式系统具有高可靠性。如果其中某个节点失效了,则其余的节点可以继续操作,整个系统不会因为一个或少数几个节点的故障而全体崩溃。因此,分布式系统有很好的故障容许度性能。 
系统必须能够检测节点的故障,采取适当的手段,使它从故障中恢复过来。系统确定故障所在的节点后,就不再利用它来提供服务,直至其恢复正常工作。如果失效节点的功能可由其他节点完成,则系统必须保证功能转移的正确实施。当失效节点被恢复或者修复时,系统必须把它平滑地集成到系统中。 
(4)通信方便、快捷。分布式系统中各个节点通过一个通信网络互联在一起。通信网络由通信线路、调制解调器和通信处理器等组成,不同节点的用户可以方便地交换信息。在低层,系统之间利用传递消息的方式进行通信,这类似于单CPU系统中的消息机制。单CPU系统中所有高层的消息传递功能都可以在分布式系统中实现,如文件传递、登录、邮件、Web浏览和远程过程调用( Remote Procedure call,RPC)。 
分布式系统实现了节点之间的远距离通信,为人与人之间的信息交流提供了很大方便不同地区的用户可以共同完成一个项目,通过传送项目文件,远程登录进入对方系统来运行程序,如发送电子邮件等,协调彼此的工作。 
缺点
尽管分布式系统具备众多优势,但它也有自身的缺点,主要是可用软件不足,系统软件、编程语言、应用程序以及开发工具都相对很少。此外,还存在通信网络饱和或信息丢失和网络安全问题,方便的数据共享同时意味着机密数据容易被窃取。虽然分布式系统存在这些潜在的问题,但其优点远大于缺点,而且这些缺点也正得到克服。因此,分布式系统仍是人们研究、开发和应用的方向。
参考资料

Warning: Invalid argument supplied for foreach() in /www/wwwroot/newbaike1.com/id.php on line 362
目录
概述
系统信息
专业测评
操作系统
程序设计语言
文件系统
数据库系统
邮件系统
容错应用
固有的应用
系统优点
与集中式比较
与独立PC比较
系统缺点
系统应用
并行应用
容错应用
分布式应用
系统测试
压力性能测试
自动化测试
系统目标
计算机网络异同
系统设计难点
分类
特征
优缺点
参考资料