分布式系统复习

1 分布式系统模型

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

定义:html

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

目标:web

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

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}} 接收到了一个进程 P light \bm P_{\text{light}} 的选举消息 ,它就会发送一个"take-over"的消息给 P light \bm P_{\text{light}} ,代表 P light \bm P_{\text{light}} 出局了。
  • 若是一个进程没有收到"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) ,那么在此序列中 t s o p 1 ( x ) ts_{op1}(x) 应当先于 t s o p 2 ( x ) ts_{op2}(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进行配置分配并提供给上层应用或用户去使用。

边缘计算

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

优势:

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

在这里插入图片描述