第一章 概述
一个分布式系统是由多个通过网络互联的独立自治的计算节点组成,这些计算节点为了完成共同目标基于消息传递机制进行相互协作。
要点:
好处
客户端-服务器(Client-Server)模式,主-从(Master-Slave)模式,总线模式,对等(Peer-to-Peer)模式,混合模式
客户端-服务器(Client-Server)模式:
主-从(Master-Slave)模式:
主节点(Master)负责将总计算任务分解为多个子任务分发给各个从节点(Slave,也叫Worker节点)完成主节点监视各个从节点的任务执行情况,将执行失败的任务调度给其它的从节点完成主节点在分配任务是会参考各个从节点的当前负载情况。
总线结构:
不同节点之间通过虚拟总线相连 消息发送者不必知道接收者是谁,接收者也不知道发送者是谁
发送者和接收者之间用异步方式通信 一种松耦合架构 不同节点完成不同功能,分工协作
对等(Peer-to-Peer)模式:
系统中每个计算节点在任务分工上是完全对等的。
完全相同的软件在不同的计算机上运行,只是初始化参数不同
结构化P2P:不同节点之间的交互模式遵循固定规律
非结构化P2P:不同节点之间的交互模式没有固定规律
1.3 服务器为集群时,划分为几层?为什么划分?各层功能是什么?好处有哪些?
随着企业信息的不断扩大,企业级应用不再满足于简单的两层系统,而是向着三层和多层体系结构发展。分层主要是为重用和便于管理 ,能够很好的适应需求的变化。
划分为三层:表示层 应用层 数据层
功能:
好处:
负载均衡技术:负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器上。这样一来不仅可以承担更大的流量、降低服务的延迟,还可以避免单点故障造成服务不可用。
策略(7种):
一致性哈希算法的目标是对于K个请求,节点的上下线只会引起K/nodeTotal的key重新映射,而在节点稳定的时候,同一个key的每次请求映射都是一样的
一致性哈希算法实现原理:
把数据通过一定的hash算法处理后映射到环上;将机器通过hash算法映射到环上,以顺时针的方向计算,将所有对象存储到离自己最近的机器中。
(参考 https://blog.csdn.net/tingting256/article/details/52497749)
一致性哈希算法在保持了单调性的同时,还是数据的迁移达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力。
定义:
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。位于操作系统,计算机网络硬件等平台和应用层之间,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
常用中间件有哪些:
中间件的作用:
第二讲 分布式节点之间的通信技术
2.1 Socket
定义:
传输层和网络层提供给应用层的标准化编程接口(或称为编程接口)
类型:
流式套接字(面向连接) 数据报套接字(面向无连接) 原始套接字
2.2 并发服务技术 适用场景
单机
优点:每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;可以尽量减少线程加锁/解锁的影响,极大提高性能
缺点:逻辑控制复杂,需要和主程序交互;多进程调度开销比较大;
缺点:线程之间的同步和加锁控制比较麻烦;一个线程的崩溃可能影响到整个程序的稳定性;进程切换和创建清楚耗时
多机
适用:负载均衡适用于高访问量的业务,提高应用程序的可用性和可靠性。
2.3 远程过程调用(Remote Method Invocation, RMI)
定义:
使应用程序可以像调用本地节点上的过程(子程序) 那样去调用一个远程节点上的子程序。
实现:
具体见PPT 22页-31页 及其底下备注解释
四个核心组件:
分别是Client,Client Stub,Server以及Server Stub,这个Stub可以理解为存根。
客户端(Client),服务的调用方。
客户端存根(Client Stub proxy),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过OS网络远程发送给服务方。(TCP/UDP)
服务端(Server),真正的服务提供者。
服务端存根(Server Stub skeleton),接收客户端发送过来的消息,将消息解包,并分发rpc请求调用本地的方法。
RPC 调用过程:
(参考 https://www.cnblogs.com/swordfall/p/8683905.html)
(1) 客户端(client)以本地调用方式(即以接口的方式)调用服务;
(2) 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制);
(3) 客户端通过sockets将消息发送到服务端;
(4) 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化);
(5) 服务端存根( server stub)根据解码结果调用本地的服务;
(6) 本地服务执行并将结果返回给服务端存根( server stub);
(7) 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化);
(8) 服务端(server)通过sockets将消息发送到客户端;
(9) 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化);
(10) 客户端(client)得到最终结果。
2.4 面向消息中间件(MOM: Message Oriented Middleware)
定义:
提供了一种分布式消息队列服务,使得节点之间可以实现基于消息的形式灵活的异步通信。
异步的含义:发送方可以在任意时刻发出消息,不必等待接收方上线,更不必等待消息发送成功再做下一步工作;接收方不必以阻塞方式等待消息的到来。
基于MOM实现通信的优点:
2.5 Web Service技术(一种特殊的RPC技术)
定义:
为方便网络上不同节点之间互操作而定义的一套协议标准, 也可视为实现远程过程调用的一套协议标准。
Web Service主要包含哪些标准协议?
理解WSDL SOA UDDI HTTP XML等作用:
(参考 https://blog.csdn.net/zouyousu/article/details/83567545)
看看代码:
第三讲 分布式文件系统
3.1 分布式文件系统
定义:
分布式文件系统:将分布式系统中多个节点的存储资源整合在一起,向用户/应用程序呈现统一的存储空间和文件系统目录树。用户无需关心数据存储在哪个节点上。大文件被自动分块并分别存储到不同的节点上。
作用:
在用户看来就是一个大型的目录树。
安全机制:对读写文件有权限控制措施
可扩展性:支持通过增加节点扩充存储容量
高吞吐率:多副本可以提高数据吞吐率
解决了大容量存储和负载均衡的问题。
工作原理:
Namenode 节点流程及作用:
namenode是整个文件系统的管理节点。它维护着1.整个文件系统的文件目录树,2.文件/目录的元信息和每个文件对应的数据块列表。3.接收用户的操作请求。
namenode包含两个文件:FsImage(元数据镜像文件。存储某一时段NameNode内存元数据信息)和Editlog(操作日志文件)
NameNode维护着2张表:
1文件与数据块(block)列表的对应关系
2数据块与被存储的结点的关系。
DataNode:负责存储client发来的数据块block;执行数据块的读写操作;使用多备份策略。
第四讲 MapReduce模型和分布式计算框架
4.1 Mapreduce 设计算法即可,写伪代码,描述清楚
4.2 样例设计:
map函数处理网页请求的日志文件,并输出
map函数把source网页中每一个链接到target URL的结果输出为
(1)这里存在两个问题:第一,
(2)这里讲单词和URL组成key值(如"MapReduce:file1.txt"),将词频作为value,这样做的好处是可以利用MapReduce框架自带的Map端排序,将同一文档的相同单词的词频组成列表,传递给Combine过程,实现类似于WordCount的功能。
(3)Combine过程:经过map方法处理后,Combine过程将key值相同的value值累加,得到一个单词在文档在文档中的词频,如果直接输出作为Reduce过程的输入,在Shuffle过程时将面临一个问题:所有具有相同单词的记录(由单词、URL和词频组成)应该交由同一个Reducer处理,但当前的key值无法保证这一点,所以必须修改key值和value值。这次将单词作为key值,URL和词频组成value值(如"file1.txt:1")。这样做的好处是可以利用MapReduce框架默认的HashPartitioner类完成Shuffle过程,将相同单词的所有记录发送给同一个Reducer进行处理。
第五讲 时钟和分布式共识
5.1 抽象模型(理解)
交互模式
信道故障模式
节点故障模式
5.2 同步交互与异步交互比较
同步交互模式
异步交互模式
5.3 失效停止模式和拜占庭模式区别
失效停止模式(Fail-Stop Failure or Crash Failure)
拜占庭模式(Byzantine Failure)
5.4 物理时钟
实现方法:
方法一:每个节点都定期地与世界标准时间(UTC: Coordinated Universal Time )同步
缺点:(1)成本高;(2)大部分计算机都放在室内,接收不到UTC
方法二:每个节点定期地通过网络与时间服务器同步
缺点:时间服务器配备了GPS接收器。需要考虑传输延时
Cristian时间同步算法(重要)
给出T1-T4计算或者推导公式:
5.5 逻辑时钟
思想:
规则为:a先于b 当且仅当:C(a) < C(b) or C(a)=C(b) and ID(a)>ID(b)
但反过来不成立!因为可能a,b是不相关的。
节点维护逻辑时钟的算法
<本地逻辑时钟Ci,节点ID号i>
Cj 1 + max{ Cj, Ci }
5.6 分布式共识协议
介绍:
分布式系统由n个节点构成,其中最多有f个故障节点。每个节点Pi 都有自己的提案xi。这些节点之间通过运行“分布式共识协议”以达成一致的决策。
必须满足如下条件:
终止性:在有限时间内总能达成一致的决策。
共识性: 不同节点最终决策的结果是相同的。
合法性:决策的结果必须等于某个进程提出的提案。
用分布式共识协议解决多数据库镜像一致性问题?
答:客户端向所有数据库服务器都发送Update消息,然后在服务器之间运行“分布式共识协议”就多个客户端Update消息的消息内容和先后顺序问题达成一致。
同步模型下的分布式共识协议
初始化:假定每个节点的提案都是自然数。每个节点Pi 定义提案集合Si={xi}
协议:每个节点按周期运行如下逻辑,共运行f+1个周期:
(1)将自己的集合Si中的尚未广播过的值广播给其他所有节点;
(2)从其他节点接收到的提案值都放入集合Si(去掉重复的值)。
结束处理:
f+1个周期后,每个节点都取集合Si中最大(或最小)的值作为最终提案。
定理:按照以上协议运行结束后,每个节点获得的集合Si是相同的。
异步模型下的分布式共识协议
FLP定理:在异步通信模型下,只要有一个节点失效(失效停止模式,或拜占庭模式),就无法达成共识。
---------------------------------------------------------------------------------------------
考试及文档说明: