分布式系统

分布式系统
上一篇主目录 下一篇

【前言】
分布式系统基础


1 分布式系统简介

1.1 分布式系统定义

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。(硬件方面:机器本身是独立的;软件方面:对用户来说他们在与单个系统打交道)

1.2 分布式系统目标

(1)使远程资源可访问
分布式系统的最主要目标是使用户能够方便地访问远程资源,并且以一种受控的方式与其他用户共享这些资源。

(2)透明性:隐藏进程和资源分布在多台计算机上的事实(牺牲效率)

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

(3)开放性
根据一系列准则来提供服务,这些准则描述了所提供服务的语法和语义。

(4)可扩展性
规模扩展:方便的增加资源和用户(限制:集中的服务、数据及算法)
地域扩展:用户和资源相隔距离(限制:通信延迟、不可靠通信)
管理扩展:能跨越多个独立的管理机构(限制:安全问题、收费问题)

1.3 常见分布式系统类型

(1)分布式计算系统:用于高性能计算任务
集群计算系统
底层硬件由类似的工作站或者PC集组成,通过高速局域网紧密相连,每个结点运行相同的操作系统(具有同构性)
网格计算系统
异构的(硬件、操作系统、网络等都不尽相同)系统,把不同计算机的资源集中起来,进行协调工作

(2)分布式信息系统:适用于大型企业或者组织对信息进行管理和事务处理,解决大型企业或组织对大量网络应用、信息的集成和管理。
事务处理系统(分布式数据库应用)
用户看到的是一个完整的数据库,但是数据实际是分布在多个计算机结点上,事务处理系统能提供有效的存取手段来对数据进行处理。事务处理的特征是所有操作要么被完全执行,要么不执行。
企业应用集成:将各个应用集成起来,应用之间可以直接交换信息。

(3)分布式普适系统:移动和嵌入式设备加入到系统中,以便访问信息
①智能家居系统:把家庭中的设备集成为单个系统,能够进行自我配置和
自我管理
②电子健保系统:用于日常监视个人健康程度,在需要的时候与医生联系

2 体系结构

系统体系结构:集中式体系结构(客户/服务器模型–CS)、非集中式体系结构(点对点系统—P2P)、混合体系结构

2.1 集中式体系结构

客户-服务器模型(Client-server model)

  • Server:服务器是实现特定服务的进程
  • Client:是通过往服务器发送请求来请求服务,然后等待服务器回复的进程

这种客户—服务器交互又称为请求—回复行为。Client和Server分别扮演服务请求者和服务提供者。服务器监听请求,客户提出请求、接收响应;服务器等待请求,客户等待响应。
应用分层(逻辑三层):用户接口层、处理层、数据层
多层体系结构:最简单 的组织结构是只有两种类型的机器:
(1)客户机,只含有实现(部分)用户接口的程序
(2)服务器,包含了其余的部分,即实现处理和数据层的程序
这就是(物理)两层体系结构
有时候服务器可能需要起到一个客户的作用,这就出现(物理)三层体系接结构。(用户接口、应用程序服务器、数据库服务器)

客户机器的主要任务是让个人用户和远程服务器相交互。有两种方式支持这种交互。第一,对每种远程服务,客户机都有一个独立的部分来通过网络联系这种服务。第二种方式是通过提供一个方便的用户接口来对远程服务直接访问,从效果上,客户机只是作为终端,不需要本地存储。
(1)提供用户接口
(2)和服务器进行交互
(3)执行部分处理工作(ATM机、机顶盒、条码阅读器等)
(4)提供分布式透明性

服务器
(1)工作方式
等待来自客户的请求,随后处理该请求,返回处理结果,并等待下一个客户请求。
(2)组织结构
迭代服务器(Iterative server):自己处理请求,并将响应返回给发出请求的客户。
并发服务器(Concurrent server):不自己处理请求,而是将请求传递给某个独立线程或者其他进程来处理,自己立即返回并等待下一个输入的请求。
(3)端口访问
客户如何访问服务器?(端口)服务器在端口监听客户的请求。
客户如何知道服务器的端口?(为已知的服务分配特定端口,如Http是80端口,FTP是21端口)动态分配。
(4)中断服务
退出客户应用程序。利用带外数据:带外数据是服务器在处理客户发送的其他所有数据之前必须处理的数据。
(5)状态
状态无关服务器(Stateless server):服务器不保存其客户的状态信息,也不把自身的状态变化告知任何客户(例如:Web服务器)
状态相关服务器(Stateful server):服务器端保存每次通信的信息(例如:文件服务器)

2.2 非集中式体系结构

多层是按纵向划分,也可以按横向划分:垂直分布(不同功能的分布)、水平分布(相同功能的复制)
P2P:网络上的所有节点都可以“平等”共享其他节点的计算资源:服务器到服务器,PC机到PC机,PC机到WAP手机,所有网络节点上的设备都可以建立P2P对话。(资源与服务可以直接交换,资源和服务包括信息交换、缓存、磁盘文件等,根据效率确定角色(既可以是客户也可以是服务器))
P2P应用:即时通信软件、实现共享文件资源的软件、游戏软件、存储软件、数据搜索及查询软件、协同计算软件、协同处理软件
TTL:消息沿网络传递次数

  • 结构化的点对点体系结构(上下文可编址网络)
  • 非结构化的点对点体系结构:非结构化的点对点体系结构主义依靠随机化的算法来构造覆盖网络。其主要思想是,每个节点维护一个邻节点列表。这个列表是以随机的方式来构造的,数据也是随机放在节点中的。因此,当节点定位某个资源时,只能采用泛洪查找
  • 超级对等体(superpeer):能够维护索引或充当代理的结点。每个常规对等体作为一个客户连接到超级对等体,所有往来于常规对等体的通信都是先通过与该对等体关联的超级对等体进行的。

