分布式系统复习

1 分布式系统模型

1.1 什么是分布式系统,分布式系统的目标

定义:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。

目标:

使资源可访问
透明性
开放性
可扩展性

1.2 为什么要分布式
经济性微处理器能提供比大型机更好的性价比
速度分布式系统能提供比大型机更强的计算能力
固有的分布性有一些应用包含空间上分离的机器
可靠性当某台机器崩溃时,整个系统仍能正常工作
可扩展性计算能力逐步增加
1.3 分布式系统透明性和开放性的含义

透明性
定义:

将分布式系统中的进程和资源实际上在多台计算机上分布这样一个事实隐藏起来,如果一个分布式系统能够在用户和应用程序面前呈现为单个计算机系统,这样的分布式系统就称为是透明的。

类型:

透明性说明
访问隐藏数据表示形式的不同以及资源访问访问的不同
位置隐藏资源所在位置
迁移隐藏资源是否移动到另一个位置
重定位隐藏资源是否在使用过程中移动到另一个位置
复制隐藏是否对资源进行复制
并发隐藏资源是否由相互竞争用户共享
故障隐藏资源的故障和恢复

透明度

我们不可能在所有情况下把所有分布情况都对用户屏蔽地严严实实的。这样很多时候会影响系统的性能,因此我们需要在高度的透明性和系统性能之间权衡得到折中的方案

在这里插入图片描述
开放性

一个开放的分布式系统,它根据一系列准则来提供服务,这些准则描述了所提供服务的语法和语义。在分布式系统中,服务通常是通过接口指定的,而接口一般是通过接口定义语言(IDL)来描述的。

有能力和其他系统进行服务上的交互,不管底层环境:

  • 系统应该符合良好定义的接口
  • 系统应该支持应用的可移植性
  • 系统应该易于互操作

至少使分布式系统独立于底层环境的异构性

1.4 分布式操作系统、网络操作系统和基于中间件的系统

分布式操作系统

配置在分布式系统上的操作系统,能够直接对分布式系统中的各种资源进行动态分配,并能有效地控制和协调分布式系统中各任务的并行执行,同时还向用户提供了一个方便的、透明的使用整个分布式系统的界面。

网络操作系统

是在网络环境下实现对网络资源的管理和控制的操作系统,是用户与网络资源之间的接口。网络操作系统是建立在独立的操作系统之上,为网络用户提供使用网络系统资源的桥梁。在多个用户争用系统资源时,网络操作系统进行资源调剂管理,它依靠各个独立的计算机操作系统对所属资源进行管理,协调和管理网络用户进程或程序与联机操作系统进行交互。

基于中间件的系统

系统名称系统描述主要目标
DOS紧耦合,管理多处理器系统和同构式多计算机系统隐藏和管理硬件资源
NOS松耦合,管理异构式多计算机系统向远程客户提供本地服务
MIddleware位于NOS通用服务实现层之上的附加层,屏蔽了底层的异构性和具体的通信协议细节,为应用程序员提供方便的编程模型。提供分布透明性
1.5 分布式系统的类型
  1. 分布式计算系统
  2. 分布式信息系统
  3. 分布式普适系统
1.6 如何理解分布式系统中的策略与机制
  • 策略:主要定义一些功能完成的程度及要求,如客户端缓存数据时需要什么程度的一致性;下载代码可以执行的操作;通信时需要什么程度的安全度。
  • 机制:能提供或不能提供什么功能,如允许动态设置缓存策略,支持对移动代码的不同级别的信任

我们需要将策略与机制相分离,理想上,分布式系统仅提供机制。

2 分布式系统架构

2.1 分布式系统架构风格
  1. 组织成逻辑上不同的组件,并在不同机器上进行分发
    分层+基于对象
    在这里插入图片描述
  2. 空间(匿名)和时间(异步)的解耦过程导致了其他样式
    基于事件(订阅发布)+共享数据空间
    在这里插入图片描述
2.2分布式系统组织形式
  1. 集中式体系结构
    在这里插入图片描述
    请求-响应 模型

  2. 非集中式体系结构
    结构化 P2P 结构:节点组织分布遵循特定分布式数据结构
    非结构化 P2P 结构:节点随机选择邻节点
    混合 P2P 结构:一些节点是有序组织的,另一些是随机选取的

  3. 混合体系结构
    服务器-客户端和 P2P 结合
    边缘服务器架构

