分布式系统:系统模型

news/发布时间2024/5/14 16:45:36

目录
  • 系统模型
  • 物理模型
  • 体系结构模型
    • 体系的元素
      • 通信实体
      • 通信范型
      • 角色和责任
      • 放置
    • 体系结构模式
    • 相关的中间件解决方案
  • 基础模型
    • 交互模型
    • 故障模型
    • 安全模型

系统模型

在实际情况下,分布式系统存在各种困难和潜在的威胁,例如:

困难和威胁 说明
使用模式的多样性 系统的组件会承受各种工作负载,有些部分可能断线或连接不稳定,一些应用对通信带宽和延迟有特殊的需求
系统环境的多样性 分布式系统必须能容纳异构的硬件、操作系统和网络
内部问题 包括非同步的时钟、冲突的数据更新、多种涉及系统单个组件的软硬件故障模式
外部威胁 包括对数据完整性、保密性的攻击以及服务拒绝攻击

不同类型的分布式系统能体现出相似的基本特性,存在一些公共的设计问题。不同的模型将给出分布式系统的公共特性和设计问题,并对分布式系统设计的一个相关方面给出抽象、简化但一致的描述。主要包括 3 种模型:

模型 说明
物理模型 从计算机及其互联的网络方面考虑系统的硬件组成
体系结构模型 从系统执行的计算和通信任务方面来描述系统
基础模型 采用抽象的观点描述分布式系统的某个方面

物理模型

物理模型是从计算机和所用网络技术的特定细节中抽象出来的分布式系统底层硬件元素的表示,基线物理模型也被称为最小物理模型,是一组通过计算机网络进行消息传递的,可扩展的计算机结点。基于基线模型,可以将分布式系统的发展分为 3 个世代:

分布式系统世代 说明
早期分布式系统 随着局域网技术如以太网的出现而出现,与互联网的连接有限并支持少量的服务。单个的系统大部分是同构的,开放性不是主要的问题,服务质量提供还很少。
互联网规模的分布式系统 该世代的系统的底层物理基础设施由一个可扩展的结点集合组成,通过互联网相互连接。该系统接入的结点具有明显的异构性,导致开放标准和相关的中间件技术的重要性不断增加。
当代的分布式系统 移动计算的出现导致结点在物理上可以移动,并引起了服务发现等新增功能的需要和对自发互操作的支持。无处不在计算的出现导致了体系结构从分立结点型转向嵌入式,云计算的出现导致了从自治结点完成给定任务转向一组结点一起提供一个给定的服务。

