1 分布式系统概述
分布式系统
分布式系统是若干独立计算机的集合,它们对于用户来说就像一个系统。 分布式系统屏蔽系统中种类各异的计算机和网络,常常通过一个软件层(中间件)组织起来。
分布式系统的透明性的种类、定义
分布式系统的重要目标之一是透明性,即将它的进程和资源实际上分布在多台计算机上这一事实隐藏起来。
透明性 描述
- 访问 隐藏数据表示形式以及访问方式的不同
- 位置 隐藏数据所在位置
- 迁移 隐藏资源是否已移动到另一个位置
- 重定位 隐藏资源是否在使用中已移动到另一个位置
- 复制 隐藏资源是否已被复制
- 并发 隐藏资源是否由若干相互竞争的用户共享
- 故障 隐藏资源的故障和恢复
- 持久性 隐藏资源(软件)位于内存里或在磁盘上
分布式系统中的扩展技术有哪些?
- 隐藏通信等待时间
– 异步通信
– 减少通信量 - 分布技术:分割组件,分散到系统中,如
DNS和WWW - 复制技术: 多拷贝
2 体系结构
客户端-服务器模型
服务器-客户机,即Client-Server (C/S)结构。服务器负责数据数据的管理,客户机负责完成与用户的交互任务。
集中式体系结构——客户端-服务器模型
服务器:实现某个特定服务的进程;
客户:向服务器请求服务的进程;
客户端-服务器之间的一般交互:请求/回复
无连接的协议:高效,受传输故障的影响,适合局域网
基于连接的协议:性能相对较低,适合广域网
客户服务器应用程序通常组织为三个层次:
用户接口层:用户交互所需要的一切;
处理层:应用程序核心功能;
数据层:操作数据或文件系统,保持一致性。
物理两层体系结构
(1)客户机,只含有实现(部分)用户接口的程序
(2)服务器,包含了其余的部分,即实现处理和数据层的程序
物理三层体系结构
3 分布式进程管理
进程和线程的比较
结论:
- 多线程能提高性能
- 线程不像进程那样彼此隔离,并受到系统自动提供的保护,因此多线程应用程序开发需要付出更多努力
多线程服务器的优点——简顺阻
-
显著简化服务器代码。
-
应用并发技术来开发高性能的服务器变得更加容易。
-
多线程能够保留顺序处理的思路,使用阻塞性系统的系统调用,仍然能到达并行处理的目的。
-
使用阻塞系统调用使编程更容易,并行处理能提高系统的性能
代码迁移的动机有哪些
定义:将程序(或执行中的程序)传递到其它计算机
迁移动机:
-
实现负载均衡
将进程从负载重的系统迁移到负载轻的系统,从而改善整
体性能 -
改善通信性能
交互密集的进程可迁移到同一个节点执行以减少通信开销
当进程要处理的数据量较大时,最好将进程迁移到数据所
在的节点 -
可用性:需长期运行的进程可能因为当前运行机器要关闭而需要迁移;
-
使用特殊功能:可以充分利用特定节点上独有的硬件或软件功能。
进程对资源的绑定类型有哪些
- 按标志符(URL)
- 按值
- 按类型
资源对机器的绑定类型有哪些
- 未连接(数据文件)
- 附着连接(数据库)
- 紧固连接(本地设备)
4 分布式系统通信
什么是远程过程调用?
远程过程调用是指本地程序调用位于其他机器上的进程,调用方通过消息的形式把参数传递给被调用方的进程,然后等待调用方执行完之后用消息的方式把结果传回调用方。
远程过程调用的步骤
- 客户过程以正常的方式调用客户存根
- 客户存根生成一个消息,然后调用本地操作系统
- 客户端操作系统将消息发送给远程操作系统
- 远程操作系统将消息交给服务器存根
- 服务器存根将参数提取出来,然后调用服务器
- 服务器执行要求的操作,操作完成后将结果返回给服务器存根
- 服务器存根将结果打包成一个消息,然后调用本地操作系统
- 服务器操作系统将含有结果的消息发送回客户端操作系统
- 客户端操作系统将消息交给客户存根
- 客户存根将结果从消息中提取出来,返回给调用它的客户过程
消息持久通信与暂时通信的区别
持久通信:通信双方不必保持运行。
暂时通信:通信系统只在发送者和接收者运行时存储消息。
消息持久通信指的是需要传输的消息在提交之后由通信系统来储存,直到将其交付给接受者为止,在将消息成功交付给下一个服务器之前消息一直存储在通信服务器上,因此发送消息的程序不必在发送消息后保持运行,同样要接受消息的应用程序在消息提交的时候可以不处于运行状态。即,不需要消息发送方和接收方在消息的传输过程中都保持激活状态。提供消息的中介存储(如,消息队列系统,面向消息的中间件),实时性要求较低,允许几分钟完成的传输。
消息暂时通信指的是通信系统只是在发送和接收消息的应用程序运行期间存储消息,否则消息就会被丢弃。不提供消息的中介存储,实时性要求较高,几秒甚至几毫秒完成。如Berkeley Sockets,Message-Passing Interface.
消息同步通信与异步通信的区别
同步通信:等待消息的回复。
异步通信:不等待,立即执行其他程序
异步通信特征在于发送者要把传输的信息提交之后立即执行其他的程序,这意味着该消息存储在位于发送端主机的本地缓冲区里,或者存储在送达的第一个通信服务器上的缓冲区上中。
而对于同步通信而言,发送者在提交信息之后会被阻塞直到消息已经到达并储存在接受主机的本地缓冲区中以后,也就是消息确实已经传到接收者之后,才会继续执行其他程序。
判断消息通信的类型和描述
a) 持久异步通信:提交消息后立即执行其他程序,电子邮件
b) 持久同步通信:提交消息后会被阻塞,直到消息已到达并存储在接收主机
c) 暂时异步通信
d) 基于接收的暂时同步通信
e) 基于交付的暂时同步通信
f) 基于响应的暂时同步通信
多播通信:反熵和gossiping
多播通信
- 多播:服务器向其他N台服务器发送更新时,底层的网络负责向多个接收者发送一个消息,高效
- 网络层多播
- 应用层多播:将节点组织成一个覆盖网络,用它来传播信息给其成员
- 覆盖网络的构建:
- 树状网络:路径唯一
- 网状网络;多个路径
基于gossiping的数据通信
Epidemic协议使用本地信息在大型节点集中快速地传播信息
提供最终一致性:保证所有的副本最终是一致的
一个服务器可以是:
- 传染性的:持有愿意向其他服务器散布的更新
- 易感的:尚未更新的服务器
- 隔离的:已更新的服务器如果不愿意或不能扩散其更新
反熵传播模型
服务器P周期的随机选取一台服务器Q交换更新,方式包括:
- P只把自己的更新推入Q:较差的选择?
- P只从Q拉出新的更新
- P和Q相互发送更新
- 可以证明:如果初始只有一台服务器具有传染性,无论采用哪种形式,更新最终将被传播到所有服务器上: O(log(N)), N为系统结点数
Gossiping模型
5 命名
移动实体定位的方法有哪些
简单方法
-
广播和多播
-
广播
适用于局域网
在广域网变得低效
-
多播
只发送给一组符合条件的主机
可进行多播实体的定位服务
可用于定位最近副本
-
-
转发指针
- 使用 (proxy, skeleton) 对的转发指针
2. 通过在代理中存储一个捷径来重定向转发指针
基于起始位置的方法
-
起始移动代理
-
当移动主机转移到另一个网络时,将转交地址在起始移动代理中注册
缺点:
-
客户必须首先与起始位置联系,而这一位置可能与实体相邻很远
-
使用了固定的起始位置
-
移动 IP原理
分层方法
- 类似DNS,网络被划分为一组域
- 目录节点:记录域包含的实体
- 叶域的目录节点N记录实体E在域中的位置
- 更高一层域的目录节点N’记录实体E的位置,包含指向N的指针
分层方法(一)
把定位服务划分为域的分层组织,每个域都有关联的目录节点
分层方法(二)
实体信息存储示例,这里的实体在不同的叶域中拥有两个地址
分层方法(三)—— 查询
在分层组织的定位服务中的位置查找
分层方法(四) ——插入
更新操作
- 插入请求被转发到第一个知道实体E的节点
- 转发指向叶节点的指针所形成的链
描述分层方法中查找一实体的过程
希望定位实体E的客户向他所在的叶域D的目录节点发送一个查找请求,如果这个目录节点没有存储该实体的位置记录,那么就说明该实体现在不在D中。因此,这个节点会把请求转发给他的父结点。注意,父结点代表一个比它的子域更大的域。如果父结点也没有E的位置记录,那么就会把该查找请求转发给更高一层的域,以此类推。如果结点M存储了E的位置记录,那么一旦请求到达M后,就可以知道E位于结点M的域dom(M)中。M中存储了一条位置记录,其中包含一个指向其子域的指针。然后,把请求转发给那个子域的目录节点,那个子域会依次进一步向树的下方转发请求,直到请求最终到达叶节点为止。存储在叶结点中的位
置记录会包含E在哪一个叶域中的地址。这样就可以把这个地址返回发起请求的客户。
描述分层方法中插入一实体的过程
假设实体E在叶域D中创建了一个副本,就需要插入这个副本的地址。插入操作从D的叶结点dir(D)开始,然后D会立即把插入请求转发给它的父结点。父结点同样会转发插入请求,直到插入请求到达已经为E存储了位置记录的目录结点M为止。然后,结点M会在E的位置记录中存储一个指针,该指针指向转发插入请求的那个子结点。此时,该子结点会建立一条关于E的位置记录,该位置记录中包含一个指针,指向转发请求的下一层结点。这个过程会持续进行,直至到达发起请求的叶结点为止。最后,那个叶结点会创建一条记录,这条记录包含实
体在相关叶域中的位置。
6 同步
Lamport 时间戳算法的思想 结合图解释
Launport时间戳算法基本思想是:
多个进程分别在多台机器上运行,每台机器都有自己的时钟,各时钟的工作速率不同。每个消息均携带有送者时钟的发送时间。如果消息到达接收者时,接收者时钟显示的时间大于发送时间时,认为时钟是正常的,符合发送者时间先于接收者时间这一规律,如果消息到达接收者时,接收者显示的时钟小于发送时间,接收者就将它的时钟调到一个比发送时间大1的值。
为满足全局时间的需要,可以对这个算法稍作补充,规定在每两个事件之间,时钟必须至少滴答一次。如果一个进程以相当快的速度连续发送或接收两个消息,那么它的时钟必须在这之间至少滴答一次
此外,可以将事件发生所在的进程号附加在时间的低位后面,并用小数点分开,这样,如果进程1和进程2中的事件都发生在时刻20,那么,它们的时间分别记为20.1和20.2。
Lamport算法为我们提供了一种对系统中所有的事件进行完全排序的方法
选举算法中Bully算法的思想
-
当进程P注意到需要选举一个进程做协调者时:
-
向所有进程号比它高的进程发ELECTION消息
-
如果得不到任何进程的响应,进程P获胜,成为协调者
-
如果有进程号比它高的进程响应,该进程接管选举过程,进程P任务完成
-
当其他进程都放弃,只剩一个进程时,该进程成为协调者
-
一个以前被终止的进程恢复后也有选举权
选举算法中环算法的思想
- 不使用令牌
- 按进程号排序,每个进程都知道自己的后继者
- 当进程P注意到需要选举一个进程作协调者时:
-
就创建一条包含该进程号的ELECTION消息,发给后继进程
-
后继进程再将自己的进程号加入ELECTION消息,依次类推
-
最后回到进程P,它再发送一条COORDINATOR消息到环上,包含新选出的协调者进程(进程号最大者)和所有在线进程
-
实现事务的方法
分布式的死锁检测Chandy-Misra-Haas算法的思想
7 一致性和复制
复制的目的和代价
目的
进行数据复制主要出于两个目的:可靠性和性能。首先,数据复制可以提高系统的可靠性。数据复制的另一个目的是提高性能。
代价:一致性
- 网络通信开销
- 强一致性要求的原子操作很难快速完成
能区分是否符合严格一致性、顺序一致性、因果一致性和FIFO 一致性。
a) 严格的一致性存储
b) 非严格的一致性存储
a) 顺序一致的数据存储
b) 非顺序一致的数据存储
a) 违背因果一致性的时间存储顺序
b) 符合因果一致性的时间存储顺序
能区分是否符合单调读、单调写、写后读和读后写。
单调读
单调写
写后读
读后写
基于主备份的协议: 远程写协议、本地写协议
远程写协议
基于主备份的远程写协议,所有读操作和写操作都被转发到一个固定的服务器上
本地写协议
于主备份的本地写协议,其中一个单一的拷贝在多个进程间移动,保证一致性,需要跟踪数据项的当前位置,广播、转发指针、基于原始位置的方法和层次定位服务。主备份移动到要执行更新的进程那里。
复制的写协议:主动复制、基于法定数目的协议 ![image-20210109123557036](https://i-blog.csdnimg.cn/blog_migrate/b804d78f57d8250c93f05eb0641d5f0a.png)
8 容错性
什么叫容错性
拜占庭将军问题
什么叫原子多播
分布式提交—两阶段提交的思想
简单、实用、可靠,成为事实上的工业标准。
在两段提交协议中,将提交分成两个阶段,
- 第一阶段(表决阶段),事务的协调者询问各个参与者是否可以提交,此时,各个
参与者将回答消息发给协调者。协调者根据收到的消息,看是否可以真正提交。 - 第二阶段(完成阶段),如果可以提交,则通知各参与者立即执行提交,否则,通
知它们中止此事务
a) 2PC中的协调者的有限状态机
b) 2PC中的参与者的有限状态机
参与者一旦投票,则失去自主能力,必须等待协调者的最终决定,可能造成阻塞
可能的阻塞状态:
- 参与者在INIT状态等待协调者的VOTE_REQUEST消息
- 协调者在WAIT状态等待来自每个参与者的表决
- 参与者在READY状态等待协调者发送的全局表决消息
9 分布式安全
什么是机密和完整性
- 机密性:系统将信息只向授权用户公开;
- 完整性:对系统资源的更改只能以授权方式进行
对称加密系统和公钥系统的区别?
什么是安全通道
- 安全通道:使客户与服务器之间的通信保持安全,免受对消息的窃听、修改和伪造的攻击。
- 身份验证:通信双方需要验证身份。
- 消息的完整性和机密性:消息未受到窃听、修改和伪造的攻击。
阐述基于共享密钥的身份验证的思想
质询-响应协议:一方向另一方质询一个响应,只有对方知道共享密钥时才能给与正确的响应
阐述使用密钥发布中心的身份验证的思想
主要通过引入第三方的认证机构来确认身份和分发密钥。由于基于共享密钥的身份验证存在可扩展性问题:即对N 台主机,任两台需要一个共享密钥,共需要 N*(N-1)/2 个密钥,每台主机管理N-1 个。而使用密钥分发中心 KDC(key distribution center)使用集中式管理。KDC 与每个主机共享一个密钥,总共只需要管理 N 个密钥,KDC 与每台主机共享一个密钥。通过向通信的两主机分发一个密钥通信实现通信。
下图左:KDC 向Alice 和Bob 分发一个密钥,他们可使用该密钥进行通信。Alice 先向KDC 发送一条消息,通知KDC 她希望与Bob 交谈。KDC 返回一个包含她能使用的共享密钥KA,B 的消息。
该消息使用了KDC 好Alice 共享的密钥KA,KDC 进行加密。此外,KDC 也向Bob 发送KA,B 并使用KDC 与Bob 的共享密钥KB,KDC 加密。从而通信双方具有了共享密钥,可进行通信。
阐述使用公钥加密的身份验证的思想
当Alice想同Bob进行交谈时,会使用Bob的公钥对信息进行加密,加密的信息包含一个质询 ,当Bob接收到Alice发送的消息之后,只有Bob可以通过自己的私钥对该进行进行解密。之后为了保证Alice知道对方是Bob,则Bob使用Alice的公钥加密信息,该信息包含Alice发送的质询 与Bob本身的质询,与后续建立会话的加密共享密钥 ,Alice收到消息之后就能确定另一方是Bob,随后通过共享密钥发送Bob的质询信息 ,Bob接收到质询信息之后进行解密,就能确定对方是Alice,至此Alice与Bob之间的安全通信就建立起来了。
使用公钥加密对消息进行数字签名的思想
Diffie-Hellman建立共享密钥的原理
权能和委派
权能:
权能是对于指定资源的一种不可伪造的数据结构,它确切指定它的拥有者关于该资源的访问权限。
为了调用一个对象的操作,客户必须将权能传给服务器检查。
服务器创建对象时,客户得到的是所有者权能(全1),check字段是随机选择的,同时存储在权能和服 务器中的一个表中。
客户可以从一个所有者权能生成一个受限权能,并发送给另一个进程。
从一个所有者权能生成一个受限权能
委派:
将某些访问权限从一个进程传递给另一个进程,Alice可以构造证书:
- Bob具有权限R
- 此证书的持有者具有权限R
使用代理来委派和证实访问权限的所有权
10 分布式文件系统
NFS的共享预约
客户在打开文件时指定所需的访问类型(即READ、 WRITE或BOTH),以及服务器应该拒绝的其他客户的访问类型(NONE,READ, WRITE或BOTH)如果服务器不能满足客户的需求,那么该客户的open操作将会失败。对于一个已经打开的文件,我们用两个不同的状态变量加以区分访问状态表明当前客户目前如何访问该文件。拒绝状态表明新客户不允许进行哪些访问。
NFS服务器的重复请求高速缓存
NFS的底层RPC不能保证可靠性,而且缺乏对重复请求的检测。
NFS服务器提供重复请求高速缓存解决:XID事务处理标识符。
重复性检查是为那些不能在两次执行中返回同一结果的操作而提供的。这方面经典的例子是rm命令。
当RPC 请求到来时,服务器缓存其标识符。只要服务器还没有发出响应,就说明正在处理这个RPC 请求。当服务器处理了某个请求后,也缓存该请求的关联响应,此后该响应才返回客户。现在需处理如下三种情况:
- a)客户启动计时器,超时前若客户没有收到响应,就使用与原XID 请求重传。若服务器还没处理完原先的请求,忽略此重传请求。
b)服务器刚向客户端返回响应后收到重传请求。如果重传请求到达时间与服务器发送应答时间接近,服务器忽略此重传请求。
c)响应确实丢失了,应该向客户端发送操作的缓存结果以响应重传的请求。
Coda的回叫承诺
回叫承诺:服务器记录哪些客户在本地缓存了文件的拷贝
如果文件被客户更改,会通知服务器,后者向其他客户发无效化消息(回叫中断:服务器废弃回叫承诺)
如果客户在服务器上有未被废弃的回叫承诺,它就可以安全地在本地访问文件。
对于每个文件,客户从服务器获取文件时,服务器记录哪些客户在本地缓存了该文件的拷贝,此时称服务器为客户记录回叫承诺。如果文件被客户更改,会通知服务器,服务器向其他客户发无效化消息(这种无效化消息叫做回叫中断,服务器随后会废弃它刚刚想向其发送了无效消息的客户保存的回调承诺)。如果客户在服务器上有未被废弃的回叫承诺,它就可以安全地在本地访问文件。
如上图:当客户A 开始会话SA 时,服务器会记录一个回调承诺,同样,B 开始绘画时也是如此SB。
当B 关闭SB 时,服务器向客户A 发送回叫中断,从而中断了它对回调客户A 的承诺。(当客户A关闭会话SA 时,不会发格任何特殊的事情),这个关闭操作就像所预期的那样被简单接受。)随后,当A 打开SA’时,它会发现f 本地的副本是无效的,必须从服务器获取最新的版本。另一方面,当B 开始会话SB’时,它会注意到服务器仍有一个未被废弃的回调承诺,该承诺意味着B 可简单的重用从SB 获得的本地副本。
Coda的储藏技术
Coda允许客户在断开连接时(AVSG为空)的继续操作。 使用本地备份,再次连接后回传服务器。 基于事实:两个进程打开相同的文件进行写操作很罕见。 使用储藏技术(hoarding)。
Coda 允许客户在断开连接时的继续操作。使用本地备份,再次连接后回传服务器。基于事实,两个进程打开相同的文件进行写操作很罕见。为了成功地完成断开连接操作,需要解决的问题是确保客户缓存包含连接断开期间将访问的那些文件。如果采用简单的缓存方法,可以证明客户可能由于缺少必要的文件而不能继续执行。预先使用适当的文件填充高速缓存称为储藏。
考题
课后题
在单线程情况下, cache命中需要30ms, cache未命中需要120ms,其加权平均为2/3*30+1/3·120=60ms,一秒钟可以完成1s/60ms=16.7个在多线程情况下,所有磁盘等待都是重叠的,因此每个请求耗时30ms,一秒钟可以完成1s/30ms=33.3个
![image-20210109122137785](https://i-blog.csdnimg.cn/blog_migrate/c12751a8a88c773ec8ed5b29d01f8701.png)
分层定位方法:
最少三次:
最多改变记录次数 2*K + 1
h = 2
题目一
- 访问透明性
- 故障透明性
- 代码迁移动机
- 因果、顺序、严格一致性判断
- Lamport 时间戳算法的思想 结合图
- 法定数目 11 服务器
- 冗余掩盖故障
- 分布式互斥算法
- 拜占庭将军
- 数字签名
- kerberos
- 三者Diffe-Hellmem
- 三段锁
- NFS重复请求高速缓存
- Coda储藏
- 远程写协议
题目二
-
代码迁移动机有哪些(三)
-
简述Lamport时间戳算法思想(六)
-
判断一致性(七)
-
基于法定数目计算读、写团体数(七)
-
拜占庭将军问题(三个忠诚将军达成一致性问题) (八)
-
使用公钥加密对信息进行数字签名的思想(九)
-
权能(ppt上的图)(九)
-
Diffie-Hellman建立共享秘钥的原理(三者)(九)
-
两阶段提交(八)
-
(十)
-
(十)
-
远程写操作(四)(七)
题目三
- 进程对资源的绑定类型
-
法定数目,16台服务器,列出读、写团体数
-
解释访问、并发透明性
-
Lamport算法思想,结合图解释
- 多线程服务器优点: 简顺阻
-
冗余掩盖故障的类型
-
两阶段提交思想,结合图解释
-
数字签名思想,结合图解释,Hash+私钥
-
三者建立共享密钥Diffle-Hellman
-
权能工作原理,结合图解释
-
NFS重复请求高速缓存,结合图解释
-
本地写协议,结合图解释
-
Coda回叫承诺,结合图解释
-
代码迁移动机
-
因果、顺序、严格一致性判断
-
Lamport 时间戳算法的思想 结合图
-
法定数目 11 服务器
-
冗余掩盖故障
-
分布式互斥算法
-
拜占庭将军
-
数字签名
-
kerberos
-
三者Diffe-Hellmem
-
三段锁
-
NFS重复请求高速缓存
-
Coda储藏
-
远程写协议
题目二
-
代码迁移动机有哪些(三)
-
简述Lamport时间戳算法思想(六)
-
判断一致性(七)
-
基于法定数目计算读、写团体数(七)
-
拜占庭将军问题(三个忠诚将军达成一致性问题) (八)
-
使用公钥加密对信息进行数字签名的思想(九)
-
权能(ppt上的图)(九)
-
Diffie-Hellman建立共享秘钥的原理(三者)(九)
-
两阶段提交(八)
-
(十)
-
(十)
-
远程写操作(四)(七)
题目三
- 进程对资源的绑定类型
[外链图片转存中…(img-OSz3V5s9-1676206121381)]
-
法定数目,16台服务器,列出读、写团体数
-
解释访问、并发透明性
-
Lamport算法思想,结合图解释
[外链图片转存中…(img-0oGv2JZY-1676206121382)]
- 多线程服务器优点: 简顺阻
[外链图片转存中…(img-Uo7ox4HU-1676206121382)]
-
冗余掩盖故障的类型
-
两阶段提交思想,结合图解释
-
数字签名思想,结合图解释,Hash+私钥
-
三者建立共享密钥Diffle-Hellman
-
权能工作原理,结合图解释
-
NFS重复请求高速缓存,结合图解释
-
本地写协议,结合图解释
-
Coda回叫承诺,结合图解释
-
安全通道是什么