2.3 客户—服务器模型和对等模型

客户-服务器模式

  • Multiple-Client/Single Server
    服务器结点形成了瓶颈
    服务器会形成单点故障
    系统扩展十分困难
  • Multiple-Client/Multiple Servers
    单主机多服务器进程
    将对象集分区到多个服务器,如Web服务器
    多主机上维护复制对象集。
    代理:客户端通过代理服务器和服务器进行交互而不是直接交互
    小程序:从服务器上将小程序源码下载到本地然后直接本地和小程序交互。
  • Multitiered Architectures
    Two-tiered: client/single server configuration
    Thin Client: 在本地计算机上执行图形用户界面,而应用程序在计算服务器上执行(X11
    server,Palm pilots,Mobile Phones)
    Fat Client: 比如Web网站 ,当用户浏览Web网站的时候,客户端会慢慢地在本地硬盘构建一
    个巨大的缓存,其中存储了最近浏览过的Web网页。
    Three-tiered (服务器当做客户端来使用,如事务处理。可以理解为我们常说的三层架
    构。)

对等模型
选择特定节点来执行特定工作

  • 结点存储一个索引(用以查询)
  • 结点监视整个网络的状态。
  • 结点有能力设置连接。
    在这里插入图片描述
2.4 分布式系统组织为中间件

在这里插入图片描述
在许多情况下,分布式系统/应用程序是根据特定的体系结构样式开发的。在所有情况下,所选择的样
式可能不是最优的→需要(动态地)调整中间件的行为。中间件的一个重要目的是提供一定程度的透明
,也就是一定程度上向应用程序隐藏数据处理和控制的分布性。

3 进程与线程

3.1 进程与线程

进程:进程是正在运行的程序的实例,是系统进行资源分配和调度的一个独立单位。
线程:线程是CPU调度和分派的基本单位。

  • 同:都能并发
  • 异:线程是轻量级的进程,一个进程包含多个线程,线程之间共享数据空间,进程之间不共享代码和数据空间。进程是分配资源的基本单位,而线程是独立运行和独立调度的基本单位。线程切换比进程效率高。
3.2 代码迁移
  1. 代码段:包含实际代码;
  2. 数据段:包含状态;
  3. 执行状态:包含执行目标代码的进程上下文。

强迁移 vs 弱迁移

  • 强迁移:移动组件,包括执行状态
    迁移:将整个对象从一台计算机移动到另一台计算机
    克隆:启动克隆,并将其设置为相同的执行状态
  • 弱迁移:只移动代码段和数据段,相对简单,尤其是代码是可移植的;区分代码传送(push)和代码获取(pull)。

在这里插入图片描述

4 通信

4.1 通信的类型
  1. 非持久性通信:通信系统只有在发送和接收应用程序正在运行时才存储消息。由于传输中断或因为
    接收方当前不在活动状态,中间件就不能传送消息了,而是把它丢弃掉。
  2. 持久性通信:提交传输的消息一直由通信中间件存储,直到该消息被传送给接收方为止。例如电子邮件系统
  3. 同步通信:发送方将被阻塞,直到知道其请求被接受以后。
  4. 异步通信:发送方在提交要传输的消息后立即往下进行。这意味着消息在提交后立即交由中间件
    (临时)存储起来。
