分布式系统的分布式系统的应用
· 分布式系统被用在许多不同类型的应用中。
以下我们列出了一些应用。
对这些应用而言,使用分布式系统要比其他体系结构如处理机和共享存储器多处理机更优越: 许多应用是固有分布式的。
这些应用是突发模式(burstmode)而非批量模式(bulk mode)。
这方面的实例有事务处理和Internet Javad,程序。
这些应用的性能取决于吞吐量(事务响应时阳J或每秒完成的事务数)而不是一般多处理机所用的执行时间。
对于一组用户而言, 分布式系统有一个特别的应用称为计算机支持的协同工作(computer supported Cooperati veworking,CSCW)或群件(groupware), 支持用户协同工作。
另一个应用是分布式会议, 即通过物理的分布式网络进行电子会议。
同样,多媒体远程教学也是一个类似的应用。
由于在不同的平台上如:Pc、工作站、局域网和广域网上可获得非常多样的应用,用户希望能超出他fliP c的限制以获得更广泛的特十牛、功能和性能。
不同网络和环境(包括分布式系统环境)下的q 操作性变得越来越重要。
为了达到互操作性,用户需要一个标准的分布式计算环境,在这个环境里,所有系统和资源都可用。
DCE (分布式计算环境)是OSF (开放系统基金会)开发的分布式计算技术的工业标准集。
它提供保护和控制对数据访问的安全服务、容易寻找分布式资源的名字服务、以及高度可伸缩的模型用于组织极为分散的用户、服务和数据。
D C E可在所有主要的计算平台上运行, 并设计成支持异型硬件和软件环境下的分布式应用。
DCE已经被包括TRANSVARL在内的一些r一商实现。
TRANSVARL是最早的多厂商组(multi vendor team)的成员之一,它提出的建议已成为DC E体系结构的基础。
在中可以找到利用DCE开发分布式应用的指南。
具有标准接口和协议的系统也叫做开放系统。
一些其它标准基于一个特别的模型,比如CORBA (公用对象请求代理程序体系结构),它是由OMG (对象管理组)和多计算机厂商联盟开发的一个标准。
CORBA使用面向对象模型实现分布式系统中的透明服务请求。
工业界有自己的标准,比如微软的分布式构件对象模型(DCOM)和Sun Microsystem公司的Java Beans。
分布式系统有什么功能?
有一些系统设计基础的话,给你推荐几本书吧:《面向模式的软件架构 卷4:分布式计算的模式语言》出版社:人民邮电出版社主要讲分布式计算系统软件的设计和实现。
偏软件方向,相对较专业。
《分布式计算(第二版)》出版社:电子工业出版社主要介绍分布式计算的数学基础和理论,揭示设计分布式系统的底层问题(通信、协调、同步及不确定)和基本的算法概念及下界技术。
容易理解,适合自学。
《分布式系统原理与范型》出版社:清华大学出版社全书的第一部分讨论了分布式系统的原理、概念和技术,其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。
第二部分给出了一些实际的分布式系统:基于对象的分布式系统、分布式文件系统、基于文档的分布式系统以及基于协作的分布式系统,介绍了一些实际系统的设计思想和实现技术。
容易理解,适合自学。
软件开发中经常提到一个分布式这个词,请问什么是分布式开发
现在的软件开发都讲究个"层"的意思.分布式开发将一个系统分为三个层次:客户端应用程序,应用程序服务器,后台数据库。
客户端提出请求,应用服务器接受请求并处理然后返回数据给客户端,后台数据库当然是提供数据。
多半是用于WEB开发.这样的分层开发有很多 好处..我就不多说了...
分布式系统的分布式系统的缺点
尽管分布式系统有许多优点,但也有缺点。
本节就将指出其中的一些缺点。
我们前面已经提到了最棘手的问题:软件。
就目前的最新技术发展水平,我们在设计、实现及使用分布式系统上都没有太多的经验。
什么样的操作系统、程序设计语言和应用适合这一系统呢?用户对分布式系统中分布式处理又应该了解多少呢?系统应当做多少而用户又应当做多少呢?专家们的观点不一(这并不是因为专家们与众不同,而是因为对于分布式系统他们也很少涉及)。
随着更多的研究的进行,这些问题将会逐渐减少。
但是我们不应该低估这个问题。
第二个潜在的问题是通信网络。
由于它会损失信息,所以就需要专门的软件进行恢复。
同时,网络还会产生过载。
当网络负载趋于饱和时,必须对它进行改造替换或加入另外一个网络扩容。
在这两种情况下,一个或多个建筑中的某些部分必须花费很高的费用进行重新布线,或者更换网络接口板(例如用光纤)。
一旦系统依赖于网络,那么网络的信息丢失或饱和将会抵消我们通过建立分布式系统所获得的大部分优势。
最后,上面我们作为优点来描述的数据易于共享性也是具有两面性的。
如果人们能够很方便地存取整个系统中的数据,那么他们同样也能很方便地存取与他们无关的数据。
换句话说,我们经常要考虑系统的安全性问题。
通常,对必须绝对保密的数据,使用一个专用的、不与其它任何机器相连的孤立的个人计算机进行存储的方法更可取。
而且这个计算机被保存在一个上锁的十分安全的房间中,与这台计算相配套的所有软盘都存放在这个房间中的一个保险箱中。
分布式系统的缺点如表1-3所示。
项目 描述 软件 分布式系统开发的软件还很少 网络 网络可能饱和和引起其它的问题 安全 容易造成对保密数据的访问 表 1-3. 分布式系统的缺点尽管存在这些潜在的问题,许多人还是认为分布式系统的优点多于缺点,并且普遍认为分布式系统在未来几年中会越来越重要。
实际上,在几年之内许多机构会将他们的大多数计算机连接到大型分布式系统中,为用户提供更好、更廉价和更方便的服务。
而在十年之后,中型或大型商业或其它机构中可能将不再存在一台孤立的计算机了。
分布式是什么意思?
分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。
它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。
分布式操作系统负责管理分布式处理系统资源和控制分布式程序运行。
它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。
一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。
它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
分布式数据库系统由分布于多个计算机结点上的若干个数据库系统组成,它提供有效的存取手段来操纵这些结点上的子数据库。
分布式数据库在使用上可视为一个完整的数据库,而实际上它是分布在地理分散的各个结点上。
当然,分布在各个结点上的子数据库在逻辑上是相关的。
--------------- 分布式数据库系统是由若干个站集合而成。
这些站又称为节点,它们在通讯网络中联接在一起,每个节点都是一个独立的数据库系统,它们都拥有各自的数据库、中央处理机、终端,以及各自的局部数据库管理系统。
因此分布式数据库系统可以看作是一系列集中式数据库系统的联合。
它们在逻辑上属于同一系统,但在物理结构上是分布式的。
分布式数据库系统已经成为信息处理学科的重要领域,正在迅速发展之中,原因基于以下几点: 1、它可以解决组织机构分散而数据需要相互联系的问题。
比如银行系统,总行与各分行处于不同的城市或城市中的各个地区,在业务上它们需要处理各自的数据,也需要彼此之间的交换和处理,这就需要分布式的系统。
2、如果一个组织机构需要增加新的相对自主的组织单位来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
3、均衡负载的需要。
数据的分解采用使局部应用达到最大,这使得各处理机之间的相互干扰降到最低。
负载在各处理机之间分担,可以避免临界瓶颈。
4、当现有机构中已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
5、相等规模的分布式数据库系统在出现故障的几率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此就整个系统来讲它的可靠性是比较高的。
特点 1、在分布式数据库系统里不强调集中控制概念,它具有一个以全局数据库管理员为基础的分层控制结构,但是每个局部数据库管理员都具有高度的自主权。
2、在分布式数据库系统中数据独立性概念也同样重要,然而增加了一个新的概念,就是分布式透明性。
所谓分布式透明性就是在编写程序时好象数据没有被分布一样,因此把数据进行转移不会影响程序的正确性。
但程序的执行速度会有所降低。
3、集中式数据库系统不同,数据冗余在分布式系统中被看作是所需要的特性,其原因在于:首先,如果在需要的节点复制数据,则可以提高局部的应用性。
其次,当某节点发生故障时,可以操作其它节点上的复制数据,因此这可以增加系统的有效性。
当然,在分布式系统中对最佳冗余度的评价是很复杂的。
分布式系统的类型,大致可以归为三类: 1、分布式数据,但只有一个总? 据库,没有局部数据库。
2、分层式处理,每一层都有自己的数据库。
3、充分分散的分布式网络,没有中央控制部分,各节点之间的联接方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式联接等。
--------------------- 什么是分布式智能? NI LabVIEW 8的分布式智能结合了相关的技术和工具,解决了分布式系统开发会碰到的一些挑战。
更重要的是,NI LabVIEW 8的分布式智能提供的解决方案不仅令这些挑战迎刃而解,且易于实施。
LabVIEW 8的分布式智能具体包括: 可对分布式系统中的所有结点编程——包括主机和终端。
尤为可贵的是,您可以利用LabVIEW图形化编程方式,对大量不同类型的对象进行编程,如桌面处理器、实时系统、FPGA、PDA、嵌入式微处理器和DSP。
导航所有系统结点的查看系统——LabVIEW Project Explorer。
您可使用Project Explorer查看、编辑、运行和调试运行于任何对象上的结点。
经简化的数据共享编程界面——共享变量。
使用共享变量,您可轻松地在系统间(甚至实时系统间)传输数据且不影响性能。
无通信循环,无RT FIFO,无需低层次TCP函数。
您可以利用简单的对话完成共享变量的配置,从而将数据在各系统间传输或将数据连接到不同的数据源。
您还可添加记录、警报、事件等数据服务――一切仅需简单的对话即可完成。
实现了远程设备及系统内部或设备及系统之间的同步操作——定时和同步始终是定义高性能测量和控制系统的关键问题。
利用基于NI技术的系统,探索设备内部并编写其内部运行机制,从而取得比传统仪器或PLC方式下更为灵活的解决方...
什么是分布式系统?
分布式系统(distributed system)是建立在网络之上的软件系统。
正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。
因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。
系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。
系统中存在一个以全局的方式管理计算机资源的分布式操作系统。
通常,对用户来说,分布式系统只有一个模型或范型。
在操作系统之上有一层软件中间件(middleware)负责实现这个模型。
一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web 页面)一样。
在计算机网络中,这种统一性、模型以及其中的软件都不存在。
用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。
如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。
如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。
分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
分布式系统的分布式系统的测试
· 在测试执行过程中,对测试结果的分析是一个需要进行深入思考的重点问题。
分布式系统测试的重点在于对后端服务器集群的测试,而判定系统中是否存在Bug则是我们需要解决的重要问题。
那么应该如何确定是否存在Bug呢?对于测试结果的分析,我们通常观察下面几种情况。
观察前端应用的返回结果。
这里需要分两种情况来考虑:第一,按照前端应用业务功能点及流程进行操作,观察返回结果是否符合业务方的需求预期;第二,操作后端的服务器(通常是重启、宕机、断网等操作),观察前端应用的返回结果是否符合系统的设计需求。
分析服务器日志。
在功能测试过程中,当我们在启动服务器的时候,需要将日志级别定义为Debug级别(最低级别)。
这样做的主要目的是为了能便于测试工程师来分析日志和定位问题。
为了能更好地定位问题,常常需要在服务器程序代码中进行日志打桩,把程序中的一些重要数据通过日志的方式展现出来。
通常情况下,我们需要对日志的格式进行约定,在日志行中增加一些关键字来进行分类,这将便于测试工程师进行日志分析,也有利于开展分布式系统的自动化测试。
另外,值得注意的是,我们尽可能地将打桩代码放在Debug代码中,避免影响系统代码,引入新问题。
分析操作系统的一些重要信息。
我们测试的分布式系统绝大多数是基于Linux操作系统开发的,在测试的过程中,除了详细分析程序日志以外,还需要对操作系统的一些重要数据信息进行分析,从而来诊断服务器程序是否存在异常。
以Linux操作系统为例,我们常常会使用top命令、netstat命令及sar命令来查看操作系统的一些数据信息。
例如,可以通过netstat命令检查服务器程序是否正确地监听了指定的端口等。
借助其他分析工具。
例如,如何判断服务器程序是否产生了内存泄漏?通常需要借助于内存检测工具来进行分析。
在Linux环境下,我们常用Valgrind来进行内存检测。
这是一款非常好用、功能强大的分析工具,可以帮助测试或者开发工程师快速发现很多隐藏的程序Bug,尤其是在内存检测方面(同时它还具有很多其他优秀的功能,读者可以自己查看官网中的使用手册)。
对于分布式系统而言,压力测试和性能测试非常重要。
在进行压力测试和性能测试的时候,可能会碰到下面一些难点。
数据准备。
如何准备海量的测试数据并保证模拟数据的真实性?以一个分布式的文件系统为例,预先存入100GB的数据还是存入100TB的数据、存入的文件是大小基本一致差别不大还是各不相同甚至差异很大(例如,从几十字节至几十兆字节不等),这些因素对于分布式系统的性能影响是有很大差异的。
另外,如果需要预先存入100TB的数据,若按每秒写入100MB数据来计算,写入100TB数据需要100*1024*1024/100=1048576秒=291.27小时=12天。
我们是否能忍受这么长时间的数据准备工作?为了解决这样的问题,我们需要对系统架构设计进行深入分析,设计好测试场景,并提前进行测试用例的设计,以尽早开始准备测试数据。
性能或压力测试工具。
通常来说,分布式系统的测试需要开发一些测试工具来满足性能测试的需求。
如果可以的话,建议这样的测试工具最好由测试工程师自己来实现,因为测试工程师更清楚自己的测试需求。
当需要自己开发测试工具的时候,有两个关键问题需要重点关注:第一,一些关键数据的收集方式与计算将成为性能测试工具的关键,例如,TPS(每秒请求数)、Throughput(吞吐量)计算的准确性;第二,要保证性能测试工具的性能,如果工具本身的性能不好,将无法给予分布式系统足够强大的压力来进行测试。
另外,当考虑到多并发(例如有10万客户端同时并发连接)时,如果性能测试工具在一台测试机器上只能运行50个或者更少的话,那么需要的测试机器数量也将会很庞大(例如2000台测试机),这个成本或许是许多公司不能承受的。
因此,性能测试工具本身的性能必须要足够好才能满足需求、降低测试成本。
自动化测试是测试行业发展的必然趋势,对于分布式系统测试而言也不例外。
在实施分布式系统自动化测试的过程中,我们可能会碰到下面两个难点问题。
涉及平台多且硬件杂,测试流程控制困难。
在实施自动化测试的过程中,测试脚本需要控制的操作系统和应用程序很多,而且存在跨平台的特性,同时还有可能需要控制一些网络设备。
因此,选择一个优秀的自动化测试框架成为了非常重要的工作之一。
以我们的实践经验来看,STAF是一个不错的选择,它的平台(Windows及Linux各版本)支持及开发语言的支持都很全面。
测试结果验证复杂。
对于分布式系统的自动化测试来说,我们需要通过测试脚本来收集各种测试结果数据以验证测试结果的正确性。
在实施自动化测试的过程中,我们可以将测试结果数据收集部分模块化,通过各子模块来检测各项数据是否正确。
例如,我们会设计一个日志分析模块,主要负责从服务器应用程序的日志中收集相应数据进行对比验证(本文前面提到的在打桩日志中增加关键字部分就显得格外重要)。
随着互联网的发展,大型分布式系统也越来越多、越来越复杂、越来越重要。
如何有效地保证...
什么是分布式编程
分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。
更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。
之所以要把一个应用程序分布在不同的计算机上,主要有两个目的:1) 分散服务器的压力大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。
可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。
这样整个系统的压力就分布到了不同的服务器上。
l 横向:按功能划分。
l 纵向:N层架构,其中的一些层分布到不同的服务器上(分层的概念会在后文进行介绍)。
2) 提供服务,功能重用使用服务进行功能重用比使用组件进行代码重用更进一层。
举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。
在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。
妹妹有点紧