现在还有一种(物理体系结构叫做系统的系统,它被定义成一个由一系列子系统组成复杂系统,这些子系统本身也是系统,它们一起完成一个或多个特定的任务。
书中给出了三个时代的物理模型的总结:

分布式系统 早期 互联网规模 当代
规模 超大
异构性 有限(相对同构的配置) 从平台、语言和中间件方面来说都较大 维度增加,包括体系结构中完全不同的风格
开放性 不属于优先考虑的事 相当重要,引入一系列标准 重要的研究挑战,已有的标准不能包含复杂系统
服务质量 起步阶段 相当重要,引入一系列服务 重要的研究挑战,已有的服务不能包含复杂系统

体系结构模型

一个系统的体系结构是用独立指定的组件以及这些组件之间的关系来表示的结构,整体目标是确保结构能满足现在和将来可能的需求,主要关心的是系统可靠性、可管理性、适应性和性价比。

体系的元素

对于一个分布式系统的基础构建块,需要考虑分布式系统中的通信实体、通信范型、角色和责任、物理设备的放置。

通信实体

对于通信实体而言,主要有进程、对象、组件、Web 服务这几种抽象方式,如下表所示。其中对于进程来说,在实际情况下可能有些操作系统不支持进程抽象(例如传感器网络),此时的通信的实体是结点,以及在一些分布式系统环境中使用了线程进行通信。组件的合约化的方法鼓励和促进第三方开发组件,也去除了一些隐含的依赖。

通信实体 说明
进程 分布式系统可以看成是带有恰当进程间通信范型的多个进程
对象 在分布式面向对象的方法中,一个计算由若干交互的对象组成,代表分解给定问题领域的自然单元。通过接口被访问,使用一个相关的接口定义语言(IDL)提供定义在一个对象上的方法的规约。
组件 组件类似于对象,关键的区别在于组件不仅能进一步给出关于其他组件/接口的假设,为系统的构造提供一个更完整的合约。
Web 服务 Web 服务通过利用Web标准表示和发现服务,本质上是被集成到万维网中的。

通信范型

分布式系统中可使用三种不同的通信范型来实现通信,其中 RPC 和 RMI 的底层细节对用户而言是隐藏的。

通信范型 说明
进程间通信 分布式系统进程之间通信的相对底层的支持,包括消息传递原语、直接访问 API、对多播通信的支持。
远程调用 覆盖分布式系统中通信实体之间基于双向交换的技术,包括调用远程操作、过程或方法。
远程过程调用(RPC) 远程计算机上进程中的过程能被调用,好像它们是在本地地址空间中的过程一样。
远程方法调用(RMI) 应用于分布式对象的环境,一个发起调用的对象能调用一个远程对象中的方法。

上述技术的共同点在于通信代表发送者和接收者之间的双向关系,目前也出现了一些技术支持间接通信。间接通信指通过第三个实体在发送者和接收者之间的解耦合,发送者不需要知道正在发送给谁(空间解耦合),发送者和接收者不需要同时存在(时间解耦合)。间接通信的技术包括:

间接通信技术 说明
组通信 一个组在系统中用一个组标识符表示,接收方通过加入组就能选择性接收发送到组的消息,发送者通过组标识符发送消息给组。
发布-订阅系统 提供一个中间服务,有效确保由生产者生成的信息被路由到需要这个信息的消费者。
消息队列 提供了点对点服务,生产者进程能发送消息到一个指定的队列,消费者进程能从队列中接收消息。
元组空间 进程能把任意的结构化数据项(称为元组)放到一个持久元组空间,其他进程可以指定感兴趣的模式在元组空间读或者删除元组。
分布式共享内存 用于支持在不共享物理内存的进程之间共享数据,提供给程序员一种读或写的数据结构的抽象。

角色和责任

角色主要有两种单个进程角色的体系结构风格:客户机-服务器和 P2P,在客户-服务器结构中进程扮演服务器和客户的角色,客户进程可以与不同主机上的服务器进程交互。

在 P2P 体系结构中,涉及一项任务或活动的所有进程扮演相同的角色,作为对等方进行协作交互,不区分客户和服务器。促使对等系统发展的主要观点是:一个服务的用户所拥有的网络和计算资源也能被投人使用以支持那个服务,此时可用于运行服务的资源随用户数而增加(例如迅雷)。

放置

诸如对象或服务这样的实体需要映射到底层的物理分布式基础设施,通常由大量的机器通过一个任意复杂的网络互联组成。放置需要考虑实体间的通信模式、给定机器的可靠性和它们当前的负载、不同机器之间的通信质量等,主要包括四种放置策略:将服务映射到多个服务器、缓存、移动代码、移动代理。

放置策略 说明
将服务映射到多个服务器 服务可实现成在一个单独主机上的几个服务器进程,在必要时进行交互以便为客户进程提供服务。
缓存 缓存用于存储最近使用的数据对象,当用户进程需要一个对象时,如果缓存中有最新的拷贝可用就提供缓存中的对象。
移动代码 将代码下载到本地进行运行,好处是能够提供良好的交互响应,不受与网络通信相关的延迟或带宽变化的影响。
移动代理 是一种能通过网络在计算机之间移动的程序,完成诸如信息搜集之类的任务,最后返回结果。

例如在 Web 浏览器中会在客户本地的文件系统重缓存最近的 Web 资源,Web 服务器也会设置代理服务器提供多个客户机的缓存数据。

对所访问的计算机上的资源而言,移动代理和移动代码可能会带来潜在的安全威胁。接收一个移动代理时,应该根据代理的角色对其可访问的本地资源进行限制。同时移动代理是脆弱的,如果它们访问所需信息的要求被拒绝,就有可能完不成任务。

体系结构模式

体系结构模式构建在上体系结构元素之上,经典的体系结构模型包括分层体系结构(layering architecture)、层次化体系结构(tiered ar-chitecture)和瘦客户。分层方法将一个复杂的系统被分成若干层,每层利用下层提供的服务进行工作。因此一个给定的层提供将向上层一个软件抽象,更高的层不清楚下层的实现细节。就分布式系统而言,分层等同于把服务通过垂直的方式进行组织。一个分布式服务可由一个或多个服务器进程提供,在进程之间、进程和客户之间相互交互,在系统范围内实现对资源一致的视图的维护。

层次化体系结构与分层体系结构是互补的,层次化是一项组织给定层功能的技术,将具体功能放在合适的服务器上。对于一个应用功能,可以按照下表进行功能分解。

应用程序功能 说明
表示逻辑 处理用户交互和修改呈现给用户的应用视图
应用逻辑 与应用相关的详细的应用特定处理
数据逻辑 应用的持久存储,通常在一个数据库管理系统中

在两层架构中三种逻辑被分到两个进程中,好处是具有交互的低延迟,仅有调用操作的消息交换,不足是将应用逻辑分离到不同的进程,一部分逻辑不能被另一部分直接调用。在三层解决方案中,有从逻辑元素到物理服务器的一对一映射,能提高软件的可维护性。每一层也都有定义明确的角色,缺点是增加了管理三个服务器的复杂性,也增加了与每个操作相关的网络流量和延迟。(当然本书的说明较为理论化,实践中的应用显然是清一色的使用 MVC 模式实现的三层架构)注意这个方案可以推广到多层,一个给定的应用领域划分为 n 个逻辑,每个逻辑元素映射到一个给定的服务器元素。

分布式计算的趋势是将复杂性从最终用户设备移向互联网服务,使客户设备在较少的假设或需求下获得对复杂网络化服务的访问。术语瘦客户指的是一个软件层,在执行一个应用程序或访问远程计算机上的服务时,由该软件层提供一个基于窗口的本地用户界面。这种方法的好处是有可能通过大量的网络化服务和潜在能力,极大地对简单的本地设备增强。

瘦客户体系结构的主要缺点是在交互频繁的图形活动中,用户感受到的延迟会因为在瘦客户和应用进程之间传输图像和向量信息而增大到不可接受的程度。瘦客户的概念导致虚拟网络计算(Virtual Network Computing, VNC),VNC 在概念上即为远程访问提供图形用户界面。这种低层方法确保协议能工作在任何操作系统或应用中,用户能用不同设备从任何地方访问计算机设施。

相关的中间件解决方案

中间件的任务是为分布式系统的开发提供一个高层的编程抽象,并且通过分层,对底层基础设施中的异构性提供抽象,从而提升互操作性和可移植性。下图中间件的顶层分类是根据通信实体和相关通信范型而确定的,遵循五个主要的体系结构模型:分布式对象、分布式组件、发布-订阅系统、消息队列和 Web 服务。除了编程抽象之外,中间件也能提供分布式系统的基础设施服务,供应用程序或其他服务使用,这些基础设施服务与中间件提供的分布式编程模式是紧密绑定的。许多分布式应用完全依赖中间件提供的服务来支持应用的通信和数据共享需求,依靠中间件支持的开发能大大简化分布式系统的编程。

中间件的限制在于分布式程序正确的行为在很多层面上依赖检查、错误校正机制和安全手段,其中有些要求访问应用的地址空间的数据。任何企图在通信系统中单独完成的检查将只能保证部分正确性,因此在应用程序中可能重复同样的任务,降低了编程效率并增加了不必要的复杂性并要执行冗余的计算。

基础模型

上面的各种系统模型具有一些基本特性,所有的模型都由若干进程组成,进程通过在计算机网络相互通信。所有的模型都共享下列设计需求:实现进程及网络的性能和可靠性特征,确保系统中资源的安全性。因此可以归纳出基于基本特性的模型,一个基础模型应该仅包含要考虑的实质性成分。在基本模型中提取的分布式系统情况能解决下列问题:

基本模型 说明
交互 进程通过传递消息交互,交互模型必须反映通信带来的延迟
故障 故障模型将对这些故障进行定义和分类,为分析它们潜在效果以及设计能容忍每种类型故障的系统奠定了基础
安全 安全模型对发生攻击的形式给出了定义和分类,为分析对系统的威胁以及设计能抵御这些威胁的系统奠定了基础

交互模型

分布式系统由多个以复杂方式进行交互的进程组成,每个进程执行的速率和进程之间消息传递的时限通常是不能预测的。每个进程有它自己的状态,该状态由进程能访问和更新的数据集组成,它不能被其他进程访问或更新。因此影响进程交互有两个重要因素:

  • 通信性能经常是一个限制特性
  • 不可能维护一个全局时间概念

在通信通道的性能方面,可以使用计算机网络上的通信的延迟、带宽和抖动有关的性能特征。

性能指标 说明
延迟 从一个进程开始发送消息到另一个进程开始接收消息之间的间隔时间
带宽 在给定时间内网络能传递的信息总量,当大量通信通道使用同一个网络时,它们就不得不共享可用的带宽
抖动 传递一系列消息所花费的时间的变化值,与多媒体数据有关

其中延迟由以下上述 4 种时延相加计算得出,在总时延中究竟是哪一种时延占主导地位,必须具体分析才能得知。

在时钟和时序方面,分布式系统中的每台计算机有自己的内部时钟,本地进程用这个时钟获得当前时间值。漂移率指的是计算机时钟偏离绝对参考时钟的比率,由于计算机时钟和绝对时间之间有偏移,两个进程各自的本地时钟也会提供不同的时间值。所以很难对进程执行、消息传递或时钟漂移所花的时间设置时间限制,基于对时间的假设严格与否,分别对应了同步分布式系统和异步分布式系统。同步分布式系统满足以下三个约束,这种系统是能够被构造出来的,也就是要求进程用已知的资源需求完成任务,这些资源需求保证有足够的处理器周期和网络能力,并为进程提供漂移率在一定范围内的时钟。

  • 进程执行每一步的时间有一个上限和下限的约束;
  • 通过通道传递的每个消息将在一个已知的时间范围内接收到;
  • 每个进程有一个本地时钟,与实际时间的偏移率在一个已知的范围内。

异步分布式系统是对进程执行速度、消息传递延迟、时钟漂移率这 3 个因素没有限制的系统,也就是对执行的时间间隔没有任何假设。因为进程需要共享处理器,而通信通道需要共享网络,所以实际的分布式系统经常是异步的。因为在一个分布式系统中时钟不能精确同步,需要使用逻辑时间模型为运行于不同计算机上的进程的事件提供顺序。逻辑时间给每个事件赋予一个与它的逻辑顺序相对应的数字,这样后发生的事件的数字比早发生的事件的数字大。

故障模型

在分布式系统中进程和通信通道都有可能出故障,故障模型定义了故障可能发生的方式,以便理解故障所产生的影响。遗漏故障类错误指的是进程或通信通道不能完成它应该做的动作。

遗漏故障 说明
进程遗漏故障 主要是进程崩溃,当这个进程不能对调用消息进行应答是,在同步系统中可以使用超时来检测,异步系统中的超时只能表明进程没有响应
通信遗漏故障 在发送进程和外发消息缓冲区之间的消息丢失称为发送遗漏故障,在接收消息缓冲区和接收进程之间的消息丢失称为接收遗漏故障,在两者之间的消息丢失称为通道遗漏故障

随机故障是可能出现的最坏的故障,此时可能发生任何错误。进程的随机故障是指进程随机地省略要做的处理步骤或执行一些不需要的处理步骤,它不能通过查看进程是否应答调用来检测。通信通道也会出现随机故障,但通信软件能识别这类故障并拒绝出错的消息(例如序列号或校验和),整体而言通信通道的随机故障很少。

时序故障适用于同步分布式系统,这些故障中的任何一个均可导致在指定时间间隔内对客户没有响应。在异步分布式系统中,一个负载过重的服务器的响应时间可能很长,但不能说它有时序故障。实时操作系统是以提供时序保证为目的而设计的,但这种系统在设计上很复杂,大多数通用的操作系统不能满足实时约束。

分布式系统中的每个组件通常是基于其他一组组件构造的,因此利用存在故障的组件构造可靠的服务是可能的,一个服务通过隐藏故障或者将故障转换成一个更能接受的故障类型来屏蔽故障。对于一对一通信也是如此,构造一个能屏蔽某些故障的通信服务需要保证有效性和完整性:

  • 有效性:外发消息缓冲区中的任何消息最终能传递到接收消息缓冲区;
  • 完整性:接收到的消息与发送的消息一致,没有消息被传递两次。

安全模型

通过保证进程和用于进程交互的通道的安全,以及保护所封装的对象免遭未授权访问,可实现分布式系统的安全。保护对象可由不同的用户按不同的方式使用,这就需要将每个调用和每个结果均与对应的授权方相关联,一个授权方称为一个主体(principal)。一个主体可以是一个用户或进程,服务器负责验证每个调用的主体的身份,检查它们是否有足够的访问权限完成操作,如果没有权限就拒绝它们的请求。客户可以检查服务器的主体身份,以确保结果来自所请求的服务器。
进程通过发送消息进行交互,因为使用的网络和通信服务是开放的,所以这些消息很容易于受到攻击。为了给安全威胁建模,假定敌人能给任何进程发送任何消息,并读取或复制一对进程之间的任何消息。这些敌人可能来自合法或以非授权方式连接到网络的计算机,带来的威胁包括对进程的威胁和对通信通道的威胁。

安全威胁 说明
对进程的威胁 用于处理到达的请求的进程未必能确定发送方的身份
对通信通道的威胁 敌人在网络和网关上行进时能复制、改变或插人消息,会对信息的私密性和完整性构成威胁
拒绝服务 敌人通过超量地、无意义地调用服务或在网络上进行消息传送,干扰授权用户的活动,导致物理资源的过载
移动代码 来自其他地方的程序代码可能带有恶意攻击的意图,在进程接收和执行时对系统进行破坏

安全通道是基于密码学和认证的,因此利用安全通道可解除这些威胁。

安全系统技术 说明
共享秘钥 假设一对进程共享一个秘钥,如果交换的消息包括证明发送方共享秘密的秘钥就能实现确认。
密码学 密码学是保证消息安全的科学,加密是将消息编码以隐藏其内容的过程。现代密码学基于使用密钥的加密算法来传输数据,只能用相应的解密密钥恢复。
认证 在消息中包含加密部分,包含足够的消息内容以保证它的真实性。

利用加密和认证构造安全通道,作为已有的通信服务层之上的服务层。安全通道是连接一对进程的通信通道,每个进程代表一个主体。安全通道具备以下特性:

  • 每个进程确切知道其他正在执行的进程所代表的主体身份;
  • 确保在其上传送的数据的私密性和完整性;
  • 每个消息包括一个物理的或逻辑的时间戳以防消息被重放或重排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/07033027.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

IDEA中数据库连接

刚才打开reggie外卖准备运行,发现报错,看报错信息可能是数据库问题 然后打开侧边栏数据库,发现还真没有连接数据库,我还发现,我前几天新建的数据库没有了,用的reggie这个名字 一通捣鼓,我新建数据库的时候还想再把名字写成reggie,但是从下图这个位置一加上reggie,测试…

二进制文件和符号文件(PDB)如何校验是否匹配

二进制文件和符号文件(PDB)如何校验是否匹配 1. 静态检查 windbg 调试工具包中有一个工具symchk.exe, 选项很多, 下面一个简单的用法可以检查一个 test.exe能不能找到与它匹配的PDB:这是成功的情形. 下面来个失败的作为对比: 2. 如果已经在windbg内部, 可以通过下面的命令检…

五、指针

第05章_指针指针是 C 语言最重要的概念之一,也是最难理解的概念之一。 指针是C语言的精髓,要想掌握C语言就需要深入地了解指针。 指针类型在考研中用得最多的地方,就是和结构体结合起来构造结点(如链表的结点、二叉树的结点等)。 本章专题脉络1、指针的理解与定义 1.1 变量的…

[极客大挑战 2019]LoveSQL(杂谈)

开启环境以后注意到有两个框,方向确定是sql,这样的话先试试万能密码好了: 用户名:1 or 1=1# 密码:#随意输入就好 出来了一串乱码,尝试解码以后发现什么都不是,接下来尝试不断注入: /check.php?username=admin order by 3%23&password=1 存在 /check.php?user…

Linux系统的七个运行级别

Linux系统有7个运行级别(runlevel):运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录 运行级别2:多用户状态(没有NFS) 运行级别3:完全的多用户状态(有NFS),登录后进入控制台命令行…

系统开放相应接口给第三方平台

SpringSecurity放行接口,匿名访问@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter {/*** 自定义用户认证逻辑*/@Autowiredprivate UserDetailsService userDetailsService;/**…