4.2 远程过程调用 RPC
4.2.1 RPC 的工作过程
4.2.2 故障处理
  1. 客户端无法定位服务器
    举例:服务器关闭;当客户机使用旧版本的客户机存根编译时,服务器会进化(安装新版本的接口并生成新存根)
    解决方案:使用特殊代码作为过程的返回值以指示失败;使错误引发异常或信号

  2. 客户端到服务端的请求消息丢失
    解决方案:内核在发送消息时启动计时器:
    如果计时器在应答或ACK返回之前过期:内核重新传输
    如果消息真的丢失:服务器不会区分原始传输和重新传输 “一切正常”
    如果许多请求丢失:Kernel放弃并错误地得出服务器已关闭的结论 我们返回到“找不
    到服务器”

  3. 服务器端到客户端的响应消息丢失
    解决方案:内核在发送消息时启动计时器:
    如果计时器在回复前过期:重新传输请求(不能确定为什么没有回复,是回复或者请求丢失了还是服务器太慢了?)
    如果服务器仅仅是慢:那么进程会被执行很多次(如果请求不是幂等的,例如汇款)
    解决方法:客户端的内核为请求分配序列号,以允许服务器的内核区分重传和原始的重传

  4. 服务器在接受一个请求后崩溃
    等待服务器重新启动,然后重试该操作。保证RPC至少执行了一次(至少一次语义)
    立即放弃并报告失败。保证RPC最多执行一次(最多执行一次语义)
    客户得不到帮助。不保证任何内容(RPC可能在从0到大量的范围内执行)。易于实施

  5. 客户端在发送一个请求后崩溃
    解决方案
    消灭:检查日志,杀死孤儿;
    轮回:客户端重启时,广播新epoch到来时,终止远程计算;
    温柔轮回:找不到远程计算的所有者的计算被终止;
    过期:

4.2.3 动态绑定

客户端定位服务器的方式有两种:

  • 将服务器地址写死在客户端硬件内,速度快但是不灵活。
  • 动态绑定

在这里插入图片描述
优势:

  • 灵活
  • 可以支持支持同一接口的多个服务器,例如
    Binder可以将客户机随机分布在服务器上,以便均匀加载
    Binder可以定期轮询服务器,自动注销没有响应的服务器,以达到一定程度的容错性
    Binder有助于身份验证:例如,服务器指定一个可以使用它的用户列表;活页夹将拒绝告诉列表中没有服务器的用户
    Binder可以验证客户端和服务器使用的是相同版本的接口

缺点:

  • 导出/导入接口的额外开销需要花费时间
  • 绑定器可能成为大型分布式系统中的一个瓶颈
4.2 基于消息的通信
4.2.1 持久性和非持久性

见上

4.2.2 同步与异步

见上

4.2.3 流数据

数据流是支持等时数据传输的面向连接的通信设施。

5 同步与资源管理

5.1 同步问题
  • 分布式系统中进程之间的协作与同步
  • 在单CPU系统中,利用信号量等方法解决了关键区域、互斥等同步问题。
  • 这些方法在分布式系统中是不起作用的,因为单CPU系统隐含地依赖共享内存的存在。
5.2 时钟同步问题
  • 在一个集中的系统中,时间是明确的:进程通过对内核发出系统调用来获取时间。
  • 在一个分布式系统中,按时达成协议不是小事!

逻辑时钟与物理时钟

  • 对于时钟不仅必须相同,而且不能偏离实时的算法,我们称之为物理时钟。
  • 对于只有内部时钟一致性才重要的算法(而不是时钟是否接近实时),我们称之为逻辑时钟。

时钟同步算法

5.3 逻辑时钟
5.3.1 Lamport 算法

在这里插入图片描述

5.3.2 向量时钟

在这里插入图片描述
在这里插入图片描述

5.4 分布式系统中的互斥访问

集中互斥
该方法仿照单处理器系统,选举一个进程作为协作者,无论何时一个进程要访问共享资源,它都要向协
作者发送一个请求消息,说明它想要访问哪个资源并请求准许,如果当前没有其他进程访问资源,协作
者就发送准许的应答消息。

优势:

  • 显然它满足了集中互斥
  • 很公平(请求是按他们接受的顺序被满足的)
  • 没有饥饿现象(没有进程会一直等待)
  • 很容易实现(只需要三个消息,request,grant和release)

缺点:

  • 协作者:单点failure,也是性能的瓶颈之处
  • 如果进程在发出请求后通常会阻塞,则它们无法区分死掉的协调器和“拒绝的权限”

分布式算法
当进程想要进入临界区去访问一个资源的时候:

  • 构建一个消息:{临界区资源的名称,进程号,当前时间}
  • 发送这个消息给所有的进程(假设消息传递是可靠的)