2.3 混合体系结构

将客户——服务器体系结构(集中式)和非集中式体系结构组合在了一起。

3 进程

进程:程序的一次执行过程,是资源分配的最小单位
线程:程序执行的最小单位(资源调度的最小单位)
多线程优点:提高并发程度、适合多核、通信代价小

  • (1)不必使进程因等待某事件而阻塞,提高了进程的执行效率;
    (2)多处理/多核上可使线程并行执行;
    (3)IPC需要内核干预,上下文切换代价高,线程可通过数据共享实现;
    (4)软件工程的需要,有些应用程序需要一组相互协作的任务完成。

4 虚拟化

(1)为什么要虚拟化(将一台计算机虚拟为多台逻辑上的计算机)
①高层软件跟不上底层硬件的更新
②可移植和灵活性

(2)虚拟机体系结构
为理解不同的虚拟化技术,首先要认识到计算机系统通常在4个不同层次提供4个不同界面:
①由机器指令组成,可由任何程序激起的硬件软件界面
②由机器指令组成,只有特权程序才可激活的硬件软件界面
③由操作系统提供的系统调用组成的界面
④由库调用组成的界面,通常形成了所谓的应用程序编程接口(API)。

(3)虚拟化可采用两种方式
①进程虚拟机(可以构建一个运行时系统,实质上提供一套抽象指令集来执行程序。)
②虚拟监视器(提供一种系统。把它做成一层完全屏蔽硬件但提供一个同样指令集的界面。关键这个界面可以同时提供给不同的程序。结果,可以有多个不同的操作系统独立并发地运行在同一平台。)

5 通信

5.1 通信方式

(1)持久通信(Persistence Communication):提交传输的消息一直由通信中间件存储,直到该消息被传送给接收方为止。
(2)瞬时通信(Transient Communication):通信系统只有在发送和接收应用程序正在运行时才存储消息。
(3)异步通信(Asynchronous Communication):消息发送后,发送方继续完成其他工作,消息接收后,再通知发送方。
(4)同步通信(Synchronous Communication):消息发送后,发送方被阻塞,直到消息被接受。

六种不同语义的通信方式:
在这里插入图片描述

(a)持久异步通信 (b)持久同步通信

在这里插入图片描述

(c)瞬时异步通信 (d)基于接收的瞬时同步通信

在这里插入图片描述

(e)基于传递的瞬时异步通信 (f)基于响应的瞬时同步通信

5.2 RPC

远程过程调用----RPC
当机器A上的进程调用机器B上的进程时,A上的调用进程被挂起,而B上的被调用进程开始执行。调用方可以通过使用参数将信息传送给被调用方,然后可以通过传回的结果得到信息。消息的传送和I/O操作对于编程人员是不可见的。
②客户与服务器存根程序(How to make a RPC look as possible like a local one? 接口与过程实现分离)
在这里插入图片描述
在这里插入图片描述
③参数传递

  • 传递值参数
    把参数打包进消息中的过程称为参数列集。消息送达服务器之后,服务器存根对该消息进行分析,以判明需要调用哪一个过程,随后执行相应的调用。
    (1)客户调用过程
    (2)存根程序创建消息
    (3)通过网络发送消息
    (4)服务器操作系统把消息交给服务器存根
    (5)存根程序把消息解包
    (6)存根程序对add作本地调用
  • 传递引用参数:指针只在使用该指针的进程所在的地址空间内才有意义。方法:
    (1)不允许传递引用参数
    (2)将参数数组传给Server后, 再生成指针使用, 完成后再按同样方式返回给客户端
    (3)区分参数类型, 仅返回输出型参数
  • 参数说明和存根生成
    (1)建立RPC协议、(2)生成Client/Server Stub
    消息格式:调用者和被调用者就相互交换的消息格式达成一致
    数据的表示方法:整型用2的补码形式,字符用16位的Unicode等,小端模式
    消息的交换方式:TCP/IP协议
    在完整地定义了RPC协议后,需要实现客户存根服务器存根。幸运的是,相同协议所使用的存根在用于不同的过程时,不同点仅仅在于面向应用程序的接口。为了简化,接口通常使用接口定义语言(IDL)来说明。用IDL说明的接口可以与适当的编译时接口或者运行时接口一起编译到客户存根过程和服务器存根中。

异步RPC
原始RPC的缺点:必须消息传递、隐含同步方式(阻塞)
RPC的变种:异步RPC
在这里插入图片描述
在这里插入图片描述

⑤RPC可以隐藏通信细节,提供了分布式透明性。RPC是瞬时同步通信,瞬时要求通信双方都处于运行状态,同步特性会使客户端阻塞

5.3 面向消息的通信

(1)Socket
套接字Socket 是一种通信端点,包含IP地址和port,在一对端口之间可以进行消息传递。Socket只支持简单的send和receive原语、Socket利用通用的协议栈(TCP/IP)进行网络通信、不适用专用协议、出现了一些高级通信原语
(2)MPI
MPI是目前应用最广的并行程序设计平台,基于它开发的应用程序具有最佳的可移植性。支持四种瞬时通信语义、支持一组消息传递原语。消息传递是相对于进程间通信方式而言的。
(3)消息队列
消息队列系统。MOM面向消息的中间件。提供消息的中介存储能力。应用程序可以通过向指定队列插入消息来实现通信。原则上,每个应用程序有自己的消息队列。消息队列通常只保证消息发送到接收方的队列中,并不保证消息到达的时间。

5.4 面向流的通信

①数据流:
为时间敏感的信息交换提供支持。如连续媒体播放传送等。数据流是数据单元的序列,可以应用于离散或连续的媒体。如TCP/IP连接的面向字节的离散数据流,和面向播放音频文件的连续数据流,连续数据流关键是采用同步传输模式

