1. Overview
系统模型包括3个重要且互补的概念:
- 物理模型:考虑组成系统的设备和它们的互联,不涉及特定技术细节
- 体系结构模型:常见有C/S模型,对等模型
- 基础模型:采用抽象观点描述大多数分布式系统面临的单个问题的解决方案
2. 物理模型
从计算机和所用网络技术细节中抽象出来的分布式底层硬件元素表示
最小物理模型:一组可扩展的计算机结点,可通过计算机网络相互链接进行所需消息传递
当代分布式系统趋势(传统的静态、分立、自治基础上):
- 移动计算发展,位置会移动
- 无处不在计算的出现导致结点转向了嵌入式环境
- 云计算,特别是集群体系结构的出现导致了从自治结点完成给定任务转向一组结点提供给定服务
系统的分布式系统:定义为一个复杂的系统,它由一系列子系统组成,这些子系统本身也是系统,它们共同完成一个或多个给定任务
3. 体系结构模型
用独立指定的组件以及组件间的关系来表示。
主要关系可靠性、可管理性、适应性、性价比。
3.1. 体系结构元素
###a) 通信实体
-
面向系统的实体:
通信实体通常是进程(Process),但不全都是,如:
- 原始环境里,可能不支持进程的抽象(如传感器网络),因此通信实体的结点
- 大多数分布式系统环境中,用线程补充进程,通信末端是线程
-
面向问题的实体,如:
- 对象:对分布式系统中,使用OO思想。一个计算由若干个交互的对象组成,可通过接口被访问,并可用接口定义语言对一个对象的方法进行规约
- 组件:类似于对象,也可以通过接口访问,区别在于,它不仅指定其提供的接口,而且给出了其它组件/接口的假设,其它组件/接口是组件完成它的功能必须由的,即:组件使依赖显式化
- Web Service:代表开放分布式系统的第三种重要范型,其与对象和组件紧密相关,也采取行为封装和接口访问的方法。但它本质上被继承到万维网的,采用基于Web的技术,并且它可以被看成完整的服务,可以实现业务到业务的继承,实现松耦合
b) 通信范型
-
进程间通信:包括消息传递、直接访问互联网协议提供的API(如Socket)和多播通信
-
远程调用:最常见的通信范型,覆盖通信实体之间基于双向交换的技术,包括远程操作、远程过程(RPC)/方法(RMI)
- 请求-应答协议:在底层消息传递服务上,用于支持C/S计算。长涉及一对消息的交换,如HTTP协议
- RPC(远程过程调用):在RPC中,远程计算机的进程中的过程能被调用,好像它们在本地地址空间的过程一样。其隐藏了分布式的重要方面,包括数据的编码/解码、消息传递和保持过程调用所要求的语义。在C/S计算中,服务端通过一个服务接口提供一套操作,当这些操作本地可用时,客户端可直接调用这些操作
- RMI(远程方法调用):类似RPC,但它应用于分布式对象的环境,它能让一个发起调用的对象调用一个远程对象中的方法。与RPC一样,底层细节也对用户隐藏。此外RMI还有其它的功能,也从OO语言的紧密结合中得到更多的好处
上述共同点:
- 代表发送者和接收者的双向关系(发送者显示发送消息/调用到接收者,接收者要了解发送者的标识)
- 双方大部分情况下必须同时存在
-
间接通信:有些技术支持间接通信(第三者)以解耦合(类比远程调用):
-
- 空间解耦(发送者不需知道要发给谁)
- 时间解耦(双方不需同时存在)
其关键技术包括:
- 组通信:一对多的多方通信范型,依赖组抽象(组标识符)
- 发布-订阅系统:归类于信息分发系统,生产者为消费者发布消费者感兴趣的信息。关键特征是提供一个中间服务,确保生产者的消息被路由到所需这个消息的消费者
- 消息队列:提供点对点服务,生产者进程发送消息到指定队列,消费者进程从队列中获取消息/被通知队列有消息到达
- 元组空间:进程能把任意结构化数据(即元组)放到一个持久元组空间,其它进程可指定感兴趣的模式在该空间读/删除元祖。读操作者和写操作者不用同时存在,因为空间是持久化的。(也叫做生成通信)
- 分布式共享内存:用于支持在不共享物理内存的进程之间共享数据。它提供给程序员支持读/写(共享)的数据结构抽象,好像这些数据在自己本地地址空间一样,提供了高层的分布透明性。
c) 结构风格
-
C/S:最常用的体系结构,2个角色:客户端、服务端
-
对等:涉及一项任务的所有进程扮演相同角色,作为对等方进行协作交互,所有的参与进程运行相同的程序,提供相同的接口集合。
应用由大量运行在独立结点的对等进程,大量数据对象被共享,单个结点只保存一小部分数据,访问对象的存储、处理和通信负载被分布到多个计算机和网络链接中,每个对象在几个结点中复制以便分散负载,并在某个结点挂掉后仍能正常工作。
d) 放置实体元素策略
-
将服务映射到多个服务器
服务可是现在多个服务器进程上,必要时进行交互以便为客户进程提供服务。分布策略有:
- 将服务基于的对象集分区,如何将分区分布到各个服务器上
- 在几个主机维护复制的对象集(冗余)
-
缓存
用于存储最近使用的数据对象,缓存对象比对象本身更加靠近客户
应用:Web浏览器缓存(通过HTTP的
cache-control
),Web代理服务器缓存(为客户端提供共享的Web资源) -
移动代码
客户端从服务端下载可执行代码,如何在客户端中执行,好处是能提供良好的交互响应(不受网络影响),坏处是安全问题。例子有applet。
-
移动代理
它是一个可运行的程序,从一台计算机移动到网络上的另一台计算机,代表某人完成任务,返回结果。其安全性也是一个问题,且自身也是很脆弱的,所以适用性有限。
3.2. 体系结构模式
a) 分层体系结构
一个复杂系统被分成若干层,每层利用下层提供的服务,每层之间不知道实现的细节。
其等同于把服务进行垂直组织,一种分法可为(从下往上):Hardware -> OS -> Middleware -> App & Service,前2个可称为Platform
b) 层次化体系结构
与分层体系互补,是一项组织给定的某一层的功能的技术。与App & Service层最相关,但也可以应用到分布式体系结构的所有层。
例子有:MVC架构(表示层一组结点,应用逻辑层一组结点,数据逻辑层一组结点,以组织App & Service层)
c) 瘦客户
分布式计算的趋势:将复杂的计算从用户终端移向互联网服务。这导致了瘦客户的概念兴起。
瘦客户:一个软件层,在执行一个应用/访问远程服务时,仅由该软件层提供一个图形本地用户界面。
好处:能极大增加简单本地设备;缺点:频繁图形交互中,瘦客户和应用进程的延迟可能不可接受
虚拟网络计算(VNC):概念上,即为远程访问提供图形界面。VNC客户通过VNC协议与VNC服务器交互,协议在原语层次上操作,基于帧缓冲区。
d) 其它模式
-
代理(Proxy):用于支持RPC/RMI的位置透明性,代理提供与远程对象一样的接口,让程序员无需了解交互分布式的特性,代理也用于封装其它功能
-
Web服务的业务代理(Brokerage):由服务提供商、服务请求者、服务代理(提供与请求的服务一致的服务)3部分组成,在分布式系统中被多次使用,如RMI注册服务,CORBA命名服务
graph LR; Request --> Proxy Proxy --> Request Request --> Provider Provider --> Request Provider --> Proxy
-
反射(Reflection):用于支持内省(系统动态发现)和从中调停(动态修改结构和行为)。一个反射系统中,标准的服务接口可供使用,但底下的元层接口也可以提供组件及组件参数的访问。
4. 基于基本特性的模型
4.1. 交互模型
分布式算法——定义了组成系统每个进程所采取的步骤,包括消息的传递。很难描述,因为不可预测进程和消息传递的状态。
分布式系统中,影响进程交互的2个重要因素:
- 通信性能:通常是一个限制特性
- 全局时间概念:不可能维护
a) 通信通道的性能
通信通道实现方式有多种,如网络流、简单消息传递等。
性能指标有3种:
- 延迟:一个进程开始发送消息到另一个进程开始接收消息之间的间隔
- 带宽:给定时间内网络能传递的信息总量
- 抖动:传递一系列消息花费时间的变化值
b) 计算机时钟与时序事件
每台计算机有自己的内部时钟,本地进程以这个时钟获取时间值,在不同计算机上运行的2个进程能将时间戳与它们的事件关联起来。
但不同计算机的2个进程同时读它们的时钟,值会不同,因为会有时钟偏移,这个偏移互不相同。因此有时候,需要时钟校正。
时钟漂移率:计算机时钟偏离绝对参考时钟的比率
c) 交互模型2个变体
同步分布式系统——对时间有严格假设
满足一下约束:
- 进程执行时间有上限和下限
- 通过通道传递的消息必须在一个已知时间范围内收到
- 每个进程的本地时钟与实际时间的偏移率在一个已知范围内
它要求进程用已知的资源完成任务,资源保证有足够的处理器周期和网络能力,还要为进程提供漂移率在一定范围内的时钟
异步分布式系统——对时间没有假设
对时间间隔没有任何假设,与互联网一致(互联网中,服务器或网络负载没有内在约束)。
即使有时间假设,有些问题也能得到解决(如Web虽然不能在时间限制内提供响应,但浏览器的涉及可以做到让用户在等待时做其他事情),对异步分布式系统有效的解决方案对同步系统也有效。
实际的分布式系统常是异步的,因为进程要共享处理器(任何一个进程的性能得不到保证),通信通道需要共享网络(网络性能得不到保证)。
d) 事件排序
分布式系统中,时钟是不能精确同步的,即不能维护一个全局时间,所以事件的顺序可能会错乱。所以有了逻辑时间概念。
例:X发送邮件mail,Y和Z回复该邮件re:mail。但是由于消息的延迟,用户A可能看到的顺序是Z::re:mail,X::mail,Y::re:mail(因为X, Y, Z的本地时间有各自不同的偏移,各个本地时间是不同步的)。
逻辑时间模型:为分布式系统中运行于不同计算机上的进程时间提供顺序,且不需要求助于时钟
4.2. 故障模型
进程和通信通道都有可能出现故障。故障模型定义了故障可能发送的方式,大致分为3类:
- 遗漏故障
- 随机故障
- 时许故障
a) 遗漏故障
指进程和通信通道不能完成它应该做的动作,是良性故障
-
进程遗漏故障
即崩溃——进程停止。
一种检测方式是:进程一再地不能对调用消息进行应答。但这依赖超时的使用。异步系统中,超时仅代表没有响应,没有响应不代表是崩溃——可能是执行速度慢,或者消息没有到达,当然也可能是崩溃了。
若其它进程能确切检测到进程崩溃,则这个崩溃叫做故障-停止(同步系统中,若确保消息已被传递,则可用超时机制;在异步系统下,故障检测比较困难,在故障面前达成协定也很困难)
-
通信遗漏故障
即丢失消息,通信通道不能将消息从发送者缓冲区传递到接收者缓冲区。
分为以下3类:
- 发送遗漏故障:发送进程到发送缓冲区的消息丢失
- 接收遗漏故障:接收缓冲区到接受进程的消息丢失
- 通道遗漏故障:两缓冲区之间的消息丢失
b) 随机故障(拜占庭式)
用于描述最坏的故障,可能发生任何类型的错误。
不是良性的。
- 进程随机故障:不能用应答调用来检测(因为会随机遗漏应答)
- 通信通道故障:如传递损坏/不存在/重传的信息等,故障很少
c) 时序故障
适用于同步系统中,是良性的。
- 进程:
- 时钟故障:进程本地时钟的漂移率超限
- 性能故障:进程超过了两个进程步之间的间隔范围
- 通道:
- 性能故障:消息传递了比规定范围更长的时间
d) 故障屏蔽
要了解组件故障类型,有利于设计新服务时屏蔽它所依赖组件的故障。
方法例子有:
- 隐藏故障
- 消息重传协议
- 利用复制冗余进行故障屏蔽
- 进程崩溃时,替换崩溃进程并根据原进程的持久化信息恢复内存信息
- 将故障转换成一个更能接受的故障类型来屏蔽故障,如
- 校验和的使用(屏蔽损坏消息,将随机故障转化为遗漏故障)
e) 一对一通信的可靠性
包含有效性和完整性2个角度。
- 有效性:外发缓冲区的任何信息最终能传递到接收缓冲区
- 完整性:接收的消息于发送的消息一致,且消息没有传递2次
- 对于能重发消息且不拒绝到达多次消息的协议——检测是否到达多次,可给协议添加附加序号
- 对于伪造、重放、篡改消息——要采取其它安全措施
4.3. 安全模型
安全模型的基础:通过保证进程、交互的通道安全以及保护锁封装对象免遭未授权访问可实现分布式系统的安全
a) 保护对象
访问权限指定了谁允许执行一个对象的操作
在模型中,必须包括访问权限受益人的用户,并将每个调用和每个结果均与对于的授权方相关联,授权方称为主体(可为用户、进程等)
服务器要负责验证每个调用主题的身份,进行权限检查
b) 保护进程以及它们的交互
敌人:
- 对进程的威胁:不能确定发送方的身份(即可被伪造),包括客户和服务器。
- 对通信通道的威胁:敌人能在网络/网关上进行访问、复制、改变、插入、重放消息,对学习私密性和完整性造成威胁,对系统完整性也会构成威胁
解除安全威胁
- 使用密码学并共享秘密,秘密不能泄漏给其它人
- 对消息进行认证
- 构造安全通道,其作为已有的通信服务层上的服务层(例如VPN,SSL)。安全通道是连接一堆进程的通信通道,有下列特性:
- 每个进程确切知道其它执行的进程的身份
- 确保传输的数据的私密性和完整性
- 每个消息包括一个物理或逻辑的时间戳,以防止重放、重排序攻击
其它威胁
- DoS:敌人超量调用服务/在网络上进行消息传输,导致物理资源耗尽
- 移动代码:即移动代码中带有恶意代码的攻击