当一个进程从其他进程接收到一个请求消息后:

  • 如果接收进程不在该临界区内而且不想进入该临界区,就恢复一个OK
  • 如果接收进程已经在临界区内,则不会回复,把这个消息储存在队列里
  • 如果接收进程想要进入该临界区但还没有进入,它会将消息中的时间戳和包含在它发送给其他进程的消息中的时间戳进行比对:时间戳最早的那个进程获胜,如果收到消息的时间戳比较早,接受者就回复一个OK,如果自己的时间戳比较早,就将收到的请求放入队列中,且不发送任何消息。

问题:

  • 单点故障已被n点故障所取代:如果任何进程崩溃,它将无法响应请求。此静默将被(错误地)解释为拒绝许可,从而阻止所有进程进入所有关键区域的所有后续尝试
  • 如果可靠的多播不可用,则每个进程都必须维护组成员列表本身,包括进入组,离开组合崩溃的进程。
  • 比集中式算法更慢、更复杂、更昂贵、更不健壮!

令牌环算法
在逻辑环中组织进程,并让令牌在它们之间传递。持有令牌的人可以进入关键区域(如果它想的话)。
如果令牌丢失了,则它必须重新生成令牌,但检测令牌丢失时很困难的,一小时没有发现令牌并不意味
着它就丢失了,也许某个进程还在使用它。假如有某个进程崩溃,我们要求每个进程在收到令牌后发出
确认信息,那么当一个进程的将令牌传递到它临近进程但没有得到回复,就会检测到该进程奔溃,此
时,就可以将崩溃进程从组中删除,将令牌传递给崩溃进程的下一个。

5.5 分布式系统中的选举机制

算法要求某些进程充当协作者。问题是如何动态地选择这个协作者的过程。

1. 欺负式算法
每个进程都有一个相关的优先级(权重)。应始终选举最优先的进程为协作者。我们如何找到最权重最大的进程?

  • 任何进程都可以通过向所有其他进程发送选举消息来启动选举(假设你不知道其他进程的权重)
  • 如果一个进程 P heavy \bm P_{\text{heavy}} Pheavy 接收到了一个进程 P light \bm P_{\text{light}} Plight 的选举消息 ,它就会发送一个"take-over"的消息给 P light \bm P_{\text{light}} Plight,表明 P light \bm P_{\text{light}} Plight 出局了。
  • 如果一个进程没有收到"take-over"的回复消息,那么它就赢得了选举,并且发送一个成功的消息
    给其它所有进程

2. 环算法
过程优先级是通过将过程组织成(逻辑)环来获得的。应选举具有最高优先权的进程为协作者。

  • 任何进程都可以通过向其继任者发送选举消息来启动选举。如果一个继任者失败,消息将传递给下一个继任者
  • 如果传递了消息,则发送者将自己添加到列表中。当它回到发起者身边时,每个人都有机会让人知道它的存在
  • 发起程序在环周围发送一个协作者消息,其中包含所有活动进程的列表。最优先的人当选为协调
    员。

6 复制与一致性

6.1 复制的优势与不足

优势:

  • 可靠性
  • 性能

不足:

  • 透明度
  • 一致性问题
6.2 数据一致性模型

一致性模型
一致性模型实质上是进程和数据存储之间的一个约定,即,如果进程同意遵守某些规则,那么数据存储将正常运行。

以数据为中心的一致性模型

严格一致性

  • 任何read(x)都返回最近一次write(x)的结果相对应的值。依赖于绝对全局时间;
  • 所有写入对所有进程都是即时可见的,并且保持绝对全局时间顺序。但这个没办法在一个分布式系统上实现!

线性一致性
执行的结果应当满足下面的原则:

  • 所有进程的读和写都以某种顺序执行,每个进程的操作都保持指定的顺序
  • 如果 t s o p 1 ( x ) < t s o p 2 ( y ) ts_{op1}(x)<ts_{op2}(y) tsop1(x)<tsop2(y),那么在此序列中 t s o p 1 ( x ) ts_{op1}(x) tsop1(x) 应当先于 t s o p 2 ( x ) ts_{op2}(x) tsop2(x) 发生。这指定交织中的操作顺序与实际实现中操作发生的实际时间一致

然而,这种方式需要根据时间戳进行同步,代价不菲,且仅用于程序的正式验证。