异步传输模式:流中的数据项是逐个传输,但是某一项在何时传输没有进一步限制。
同步传输模式:数据流中的每一个单元都定义了一个端到端最大延迟时间。
等时传输模式:数据单元必须按时传输,端到端延迟时间需同时受到上限和下限的约束。等时传输的连续数据流:简单流、复杂流,各子流之间通常是时间敏感的。

②时间敏感的需求一般统称为服务质量(quality of service,QoS)需求。可以简化为如下特征:
(1)数据传输所需要的比特率
(2)创建会话的最大延时
(3)端到端的最大延时
(4)最大延时抖动
(5)最大往返延时

③服务质量(QoS)控制方法:
(1)资源预留:带宽,缓冲区,CPU资源
(2)缓存(消除延时抖动)
(3)纠错
(4)交错传输(非连续传输)
(5)队列控制

④流同步:
(1)在离散数据流和连续数据流之间保持同步
(2)在连续流之间保持同步
(3)同步是建立在流的数据单元这个层次上的,只要两个流的数据单元能同步,流就能同步。

5 命名系统

5.1 名称、标识符、访问点、地址

1、命名服务是计算机系统/分布式系统中的一个基本功能。他是将名字和计算机中的一个对象(可以是远程)相关联,通过名字可以方便地找到对应的对象。
2、一个名字标识一个对象,它们之间的联结叫做绑定
3、实体访问点:用于访问该实体的接口
(1)可以有多个访问点
(2)实体可以改变访问点
(3)访问点可赋给另一个实体
4、地址:实体访问点的名字,指向实体的一个访问点
5、位置独立性:实体的名字与他的地址无关
6、真正的标识符是具有以下属性的名称
(1)一个标识符最多引用一个实体
(2)每个实体最多由一个标识符引用
(3)一个标识符始终引用同一个实体(标识符永远不会重新使用,标识符和实体是一对一的关系
7、地址和标识符:机器可读的名字、用户友好的名字
在这里插入图片描述

5.2 无层次命名

(1)广播、转发指针
广播:将包含实体所用标识符的消息广播到每个结点,拥有该标识符的结点返回相应的地址
网络规模变大时,广播很低效;网络带宽被请求数据包浪费;很多主机接收到它无法回答的请求,一种可能的解决方法是转换成多播,通过使用多播,只有符合条件的一组主机才会接收到请求。
转发指针:当实体A移动到B时,它将在后面留下一个指针,这个指针指向它在B中的新位置。

  • 优点:很简便,一旦找到实体之后,客户就可以顺着转发指针形成的链来查找实体的当前地址。
  • 缺点:如果不采取特殊措施,链会很长,以致定位开销很大;链中所有中间位置就必须维护他们的那一部分转发指针链;链很脆弱,易断开。我们尽量让指针链相对短一些,并且确保转发指针是健壮的。

(2)基于宿主位置
这种方法持续跟踪实体的当前位置,可以使用特殊的技术来预防网络故障或进程失效。缺点:增加了通信延迟、使用了固定的宿主位置;解决方法:在传统的命名服务中注册宿主位置,然后让客户首先查找宿主位置所在的位置。
(3)分布式散列表 Chord系统
在这里插入图片描述
在这里插入图片描述
(4)分层方法
在这里插入图片描述
最底层的域称为叶域,每个域D都有关联的目录结点dir(D),目录结点会跟踪域中的实体;目录结点树;根目录结点包含全部实体。

5.3 结构化命名

(1)名称空间
在这里插入图片描述
如果路径名中的第一个结点是命名图的根,那么该路径称为绝对路径名,否则,称为相对路径名。
(2)名称解析 :迭代、递归
名称解析:给定一个路径名,查找出存储在该名称所指向的结点中的任何信息的过程称为名称解析。
名称解析的实现:在多个名称服务器上名称空间的分散性影响了名称解析的实现。现在有两种方法可以实现名称解析:
(1)迭代名称解析
在这里插入图片描述
(2)递归名称解析
优点:更有效的缓存结果、通信开销较小
在这里插入图片描述

5.4 基于属性的命名

在分布式系统中,最常用的一种是用(值,属性)来描述实体,通常称为基于属性命名。基于属性的命名系统又称为目录服务,而支持结构化命名的系统通常称为命名系统。

6 同步化

6.1 物理、逻辑和向量时钟

  • 物理时钟:实际测量的时间(例如:平均太阳日、原子时钟)
  • 逻辑时钟:对于某一类算法,重要的是内部各时钟的一致。为此,引入了逻辑时钟(logical clock)。

Lamport逻辑时钟、向量时钟
1、Lamport逻辑时钟
(1)事件定序关系:对于事件e1、e2
①如果存在进程p,p包含e1、e2, 且e1在e2前发生,则 e1–> e2
②如果存在消息m,e1为Send(m),e2为Receive(m),则e1–> e2
③如果e1–> e2&e2–>e3,则e1–>e3
④如果e1–>e2,e2–>e1均不成立,则e1和e2可以并发:e1||e2
在这里插入图片描述
(2)一种逻辑时钟的定义:设每个进程p有一个逻辑时钟计数Tp,则:
①在进程p的一个事件发生前,执行Tp=Tp+1
②当进程p发送消息m时,在m上携带时钟值:(m, Tp)
③当进程q接收消息(m, Tp)时,取Tq=max{Tq,Tp}
在这里插入图片描述
(3)逻辑时钟排序与HB(Happen Before)的关系

①如果p–>q,则Tp<Tq
②如果Tp<Tq,则p–>q不一定成立:可能有p||q。

(4)逻辑时钟与事件全排序
按照逻辑时钟定义,一个系统中不同的事件可能拥有相同的逻辑时间。为了获得全排序,需要将“进程”这一因素加进去。这样,可以用序对(Tp,pa)来进行定序。其中Tp为时间的逻辑时钟值,pa为进程p的优先级,称之为时间戳。在需要排序时,当逻辑时钟值相同时,就比较它们的优先级,优先级高者优先。

2、向量时钟
Lamport逻辑时钟导致分布式系统中的所有事件都要经过排序以具有这样的性质:如果事件a在事件b之前发生,那么a也应该排在b之前,即时间值C(a)<C(b)。但是,反过来,知道C(a)<C(b)并不能知道a、b事件的关系。
在这里插入图片描述
 每个进程Pi维护一个向量时钟VCi
 VCi[i]描述到目前为止进程Pi发生的事件的数量
 如果VCi[j]=k,那么进程pi知道进程pj中已经发生了k个事件,因此pi知道pj的逻辑时间
 每个进程Pi和一个时间向量VCi[1,2,…,n]相关联,其中:
(1)向量元素VCi[i]描述进程Pi自身的逻辑时钟进展情况.
(2)向量元素VCi[j]表示进程Pi所知道的关于进程Pj的逻辑时钟进展情况.
(3)向量VCi[1,2,…,n]组成进程Pi对于逻辑全局时间的局部视图.
 进程Pi向量时钟修改规则如下:

  • (1)当发生一个事件之前,Pi更新VCi[i]:
    VCi[i]:= VCi[i] + d (d>0);
  • (2)每个报文带有发送时的向量时钟,当收到一个带时间戳的报文(m, VCj,j)时,Pi更新VCi:
    VCi[k]:=max(VCi[k], VCj[k]) 1<= k <=n;
    VCi[i]:=VCi[i] + d (d>0);

 当进程Pi从进程Pj接收一个时间戳为ts(m)的消息时,它知道进程Pj在发送消息m之前已经发生了多少事件。
 重要的是,它还知道在进程Pi发送消息m之前其他进程发生多少事件。
 也就是说,时间戳ts(m)告诉接收者其他进程中有多少事件发生在发送消息m之前,并且m可能在因果关系上与哪些事件有关。
在这里插入图片描述

6.2 互斥算法

在这里插入图片描述
1、集中式
在这里插入图片描述
集中式算法讨论:保证了互斥,无饥饿问题,单个协作者会成为性能瓶颈。

①每完成一次临界区操作,要发Request、Reply、Release三个消息
②当协调者进程故障时,需要安排新进程代替它:选一个进程,通知其它进程,建立相应队列,恢复工作。

2、非集中式
将单个协作者变为多个协作者,采用投票的方式,某个进程要访问资源,需要从m>n/2个协作者中获得多数投票
通信量:3mk个消息
优点:当某个协作者崩溃时,能快速恢复
缺点:重置将使协作者忘记之前的授权许可。且当多个进程要访问同一资源,在竞争时可能出现谁也得不到足够的投票,而发生饥饿或死锁
3、分布式
Lamport算法(分布式算法)
基本思想:要想获得某一资源的使用权,必须征得所有结点的同意;冲突时,按“定序”进行处理
主要数据结构:每个进程拥有一个全局请求队列

Lamport算法:

(1)进程p进入临界区时,向系统中所有进程发送Request(Tp, p),并将此请求放入自己的请求队列
(2)当进程q接到此消息,将其放入自己的请求队列,并返回一个带有时间戳的Reply(Tq):[Tq>=Tp+1];
(3)当Request(Tp, p)按“定序”规则排在p的队列首位时,p进入临界区,否则p等待
(4)当p退出临界区时,从自己的队列中去掉Request(Tp, p),并向其它进程发出Release
(5)当q接到Release后,将相应的Request(Tp, p)从自己的队列中删除。然后看自己是否正在等待此临界区:

  • a)如果是,则转3;
  • b)如果不是,不做任何进一步的工作。

