参考:
学校ppt 整体(“爹!”)https://zhuanlan.zhihu.com/p/341814546 时间和时钟 https://blog.csdn.net/fragile98/article/details/113695334 分布式系统的时钟和全局状态 https://blog.csdn.net/Jiaach/article/details/79521793 本文是在“整体”上,结合自己的看法和老师给的考察框架总结的 寻思着转账只能写一个,本文多个引用,就姑且选原创吧,给楼上大小爹磕个头 may the flame guide thee
第一章 概述
1.分布式系统的目标
1.资源可访问(能远程访问资源,以一种受控的方式和其他用户共享资源)
2.透明性(分布透明,即系统的分布怼用户和应用来说是不可见的)
3.开放性(根据一系列准则提供服务,准则描述了提供服务的语法和语义)
4.可扩展性(规模可扩展、地域可扩展、管理可扩展)
资源共享 + 协同计算
2.分布式系统的概念
分布式系统是指把多个处理机通过网络互连而构成的系统,系统的处理和控制功能分布在各个处理机上。
分为同构分布式系统和异构分布式系统
3.分布式系统的特点
-
并发性
-
-
没有全局时钟
-
- 每个机器都有各自的时间,没有办法做到统一
- 依靠交换信息进行程序间协调
-
故障独立性
-
4.分布式系统的挑战
-
异构性
-
-
挑战:
-
- 网络协议不同
- 硬件,不同 CPU 字节序不同
- 操作系统不同,对上提供的 API 不同
- 编程语言不同
- 开发者实现方式不同
-
解决方案
-
-
中间件
-
-
移动代码
-
- 移动代码时发送到目的机,且可以在目的机运行的代码
- 虚拟机提供了这种可能方案
-
开放性
-
-
安全性
-
-
可扩展性
-
-
故障处理
-
- 检测故障:检测数据,比较难
- 屏蔽故障:重发没有收到的消息或者备份服务器
- 故障容错:系统设计成容忍错误的存在
- 故障恢复:记录日志
-
并发
-
-
透明性
-
- 访问、位置、并发、复制、故障、移动、性能、扩展透明
第二章 系统模型
1.CS P2P 两种不同结构的特点
C/S
- 它是所有网络应用的基础。客户/服务器分别指参与一次通信的两个应用实体,客户方主动地发起通信请求,服务器方被动地等待通信的建立。
- 优点:可以在用户态服务器中构造各种各样的API,为应用程序与服务间通过RPC调用进行通信提供一致的方法,且没有限制其灵活性,为分布式计算提供了适当的基础
P2P
2. 体系结构元素的四个关键问题
1)通信的实体是什么?
-
面向系统的角度
-
-
面向问题的角度
-
- 对象:给定问题领域的自然单元,通过接口被访问
- 组件:对某个对象提供接口,也给出使用组件必须要有的接口
- Web 服务:Web 自身具备完整的服务,为其他组织提供增值服务,会跨越组织边界集成业务
2)如何通信(通信范型)?
-
进程间通信
-
- 相对底层的支持,用于分布式系统之间通信
- 例如套接字、多播、消息传递
-
远程调用
-
-
间接通信
-
-
进程间通信和远程调用的限制
-
- 空间耦合:发送者需要知道接收者
- 时间耦合:发送者和接收者同时存在
-
间接通信就是对空间和时间的解耦
-
- 组通信,一对多通信
- 发布-订阅系统,提供中间服务,将发送者消息路由到接收者
- 消息队列,提供点对点服务,发送者发到发送队列;接收者从接受队列获取
- 元组空间,进程可把任意结构化数据项存放在一个持久元组空间,其他进程可读或删除
- 分布式共享内存,用于支持在不共享物理内存的进程间共享数据
3)两种构架中进程的角色和责任
4)分布式体系如何映射到具体的基础设施上?
分布式基础设施由大量的机器组成,并通过网络互联,放置是关键的
-
将服务映射到多个服务器上
-
- 服务由几个服务器的进程来实现,通过交互跟客户进程进行交互
-
缓存
-
- 保存最近使用过的数据,可以在本地缓存,也可以在代理服务器上做缓存
- 缓存可以减少不必要的网络传输,减少服务器负担,还可以代理其它用户透过防火墙访问服务器
-
移动代码
-
-
移动代理
-
3. 交互 故障 安全三种基础模型
交互模型
进程之间通过消息传递进行交互,实现系统的通信和协作功能。
- 有较长时间的延迟
- 时间是进程间进行协调的基本的参照,在分布式系统中,很难有相同的时间概念
- 交互模型的目的是依据同步分布式系统和异步分布式系统的不同来构造交互算法,可以对算法在实际分布式系统的行为提供一些想法
故障模型
- 计算机或者网络发生故障,会影响服务的正确性
- 故障模型的意义在于将定义可能出现的故障的形式,为分析故障带来的影响提供依据
- 设计系统时,知道如何考虑到容错的需求
安全模型
- 分布式系统的模块特性以及开放性,使得它们暴露在内部和外部的攻击之下
- 安全模型的目的是提供依据,以此分析系统可能收到的侵害,并在设计系统时防止这些侵害的发生
4.同步异步两种不同的分布式系统
同步分布式系统
满足约束:
- 进程执行每一步的时间有个上限和下限
- 每个进程有一个本地时钟,他与实际时间的偏移率再一个已知的范围
- 通过通道传递的每个消息在一个已知的时间范围内接收到
异步分布式系统
没有限制的系统
第三章 时间和全局状态
1.事件、进程历史概念
事件
一个通信动作或进程状态转换动作
进程历史
即某个进程 Pi 中发生的一系列事件,并按照关系 ->i 排序
2. 时钟漂移及产生原因
- 时钟是基于固有频率晶体的震荡次数,对计数进行分割产生时间
- 但时钟振荡器在物理上有所不同,震荡频率不同,且时钟频率会随着温度不同而有所差别
- 时钟漂移指与名义上完美的参考时钟之间有所漂移,漂移量即为漂移率
3.内部外部物理时钟同步
外部同步
- 采用权威的外部时间源
- 时钟 Ci 在范围 D 内是准确的
内部同步
- 无外部权威时间源,系统内时钟同步
- 时钟 Ci 在范围 D 内是准确的
4.时钟正确性含义
- 基于漂移率,即硬件时钟 H 的漂移率在一个已知的范围内,该时钟正确
- 基于单调性,软件时钟中,满足较弱的单调性条件就够了。即时钟 C 与真实时间 t 单调前进
5.物理时钟同步的三种方法
1) Cristian 方法
-
应用条件
-
- 存在时间服务器,可与外部时间源同步(应用于内部网络)
- 消息往返时间与系统所要求的精度相比足够短
-
协议
-
-
2) Berkeley 算法
- 主机周期轮询从属机时间(适用于局域网)
- 主机通过消息往返时间估算从属机的时间
- 主机计算容错平均值
- 主机发送每个从属机的调整量
3)网络时间协议(NTP)
网络来回总延时 delay = (t4 - t1) - (t3-t2) //t3-t2为服务器内部耗时
客户端与服务端时间差 delta = (t2-t1) + (t3-t4) / 2
t2 - t1 即 delta + delay1
t3 - t4 即 delta - delay2
即 上式为 2*delta +(delay1 - delay2) / 2
-
NTP 同步三模式
-
-
组播
-
-
过程调用
-
-
对称模式
-
- 按对称模式操作的一对服务器交换有时序信息的消息
- 时序数据是指时间序列数据。用描述性的语言来解释什么是时序数据,简单的说,就是这类数据描述了某个被测量的主体在一个时间范围内的每个时间点上的测量值。 对时序数据进行建模的话,会包含三个重要部分,分别是:主体,时间点和测量值。套用这套模型,你会发现你在日常工作生活中,无时无刻不在接触着这类数据。
- 如果你是一个股民,某只股票的股价就是一类时序数据,其记录着每个时间点该股票的股价。
- 准确率最高
6.逻辑时间、逻辑时钟的概念(要求应用(估摸着先验后验那里))
逻辑时间
引入逻辑时间:
- 分布式系统不能完美同步时钟,所以通常不能使用物理时间表示事件顺序
- 事件排序是众多分布式算法的基石
- 缺乏全局时钟
逻辑时钟
- 众多应用只要求所有节点具有相同时间,该时间不一定与实际时间相同
- Lamport(1978)指出:不进行交互的两个进程之间不需要时钟同步
- 所有的进程需要在时间的发生顺序上达成一致
7.分布式系统中的事件排序:发生在先关系(happen before)、并发关系
作为物理时钟替代品的逻辑时钟
1)发生在先关系
类似物理因果关系的方案,将分布式系统中给不同进程里的事件排序。基于两点:
- 如果两个事件发生在同一进程 Pi 中,那么他们发生的顺序是 Pi 观察到的顺序
- 当消息在不同进程中发送时,发送消息的事件在接收消息的事件之前发生
发生在先关系定义:
- 若存在进程 pi 满足 e->ie’,则 e->e’
- 对于任一消息 m,存在 send(m)->recv(m)
- 若事件满足 e->e’ 和 e’->e’’ ,则 e->e’’
2)并发关系
并发关系定义:X->Y 与 Y->X 均不成立,则称事件 X、Y 是并发的,表示为 X||Y
8.Lamport 时钟、全序逻辑时钟、向量时钟
1)Lamport 时钟
-
机制
-
- 进程维护一个单调递增的软件计数器,充当逻辑时钟
- 用逻辑时钟为事件添加时间戳
- 按事件的时间戳大小为事件排序
-
逻辑时钟修改规则
-
- 进程 pi 发出事件前,逻辑时钟 Li:=Li+1
- 进程 pi 发送消息 m 时,在 m 中添加时间戳 t=Li
- 进程 pj 在接收(m,t)时,更新 Lj:=max(Lj,t)+1,给事件 recv(m) 添加时间戳后发送给应用程序
-
举例
-
- 事件在后的lamport时间戳一定较大;但lamport时间戳较大事件不一定后发生
举例
-
总结
-
- 算法不依赖于事件发生的真实时间
- 与真实物理时间中事件的发生顺序可能不一致
- 不同进程产生的消息可能具有相同数值的 Lamport 时间戳
-
存在的问题
-
- 没有捕获事件的因果关系
- 例如:节点 B 发布一篇文章并传送给节点 A 和 C。节点 A 就此发表评论并传送给节点 B 和 C,如下图
2)全序逻辑时钟
简单点说就是单纯的一个事件序号值变成了(事件序号or Lamport时间戳,进程号)标识组
- 引入进程标示符创建事件的全序关系
- 若 e、e’ 分别为进程 pi、pj 中发生的事件,则其全局逻辑时间戳分别为(Ti,i)、(Tj,j)
- e->e’ =》 Ti<Tj || Ti=Tj && i<j 时定义为(Ti,i) < (Tj,j)
- 系统中各个事件 Lamport 时间戳均不相同
3)向量时钟
简单的说,一个事件有n个进程参与,设置一个set有n个元素,初始化为全0,进程k对事件做出更改,就设置set[k]++
N 个进程的向量时钟是 n 个整数的一个数组,每个进程维护自己的向量时钟 Vi,用于给本地事件加时间戳。更新规则如下:
-
VC1:初始情况下,Vi[j]=0 i,j=1,2,…N.
-
VC2:在 pi 给事件加时间戳之前,设置 Vi[i]= Vi[i]+1
-
VC3:pi 在它发送的每个消息中包括 t=Vi
-
VC4:当 pi 接收到消息中的时间戳 t 时,设置 Vi[j]=max(Vi[j],t[j]),j=1,2,…,N。取两个向量时间戳的最大值称为合并操作
-
- Vi[j] 表示第 i 个节点所了解的第 j 个节点的时钟信息
9.割集、割集的一致性、一致的全局状态 概念+判断
- 全局历史:单个进程历史的并集
- 割集:系统全局历史的子集
- 割集的一致性:割集 C 是一致的,即对于所有事件 e 属于 C , f -> e,可推 f 属于 C(有果必有因)(类似于HashGraph的共识机制)(简单地说就是割集可以有因没有果,不能“老因割了,新因不割,果割了”)
- 一致的全局状态:对应于一致割集的状态 S0 -> S1 -> S2 -> …(系统的执行描述成系统全局状态之间的一系列转换。)