顺序一致性

  • 所有进程对数据项的所有操作可以认为是按照某个顺序进行的,任何进程对这个顺序的观点是一样的。当然这个顺序不一定是物理意义上。
  • 所有进程对写进程顺序统一即可。

因果一致性

  • 所有进程都必须以相同的顺序看到可能与原因相关的写操作。在不同的计算机上,并发写操作可能以不同的顺序看到。
  • 因果一致性的存储并不要求并发的写操作是全局有序的。

FIFO 一致性

  • 由单个进程完成的写入按其发出的顺序被所有其他进程看到,但不同进程的写入可能按不同的顺序被不同的进程看到。

弱一致性

释放一致性

不使用同步操作的一致性模型

一致性描述
Strict所有共享访问的绝对时间顺序很重要
Linearizability所有进程必须以相同的顺序查看所有共享访问。此外,根据(非唯一的)全局时间戳对访问进行排序
Sequential所有进程都以相同的顺序查看所有共享访问。访问未及时排序
Causal所有进程都以相同的顺序查看因果关系相关的共享访问。
FIFO所有进程都按使用顺序查看彼此的写入。来自不同进程的写入可能并不总是按此顺序显示

使用同步操作的一致性模型

一致性描述
Weak只有在同步完成后,共享数据才能被认为是一致的
Release当关键区域退出时,共享数据被保持一致。
Entry当输入关键区域时,与关键区域相关的共享数据保持一致。

以客户为中心的一致性

  • 只关心副本最终是否一致(最终一致)。
  • 只需要保证更新将被传播。

以客户机为中心的一致性:保证单个客户机访问数据存储的一致性

6.3 数据一致性协议实例
6.3.1 基于法定数量的协议

要求客户在读写一个复制的数据项之前向多个服务器提出请求,并获得它们的许可,以确定数据的最新版本。(联系的服务器数量至少是半数加1)也叫基于多数表决的协议。

7 容错

7.1 可信系统特征
  • 可用性
  • 可靠性
  • 安全性
  • 可维护性
7.2 提高系统可信性的途径
  1. 使用冗余掩盖故障
  2. 硬件冗余
  3. 进程冗余
7.3 K容错
  • 如果系统能够经受k个组件的故障并且还能满足规范的要求,就被称为k容错(k fault tolerant)。
  • 在没有拜占庭失败的系统中(fail-silent,失败沉默),具有k+1个组件的系统就足够提供k容错。
  • 在有拜占庭失败的系统中,至少需要2k+1个进程才能获得k容错。
7.4 拜占庭问题
7.5 系统恢复
7.5.1 回退恢复

将系统从当前的错误状态回到先前的正确状态。

7.5.2 前向恢复

当系统进入错误状态时,不是回退到以前的检查点出的状态,而是尝
试从可以继续执行的某点开始把系统带入一个正确的新状态。前向错误恢复机制的关键在于它必须
预先知道会发生什么错误,这样才有可能纠正错误并转到新的状态。

7.6 检查点

讲座

云计算

一种计算能力,提供了计算资源与底层结构之间的抽象,使用户可以通过网络方便的,按需的使用,来对一个共享的资源池进行迅速配置、部署和使用,并且只需要很少的管理和交互。

按需使用

云计算特点:

  • 高可靠性
  • 通用性
  • 按需服务
  • 安全
  • 方便
虚拟化技术

虚拟化使由位于下层的软件模块,将其封装或抽象,提供一个物理或软件的接口,使得上层的软件可以直接运行在这个虚拟的环境上,和运行在原来的环境上一样。

优势:

  • 细粒度资源分布
  • 动态迁移
  • 增加资源利用率

在这里插入图片描述

OpenStack是一个开源的云计算管理平台,主要为了管理:计算、存储、网络三个方面的资源,是IaaS组件,这些资源可以通过OpenStack进行配置分配并提供给上层应用或用户去使用。

边缘计算

利用靠近数据源的边缘地带来完成的运算程序。

优点:

  • 实时响应时间短
  • 减少网络传输量
  • 安全性和隐私性
  • 充分利用智能设备的运算能力

在这里插入图片描述

  • 21
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值