分布式算法讨论:
(1)每完成一次临界区操作,要发Request、Reply、Release消息各n-1个(3(n-1)
(2)时间戳及全排序保证不死锁

②Lamport算法的改进

(1)Request消息:p必须让系统中的其它n-1个进程知道它的需求,这n-1个消息时必须的
(2)Reply消息:

  • a.如果进程q未在临界区内,且现在也不打算进入临界区,则同意p的进入请求,向p发Reply
  • b.如果进程q在临界区内,则不向p发Reply,并将此Request挂入请求队列
  • c.如果进程q正打算进入临界区,则看Tp<Tq是否成立:
    i. 成立,同意p的进入请求,向p发Reply; ii. 不成立,则将此Request挂入相应队列,此时不发Reply

(3)按照发Reply消息的原则,当未发Reply的进程使用完临界区后,再向原来发Request的进程发送Release消息

该算法所发送的Reply和Release消息的总数为n-1。只用2(n-1)条消 息就可以完成一次对临界区的操作。
在这里插入图片描述
改进算法讨论
(1)实现互斥,没有饥饿和死锁,需要2(n-1)个消息,不存在单个故障点
(2)多个故障点
(3)新来者问题——参与此活动的进程都需要知道彼此的名字,当一进程新参与时,要完成相应的工作
(4)故障问题——某参与者故障时,会使算法失效,这可用监测方法解决
(5)改进算法最适用于进程数目较少且成员不发生变化的情况

4、令牌环
令牌环算法:

当环初始化时,进程0得到一个令牌
该令牌绕着环运行,用点对点发送消息的方式把该令牌从进程k传到进程k+1(以环大小为模)
进程从它邻近的进程得到令牌后,检查自己是否需要访问资源
如果要,那么它就继续,完成它要做的工作,然后释放资源
在该进程完成后,它沿着环继续传递令牌
这里不准许进程在释放资源后,使用同一令牌立即再次访问资源

6.3 选举算法

许多分布式算法需要一个进程充当协调者、发起者、排序者,或者其它角色。如果协调者在系统运行中发生故障,则必须立即选择另一个副本代替其运行,这种选举过程称选举算法。
1、欺负算法
假定:

(1)进程与结点机一一对应
(2)进程p具有唯一优先级,并用p表示
(3)系统中具有最高优先级者为协调进程
(4)每个进程知道系统中当前的各个进程及其优先级

在这里插入图片描述

2、环算法

(1)假设所有的进程是按物理或逻辑排序的,每个进程都知道谁是它的后继者
(2)当任何一个进程发现协调者不再起作用时,它就构造一个包含它自身进程号的选举消息发送给它的后继者
(3)如果后继者失效,消息将绕过后继者到达下一个后继者,或者再下一个,直到找到一个运行进程
(4)每次发送者都将自己的进程号加入到消息表中

在这里插入图片描述

7 复制和一致性

一、复制的原因
可靠性(防止单点失效)、性能(扩展性):将数据的副本放置在处理它们的进程附近以减少访问时间,解决可伸缩性问题
1、一致性模型实质上是进程和数据存储之间的一个约定。即,如果进程同意遵守某些规则,那么数据存储将正常运行。正常情况下,一个进程在一个数据项上执行读操作时,它期待该操作返回的是该数据在其最后一次写操作之后的结果
2、持续一致性的范围:副本之间的数值偏差、副本之间新旧程度的偏差以及更新操作顺序的偏差
3、一致性单元(conit):受控的数据集
在这里插入图片描述
在这里插入图片描述
4、一致性单元的粒度
粗粒度:任一个更新操作都导致更新传播
细粒度:当一个数据更新时,另一个数据无需更新
在这里插入图片描述

二、以数据为中心的一致性
1、严格一致性:写操作在任一时刻对所有进程都是可见的,一旦存储器中的值改变,不管读写间隔多小?哪个进程在何处读?后读出的都是新更改值。反之,无论后面的写操作有多快,前面的读操作仍应是原来的值。
2、顺序一致性:任何执行结果都是相同的,就好像所有进程对数据存储的读、写操作是按某种序列顺序执行的,并且每个进程的操作按照程序所制定的顺序出现在这个序列中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、因果一致性:弱化的顺序一致性模型,将具有潜在因果关系的事件和没有因果关系的事件区分开来。
因果一致性的条件:所有进程必须以相同的顺序看到具有潜在因果关系的写操作。不同机器上可以以不同的顺序看到并发地写操作。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

4、FIFO一致性:一个进程的写操作可以被其它进程以相同的顺序接收到,但不同进程的写操作在不同进程看来次序可以是不同的;各个进程不需要达成一致,不同进程可以看到不同的顺序,只需要保证同一个进程的写操作顺序被所有进程看到即可
5、弱一致性:同步变量S仅有一个相关操作,即同步操作,该操作同步数据存储的所有副本。弱一致性模型要求满足以下几点:
①对同步变量的访问是顺序一致性的(即所有进程都以相同的顺序看到同步变量执行的所有操作)
②在所有先前的写操作完成之前,不能访问同步变量(即要求在所有副本上完成所有的写操作)
③在先前所有同步变量的访问完成前,不能访问(读或写)数据(即保证所得到的数据是最新的)
在这里插入图片描述
6、释放一致性:弱一致性存在的问题,即当访问同步变量时,存储器并不知道这是因为进程已完成对共享变量的写操作还是要开始读共享变量。若能够区分进入还是离开临界区的话,应用起来会更有效。因此,引入释放一致性(Gharachorloo et al.,1990),需要提供两种操作:
获取(acquire)—— 访问用于通知存储器系统临界区已就绪。
释放 (release)——访问表明临界区刚退出。
遵守以下规定:
①在访问共享变量前,进程所有先前的获取访问都必须成功地完成;
②在允许释放访问前,进程先前的所有读写操作都必须结束;
③获取访问和释放访问必须是FIFO一致的。
7、入口一致性:不用在整个共享数据上,而是每个共享数据都有一个关联的同步变量;使得多个包含不同共享数据的临界区可以同时执行,从而增加系统的并行度,付出的代价是多个同步变量的额外开销和复杂性。
标准:
①只有某一进程的保护共享变量全部被更新以后,该进程才允许执行同步变量的获取访问;
②在一进程以互斥模式访问该进程的同步变量之前,不允许其它进程持有此同步变量 ;
③在结束互斥模式下对一个同步变量的访问后,任意其它进程必须与该变量的拥有者核查,才能试图以非互斥模式访问该同步变量。
8、一致性模型概述
在这里插入图片描述
三、以客户为中心的一致性
保证对一个客户对数据存储的访问时一致的、不考虑不同客户之间的并发访问
1、最终一致性:如果很长时间不发生更新操作,则所有的副本将逐渐变为一致的
2、假设:
①每个数据项X有一个拥有者,只有拥有者可以修改X
②客户的读写操作在本地副本上进行
③更新最终将传播给其他副本上
3、记号
①Xi[t]:表示t时刻本地副本Li中数据项x的版本
②WS(Xi[t]):产生Xi[t]的所有写操作的集合
③WS(Xi[t1];Xj[t2]):在随后的t2时刻,WS(Xi[t1])中的操作也已经在本地副本Li上执行完毕。
4、单调读一致性:如果一个进程读取数据项X的值,那么该进程对X执行的任何后续读操作将总是得到第一次读取的那个值或更新的值
在这里插入图片描述
在这里插入图片描述
5、单调写一致性:一个进程对数据项X执行的写操作必须在该进程对X执行任何后续写操作之前完成
在这里插入图片描述
6、读写一致性:一个进程对数据项X执行一次写操作的结果总是会被该进程对X执行的后续读操作看见
在这里插入图片描述
7、写读一致性:同一个进程对数据项X执行的读操作之后的写操作,保证发生在与X读取值相同或比之更新的值上
在这里插入图片描述

四、复制管理
1、副本的放置
(1)副本放置问题:副本服务器放置问题(找到放置托管数据存储的服务器的最佳位置)和内容放置问题(负责找到放置内容的最佳服务器)

(2)副本服务器的放置问题:从N个位置中选出K个最优位置

  • 基于距离的方法:
    最优:使得服务器与其客户之间的平均距离最小
    距离:延迟、带宽等指标来衡量
  • 基于单元的方法
    划分成多个单元,选择K个密度最大的单元放置副本服务器
    选择合适的单元:太大(节点太多,而服务器太少)、太小(导致副本服务器过多)

(3)内容放置
有关内容复制和放置,从逻辑上可以组织为三种不同类型的副本
永久副本:构成分布式数据存储的初始集合(通常是静态的,固定的、副本数量较少)。多台服务器在同一个位置,每个服务器上有副本,构成一个服务器集群。服务器在地理上分布在不同位置。如:web站点和分布式数据库
服务器发起的副本:提高性能。当负载突然发生变化时,减少服务器负担,减少客户的通信开销。
客户启动的副本,也称为客户高速缓存。主要用于改善数据的访问时间,适用于大部分操作是读操作时

(4)动态复制的算法需要考虑两个问题:第一,复制可能是为了减轻一台服务器的负载而进行的;第二,一台服务器上的指定文件可能被转移或复制到对这些文件提出很多请求的客户附近的服务器。
(5)高速缓存的放置:放置在客户所在的机器、放在客户所在地局域网上的某个共享的机器上、在广域网的某些特定点放置高速缓存服务器。

2、更新的传播(三种):
(1)只传播更新的通知
数据量少,占用很少网络带宽,适用于读/写比较低时
(2)传送更新数据
数据量多,占用较多网络带宽,适用于读/写比较高时
(3)传送更新操作
占用较少带宽,但是要求副本有较高处理能力

3、推协议和拉协议
(1)推协议
①不需要其他副本请求,更新就传播给副本
②通常用于永久性副本和服务器启动的副本
③适用于读写比非常高的情况
④保持较高的一致性
(2)拉协议
①由客户请求服务器发送更新
②通常用于客户高速缓存
③适用于读写比比较低的情况
④当cache没有命中时,响应时间较长
在这里插入图片描述

五、一致性协议
1、一致性协议
(1)基于主备份的协议
①每个数据项都有一个主备份,由主备份负责管理在数据项x上的写操作
②实现了顺序一致性
③分为远程写协议和本地写协议
(2)远程写协议
①所有操作都转发给单个固定的远程服务器
②所有写操作转发给单个固定的远程服务器,读操作在本地副本执行
在这里插入图片描述
在这里插入图片描述
(3) 本地写协议
在这里插入图片描述
2、复制的写协议:写操作可以在多个副本上执行
(1)主动复制协议
每个副本有一个相关联的进程,将所有更新操作发给各个副本关联的进程执行相应的更新操作
问题:更新顺序问题,实现顺序一致性
①全序多播:Lamport时间戳
②中心协调器(定序器):给每个操作分配一个唯一的序列号,转发给各个副本
(2)基于多数表决的复制写协议:多个副本同时执行写操作
基本算法
设有N个副本
设置读团体Nr,写团体Nw
要求:①Nr+Nw>N ②Nw>N/2(①防止读写操作冲突②防止读读操作冲突)
在这里插入图片描述

8 容错性

一、故障模式
1、基本概念
缺陷(Defect):系统中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。
故障(Fault):是造成错误的原因。
失效(Failure):系统不能兑现它的承诺。
关系:缺陷 故障 失效
分布式系统容许部分失效,并可以从部分失效中自动恢复,不会严重影响系统整体性能
2、容错与被称为可靠的系统紧密相关。可靠性是一个术语,它包含了分布式系统中很多有用的需求,列举如下:
(1)可用性:系统准备好可以立即使用
(2)可靠性:给定的环境和时间区间连续提供期望服务的能力
(3)安全性:系统临时失效不发生灾难性事故
(4)可维护性:恢复失效系统的难易
3、容错:暂时的、间歇的、持久的
(1)暂时故障:只发生一次,然后就消失了,即时重复操作也不会发生。一直鸟从微波传输的电波中飞过可能会使一些网络上的数据丢失。如果传输超时重发,第二次就会正常工作。
(2)间歇故障:错误出现后,消失不见,然后再次发生,如此反复进行。连接器接触不良通常会造成间歇故障。
(3)持久故障:直到故障组件被修复之前持续存在的故障。芯片燃烧、软件错误和磁盘头损坏都是持久故障的例子。
4、故障模式
处理机的故障分两种
(1)失败缄默(Fail_silent)故障
失效的处理机只是停止运行,对接下来的输入不作反应也不产生进一步的输出。
(2)拜占庭(Byzantine)故障(随意性故障)
出错的处理机继续运行,产生错误的结果,并可能和其它出错的处理机一起“恶意”的工作,给人一种它们都工作正常的假象。
在这里插入图片描述

二、冗余
(1)信息冗余:增加额外数据位以使出错的数据完全恢复。例如,海明码可用于附加在传输数据上,以使数据能从传输线的噪音中恢复。
(2)时间冗余:动作执行后,必要时可再次执行。例如:原子事务处理,若一个事务处理失败,它可无负作用地再被执行(对于暂时性和间断性错误特别有用)。
(3)物理冗余:使用额外部件或进程以使整个系统能容许一些部件的损失或失效。物理冗余可以在硬件上也可以在软件上。例如,使用冗余的处理机,当一些崩溃时,系统仍能正常运行。冗余的进程等。

三、进程组容错
1、进程容错
冗余:进程组
当有消息发送到进程组时,组中的所有成员都接收该消息。
进程组的管理方式
进程需要复制的程度
2、平等组与等级组
不同组之间的一个重要的区别在于他们的内部结构。在一些组中,所有的进程都是平等的。没有指挥,所有的决定都是共同作出的。在其他组中存在一些等级关系。
(1)平等组
平等组是对称的,所有决定共同做出没有单独失败点
做出决定比较复杂,需要表决,开销和延迟
(2)等级组
组中有一个协调者,协调者做决定存在单独失败点
在这里插入图片描述
3、组成员管理
(1)使用组服务器
(2)分布式管理,采用可靠多播
4、正常退出,向所有成员发送再见消息
发生故障时,组成员退出:
(1)fail-stop类型:发送Goodbye信息
(2)fail-silent类型:需其他成员发现
消息同步:
(1)加入组时:立刻收到所有消息
(2)退出组时:不在收到任何消息
5、故障掩盖和复制:通过复制进程并将他们组织在一个组中。用一个容错的进程组来取代一个脆弱的进程。
如何复制进程?
(1)基于主进程的协议:采用等级组方式,一个主进程协调所有写操作
(2)复制的写协议:组成平等组,可采用多数表决(团体)方式
6、需要复制的程度——取决于想要达到的容错量。
系统是k容错——如果系统可在k个部件出故障时仍能达到系统设计要求而正常工作。
fail_silent型:k+1个冗余部件可满足k容错的要求。
Byzantine型:至少需2k+1个处理机才能达到k容错。最坏情况下,k个失效处理机偶然(或甚至有意)产生同样的应答。则剩下的k+1个未出错的也将产生相同的应答,因此客户或表决器只要相信大多数的应答就可得到正确的结果。
7、分布式协同一致算法的目标是使所有无故障进程对待某些问题的意见达到一致,并在有限的步骤内进行处理达成一致。依据系统的参数可有不同的情况需要考虑:
1.消息传递总是可靠吗?
2.进程会崩溃吗?若会,是fail_silent错误还是byzantine错误?
3. 系统是同步还是异步?
8、可以取得一致的三种情况:
(1)处理机同步方式、通信延时有限
处理机可用超时检测机制,确定其他失败进程
(2)消息有序,广播式传输
每个处理机原子式广播一个初始值,其他处理按照次序接收,能够同意谁是第一个发送的。
(3)处理机同步,消息有序
9、
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
10、点到点通信:通过使用可靠的传输协议(如使用确认和重新传输的TCP)来掩盖某些故障。(TCP建立点到点的可靠通信)
(1)遗漏性故障:通过TCP确认和重传可以掩盖
(2)崩溃性故障:TCP无法掩盖,通常会抛出一个异常信号,通知客户进程

四、可靠的RPC通信
1、RPC系统中发生的5种失败形式:
(1)客户不能定位服务器;(让错误抛出一个异常)
(2)客户到服务器的请求信息丢失;(返回应答或确认之前定时器超时,那么就重新发送消息)
(3)服务器在收到请求之后崩溃;
在这里插入图片描述
区分b、c这种情况存在三种方法:
①在服务器重启之前(或重新绑定到一个新的服务器之前)等待并再次尝试操作。(至少一次语义)
②立刻放弃并报告失败。(最多一次语义)
③什么都不保证。
在这里插入图片描述
在这里插入图片描述
(4)从服务器到客户的响应消息丢失;(每个请求编号,防止重复执行)
(5)客户在发送请求之后崩溃;
①日志文件,保存崩溃前的操作;②再生,把时间分为顺序编号的时期。
五、可靠的组通信(多播服务):确保消息被传送到进程组中的所有成员。
1、通信期间有进程加入该组,该进程是否要接收消息?通信期间,一个进程发生崩溃怎么办?
区分不同情况:
(1)有故障进程时,保证所有正常组成员都接收到消息
(2)无故障进程时,保证消息被所有当前组成员接收(假设没有进程加入或离开组)
2、图8.9不支持有很多接收方,为每个接收方都要返回消息,生反馈拥塞
在这里插入图片描述
How to support large number of receivers?
解决:接收方只在消息丢失时才返回一个反馈,减少反馈的规模,但不能保证永远不会发生反馈拥塞(如果所有接收方都没有接收到消息);发送方不得不将所有消息保留在历史缓存区中
3、无层次反馈抑制:支持可扩展,仅当发现收到的信息丢失时才回应,随机延时回应,抑制其他进程同时回应
在这里插入图片描述
4、分层次的反馈控制
在这里插入图片描述
5、原子多播:确保消息要么发送给所有成员,要么一个也不发送。
6、区分接收消息和发送消息,在图8.12中,分布式系统由通信层组成。消息在这个通信层中进行发送和接收。接收到的消息在发送到高层的应用程序之前放在通信层的本地缓存器中。
在这里插入图片描述
虚拟同步:如果消息的发送方在多播期间崩溃,那么消息或者被投递给所有剩余的进程,或者被每个进程忽略。
在这里插入图片描述
7、分布式系统中的同步形式:
(1)同步系统----时间上一致;
(2)松弛系统----时间上延迟,顺序一致;
(3)虚同步----顺序不保证;
组视图:在发送一个消息时,属于该组的所有进程的名单;
视图变更:当有进程加入或退出组时。
8、多播排序的四种方法:
(1)不排序的多播:是一种虚拟同步多播,他对接收不同进程发送的消息的次序不做任何保证。
在这里插入图片描述
在这里插入图片描述
(2)FIFO顺序的多播:通信层被强制按照消息发送的顺序传送来自同一进程的消息。
在这里插入图片描述
(3)按因果关系排序多播:具有因果关系的消息的递交次序与发送次序一致,无论消息是不是同一个发送者发送的。可以使用时间戳向量实现。
(4)全序多播:对于所有组员的消息递交次序,是相同的。原子多播就是提供全序递交的虚拟同步可靠多播。
9、实现虚拟同步
在这里插入图片描述
如何保证发送到视图G的所有消息在组成员关系发生改变之前被传送到G中的所有正常进程。解决:可以让G中的每个进程在确认G中的所有进程接收到m之前保留m。如果G中的所有进程都接收到m,那么m就被称为是稳定的。稳定的消息只允许传送一次。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、分布式提交
1、两阶段提交协议可以实现分布式环境下的事务特性,但是可能导致事务阻塞。
(1)协作者先向所有的参与者发送一个Vote-request消息
(2)参与者收到消息后,根据自己的情况返回同意提交Vote-Commit或拒绝Vote-Abort消息
(3)协作者收集来自参与者的所有投票。如果都同意则协调者向所有参与者发送Global-Commit消息。如果有一个参与者返回拒绝,则协作者决定取消并多播一个Global-Abort消息
(4)每个参与者都等待协作者最后发来的消息,根据消息执行相应的操作,提交或取消事务。
2、定时机制
(1)参与者可能在INIT状态阻塞
超时没有收到投票请求消息,参与者在本地终止事务
(2)协作者可能在WAIT状态阻塞
超时没有收到所有参与者的表决,协调者做出中止表决决定,并向所有参与者发消息
(3)参与者可能在READY装态阻塞
参与者不能简单做出中止事务的决定
3、不同操作的总结:
在这里插入图片描述
七、恢复
1、错误恢复的两种形式:回退恢复和前向恢复
(1)回退恢复:主要问题是要将系统从当前的错误状态回到先前的正确状态。要做到这一点,必须定时记录系统的状态,以便当错误发生时恢复到记录的状态。每次记录系统的当前状态,就称为设置一个检查点。
(2)前向恢复:在这种情况下,当系统进入错误状态时,不是回退到以前的检查点的状态,而是尝试从可以继续执行的某点开始把系统带入一个正确的新状态。前向错误恢复机制的关键在于它必须预先知道会发生什么。
2、
在这里插入图片描述
在这里插入图片描述

3、检查点
检查点设置(包括存储)和更新。
1.存储:
(1) 每一个Checkpointing被组播到每一个备份模块.
(2) 每一个Checkpointing被存储在它的本地Stable Storage
2.更新:
当进程正确地从一个旧Checkpointing运行到一个新的Checkpointing时,旧的Checkpointing要被新的Checkpointing更新.
如何保证更新(替换)过程的正确性?
一种更新方法(用2个库实现原子更新):
设A, B两个库存放Checkpointing,A库更新完后,再更新B库。在每一个库更新前后都要写入一个时间戳。
TA1、TA2分别表示A库更新前后的时间戳;
TB1、TB2分别表示B库更新前后的时间戳;
TA1、TA2、TB1和TB2初始值相同(假设为0)。
更新过程:
①TA1=TA1+1;②A库更新;③TA2=TA2+1;
④TB1=TB1+1;⑤B库更新;⑥TB1=TB2+1;
4种可能情况:
if TA1=TA2=TB1=TB2 then 正常;
if TA1>TA2=TB1=TB2 then copy B to A; /*A更新中失效
if TA1=TA2>TB1=TB2 then copy A to B; /*A更新结束,B更新前失效
if TA1=TA2=TB1>TB2 then copy A to B; /*B更新中失效,
在这里插入图片描述

9 安全性

4种安全威胁:窃听、中断、修改、伪造
一、安全通道
保护发送方和接受方免受对消息的窃听、修改和伪造的攻击;
通过加密技术防止消息被窃听,通过相互身份认证和消息完整性协议来防止入侵者的修改和伪造;
1、身份认证(3种)
(1)基于共享秘钥的身份认证
(2)使用秘钥分发中心的身份认证
(3)使用公钥加密的身份认证
2、机密性: 确保了窃听者不能截获和读取消息
3、完整性:保护消息免受修改

二、访问控制
1、包括:
(1)主体(Subject):或称为发起者(Initiator),是一个主动的实体,规定可以访问该资源的实体(通常指用户、进程、作业等);
(2)客体(Object):又称作目标(target),规定需要保护的资源(所有可供访问的软、硬件资源);
(3)授权(Authorization):规定可对该资源执行的动作(例如读、写、执行或拒绝访问);
在这里插入图片描述
2、访问控制矩阵(ACM)、访问控制表(ACL)、权能列表
(1)ACM:行对应于主体(用户),列对应于客体(目标),每个矩阵元素规定了主体访问相应的客体的授权。
缺点:占用空间大,大部分项是空的。可以通过稀疏距阵表示。
(2)ACL: 对一个特定客体(资源)指定某一个主体的访问权限(按列);
可将相同权限的用户分组,授予组的访问权;如UNIX等采用。
(3)权能列表:每个主体都附加一个该主体可访问的客体的目录表(按行)
3、防火墙:所发生的对分布式系统任何部分的外部访问都由一种称为防火墙的特殊类型的访问监控程序控制。
在这里插入图片描述
3、Sandbox、playground
(1)代码移动是分布式系统中的一个重要功能,有2种方式保护:保护移动代理、保护目标
(2)Sandbox(沙箱):
1.使用可信的类加载程序(不允许JAVA程序创建自己的类加载程序);
2.验证器检查下载的类是否服从安全规则(如破坏堆栈等);
3.运行时的安全管理程序检查(如对I/O操作的检查等);
(3)Playground(运动场):一台专门为运行移动代码保留的单独的指定机器,程序只能使用运动场本地的资源。

三、秘钥建立和分发
1、建立:约定两个比较大的数n和g,分别产生了公钥( gxy mod n)和他们各自的私钥x,y
在这里插入图片描述
2、分发:a)用带有机密性和身份认证的安全通道分发对称密钥、b)用仅带有身份认证的安全通道分发公钥
在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值