目录分布式系统分布式系统的趋势泛在网络和互联网移动和无处不在计算分布式多媒体系统作为公共基础设施资源共享分布式系统的挑战异构性开放性安全性可伸缩性故障处理并发性透明性服务质量参考资料
分布式系统#
分布式系统的定义是一个其硬件或软件组件分布在联网的计算机上,组件之间通过传递消息进行通信和动作协调的系统。资源可用于描述能在连网的计算机系统中共享的事物的范围,构造和使用分布式系统的主要动力来源于对共享资源的期望。分布式系统有如下显著特征:
并发:系统处理共享资源的能力会随着网络资源的增加而提高,对共享资源的并发执行程序的协调是非常重要的;
缺乏全局时钟:程序的协作是通过交换消息来协调的,取决于对程序动作发生的时间共识。但事实证明网络上的计算机与时钟同步的准确性有限,没有一个正确时间的全局概念;
故障独立性:系统的每个组件会单独地出现故障,而其他组件还在运行。
分布式系统是在网络操作系统的基础上构建的,网络操作系统的一般结构是运行在松耦合硬件上的松耦合软件。每台计算机有自己的操作系统,除了客户/服务器通信必须遵循的协议外,计算机之间基本上没有什么合作。分布式操作系统则是运行在松耦合硬件上的紧耦合软件,使用户产生一种错觉:整个计算机网络是一个分时系统,或像一个虚拟的单处理机,而不是一个互不相同的机器集合。用户不必意识到有多个 CPU 的存在,系统有统一的进程间通信机制、进程管理机制、文件系统和相同的系统调用接口等等。
分布式系统的趋势#
分布式系统正在经历巨大的变化,导致了一系列有影响力的趋势:泛在联网技术、无处不在计算,、对多媒体设备的需求增加、把分布式系统作为一个设施。
泛在网络和互联网#
现代互联网是一个巨大的由多种类型计算机网络互连的集合,最终结果是联网已成为一个泛在的资源,设备可以在任何时间、任何地方被连接。互联网通信机制(互联网协议)的设计和构造使得一个在某处运行的程序能给另一个地方的程序发送消息,互联网上的计算机程序就能通过这样一种公共的通信手段来传递消息进行交互。互联网也是一个超大的分布式系统,它使得世界各地的用户都能利用多种不同的服务。这些服务集是开放的,它能够通过服务器计算机和新的服务的增加而被扩展。
一些组织并不希望将内部网络连接到互联网,当内部用户和外部用户之间需要资源共享时,对服务的合法访问受到防火墙的阻碍,也会在分布式系统中出现问题。互联网和其支持的服务的实现,使得必须开发实用解决方案来解决分布式系统中的许多问题。
移动和无处不在计算#
设备小型化和无线网络方面的技术进步,已经逐步使得小型和便携式计算设备集成到分布式系统中,例如笔记本电脑、手持设备、可穿戴设备、嵌入式家电等。移动计算是指用户在移动或访问某个非常规环境时执行计算任务的性能,为用户在其移动时提供资源的需求也在不断增加,这也被称为位置感知或上下文感知的计算。
无处不在计算是指对在用户的物理环境中存在的多个小型、便宜的计算设备的利用,也就是说它们的计算行为将透明地紧密捆绑到这些日常物品的物理功能上。这些需要对自发互操作提供支持,依靠该操作设备之间的关联被例行地创建和拆除。要让访问者的设备在访问地的网络上通信,并将设备与合适的本地设备相关联,这个过程称为服务发现。
分布式多媒体系统#
多媒体支持可以定义为以集成的方式支持多种媒体类型的能力,分布式多媒体系统应该存储和定位音频或视频文件,并通过网络传输它们,从而能向用户展示多种媒体类型。网络播放是分布式多媒体技术的应用,它是在互联网上广播连续媒体的能力。
连续媒体的重要特点是包括一个时间维度,媒体类型的完整性从根本上依赖于在媒体类型的元素之间保持实时关系。分布式多媒体应用对底层的分布式基础设施提出了大量的要求,包括:
提供对一系列(可扩展的)编码和加密格式的支持;
提供一系列机制来保障所需的服务质量能得到满足;
提供相关的资源管理策略,包括合适的调度策略,来支持所需的服务质量;
提供适配策略来处理在开放系统中不可避免的场景,即服务质量不能得到满足或维持。
作为公共基础设施#
随着分布式系统基础设施的不断成熟,有一种观点是把分布式资源看成一个商品或公共设施。资源通过合适的服务提供者提供,能被最终用户有效地租赁而不是拥有。联网的计算机可用诸如存储和处理这样的物理资源,从而无须自己拥有这样的资源。用户能租用一个或多个计算结点,从而满足基本计算需求或者完成分布式计算(例如 AI 算力租赁)。同时软件服务也能跨全球互联网使用,互联网公司通过租赁服务的方式进行运营。
术语云计算(cloud computing)被用来刻画这种公共基础设施,云被定义成一组基于互联网的应用,并且足以满足大多数用户需求的存储和计算服务的集合。这得用户能大部分或全部免除本地数据存储和应用软件的使用应用服务客户,通常是根据使用情况而非购买来支付费用。云计算减少存储服务互联网了对用户设备的需求,允许非常简单的桌面或便携式设备来访问可能很广范围内的资源和服务。
通常云计算实现在集群计算机上,集群计算机(cluster computer)是互连的计算机集合,它们紧密协作提供单一的、集成的高性能计算能力。集群服务器的总目的是提供一系列的云服务,包括高性能计算能力、大容量存储、丰富的应用服务。
资源共享#
资源共享是非常重要的,对用户具有更大意义的是共享与用户应用、日常工作和社会活动有关的更高层的资源,而不仅仅是共享的硬件、设备本身。使用术语服务表示计算机系统中管理相关资源并提供功能给用户和应用的一个单独的部分,它将资源访问限制为一组定义良好的操作。分布式系统的资源是物理地封装在计算机内的,其他计算机只能通过通信才能访问。
为了实现有效的共享,每个资源必须由一个程序管理,这个程序提供通信接口使得对资源进行可靠和一致的访问和更新。在客户一服务器计算方案中,请求以消息的形式从客户发送到服务器,应答以消息的形式从服务器发送到客户。
分布式系统的挑战#
异构性#
互联网使得用户能在大量异构计算机和网络上访问服务和运行应用程序,在网络、计算机硬件、操作系统、编程语言、由不同开发者完成的软件实现都带来了异构性。
中间件是指提供了一个编程抽象的软件层,它同时屏蔽了上述这些方面的异构性。大多数中间件在互联网协议上实现,由这些协议屏蔽了底层网络的差异,但所有的中间件要解决操作系统和硬件的不同。除了解决异构性的问题外,中间件为服务器和分布式应用的程序员提供了一致的计算模型,包括远程对象调用、远程事件通知、远程 SQL 访问和分布式事务处理。
术语移动代码指能从一台计算机发送到另一台计算机,并在目的计算机上运行的代码。适合在一种计算机上运行的代码未必适合在另一种计算机上运行,因为可执行程序通常依赖于计算机的指令集和操作系统。虚拟机方法提供了实现方式,某种语言的编译器生成的是虚拟机的代码而不是某种硬件代码,在虚拟机通过解释的方式来执行它。
开放性#
开放性是决定系统能否以不同的方式被扩展和重新实现的特征,分布式系统的开放性主要取决于新的资源共享服务能被增加和供多种客户程序使用的程度。除非软件开发者能获得系统组件的关键软件接口的规约和文档,否则无法实现开放性。发布关键接口是一种标准化的常用方式,但是设计者所面临的挑战是解决由不同人构造的由许多组件组成的分布式系统的复杂性。
互联网协议的设计者引入了一系列称为征求意见文档(Requests For Comments,RFC)的文档,RFC 文档通常包括协议的描述、设计原理、工作方式、参数等等详细信息。它们也可以包括讨论、建议和实践经验,以帮助更好地理解和实现特定的协议或标准。RFC 文档是互联网发展的基础,为全球互联网上的通信提供了一个统一的标准化框架。
按这种方式支持资源共享的系统之所以称为开放的分布式系统,它们可通过在网络中增加计算机实现在硬件层次上的扩展,通过引人新的服务、重新实现旧的服务实现在软件层次上的扩展。最终开放分布式系统使得应用程序能共享资源,同时与具体的销售商无关。开放的分布式系统的特征有:
发布系统的关键接口;
基于一致的通信机制和发布接口访问共享资源的;
能用不同销售商提供的异构硬件和软件构造。
安全性#
分布式系统中维护和使用的众多信息资源对用户具有很高的内在价值,因此它们的安全相当重要,信息资源的安全性包括三个部分:
安全性 | 说明 |
---|---|
机密性 | 防止泄露给未授权的个人 |
完整性 | 防止被改变或被破坏 |
可用性 | 防止对访问资源的手段的干扰 |
可伸缩性#
分布式系统可在不同的规模下有效且高效地运转,如果资源数量和用户数量激增时系统仍能保持其有效性,那么该系统就称为可伸缩的。可伸缩性在如下方面面临着挑战:
可伸缩性的挑战 | 说明 |
---|---|
控制物理资源的开销 | 当对资源的需求增加时,应该可以花费合理的开销扩展系统以满足要求 |
控制性能损失 | 如果数据集的大小与系统中的用户或资源数量成正比,需要再数量增加时应对性能上的损失 |
防止软件资源用尽 | 随着对资源的需求持续增加,对软件资源需要具备扩容的能力以防止因资源的耗尽而无法正常运行 |
避免性能瓶颈 | 使用的算法应该是分散型,以避免性能瓶颈 |
故障处理#
当硬件或软件发生故障时,程序可能会产生不正确的结果或者在它们完成应该进行的计算之前就停止了。分布式系统的故障是部分的,有些组件出了故障而有些组件运行正常,因此故障的处理相当困难。一些故障处理的技术如:
故障处理技术 | 说明 |
---|---|
检测故障 | 有些故障能被检测到,如何在有故障出现的情况下进行管理是一种挑战 |
掩盖故障 | 有些被检测到的故障能被隐藏起来或降低它的严重程度 |
容错 | 服务的客户能被设计成容错的,提供让用户对是否重试的选择 |
故障恢复 | 软件的设计能在服务器崩溃后,永久数据的状态能被恢复或“回滚” |
冗余 | 利用冗余组件,设计有效的技术来保证服务器上数据的副本是最新的,而且不过度地损失网络的性能 |
系统的可用性是对系统可用时间的比例的一个度量指标,如果用户正在使用的计算机出现故障,用户可以转移到另一台计算机上,并且服务器进程能在另一台计算机上启动。
并发性#
在分布式系统中,服务和应用均提供可被客户共享的资源,因此可能有几个客户同时试图访问一个共享资源的情况。在分布式系统中,代表共享资源的任何一个对象必须负责确保它在并发环境中操作正确,为了使对象在并发环境中能安全使用,它的操作必须在数据保持一致的基础上同步。
透明性#
透明性被定义成对用户和应用程序员屏蔽分布式系统的组件的分离性,使系统被认为是一个整体,而不是独立组件的集合。如下是八种需要考虑的透明性,最重要的两个透明性是访问透明性和位置透明性。透明性对用户和应用程序员隐藏了与手头任务无直接关系的资源,并使得这些资源能被匿名使用。
透明性 | 说明 |
---|---|
访问透明性 | 用相同的操作访问本地资源和远程资源 |
位置透明性 | 不需要知道资源的物理或网络位置就能够访问它们 |
并发透明性 | 几个进程能并发地使用共享资源进行操作且互不干扰 |
复制透明性 | 使用资源的多个实例提升可靠性和性能,而用户和应用程序员无须知道副本的相关信息 |
故障透明性 | 屏蔽错误,不论是硬件组件故障还是软件组件故障,用户和应用程序都能够完成它们的任务 |
移动透明性 | 资源和客户能够在系统内移动而不会影响用户或程序的操作 |
性能透明性 | 当负载变化时,系统能被重新配置以提高性能 |
伸缩透明性 | 系统和应用能够进行扩展而不改变系统结构或应用算法 |
服务质量#
服务质量是系统的主要的非功能特性,即影响客户和用户体验的服务质量是可靠性、安全性和性能。满足变化的系统配置和资源可用性的适应性是服务质量的一个重要方面,服务质量的性能方面源于及时性和计算吞吐量。一些应用需要处理时间关键性数据,这些数据是要求以固定速度处理或从一个进程传送到另一个进程的数据流,在指定的时间限制内显示给用户才算是一个满意的结果。
参考资料#
《分布式系统概念与设计》[英]George Coulouris, Jean Dollimore, Tim Kindberg,Gordon Blair,金蓓弘,马应龙 译,机械工业出版社