分布式系统原理(3)--副本控制协议

2、基本副本协议

副本控制协议指按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。副本控制协议要具有一定的对抗异常状态的容错能力,从而使得具有一定的可用性,同时要能提供一定一致性级别。由CAP原理可知,设计满足强一致性,且出现任何网络异常时都可用的副本协议是不可能的。故需在可用性、一致性与性能等各要素间按照具体需求折中。

副本控制协议可分为两大类:“中心化(centralized)副本控制协议”和“去中心化(decentralized)副本控制协议”

(1)中心化副本控制

l  基本思路:由一个中心节点协调副本数据的更新、维护副本之间的一致性。

l  优点:简单,使得分布式并发(多节点同时修改副本)控制问题,简化为中心节点单机并发控制问题。使用方法:加锁等

l  缺点:系统的可用性依赖于中心化节点,当中心化节点异常或与中心节点通信中断时,系统将失去某些服务,也就是存在一定的停服务时间

(2)primary-secondary协议

也称primary-backup,是一种非常常用的中心化副本控制协议。该协议中副本分两大类,有且仅有一个副本作为primary副本,剩余副本都作为secondary副本。维护primary副本的节点作为中心节点,负责维护数据的更新、并发控制、协调副本的一致性。primary-secondary协议一般要解决四大问题,数据更新流程、数据读取方式、primary副本的确定和切换、数据同步(reconcile)。

(a)数据更新基本流程

1)数据更新都是由primary节点协调完成。

2)外部节点将更新操作发给primary节点

3)primary节点进行并发控制即确定并发更新操作的先后顺序

4)primary节点将更新操作发送给secondary节点

5)primary根据secondary节点的完成情况决定更新是否成功并将结果返回外部节点

上述4步骤,若primary同时发送,则secondary的更新吞吐受primary总网络带宽限制,可改进使用接力方式同步,但由于存在异常,可能更新失败,如何处理来保证一致性?

(b)数据读取方式

与一致性高度有关

若最终一致性,则读取任何副本都可以;若会话一致性,则可为副本设置版本号,每次更新后递增版本号,读取时验证版本号,保证在会话范围内单调递增;实现强一致性困难。下面描述几种实现强一致性思路:

1.primary永远是最新的,故只读primary副本,secondary副本不提供读服务。只要primary副本分散在集群中,即使只有primary副本提供读写服务,也可充分利用集群机器资源。

2.由primary节点控制secondary节点的可用性。当primary更新某个secondary副本不成功时,primary将其标志为不可用。缺点:依赖于一个中心元数据管理系统,用于记录哪些副本可用,哪些不可用。通过降低系统的可用性来提高系统的一致性。

3.基于Quorum机制

(c)primary副本的确定与切换

切换难点:如何确定节点的状态以发现原primary节点异常,方法:基于Lease机制确定节点状态的方法;切换primary后,不能影响副本的一致性。若原primary宕机,如何保证新primary与其一致,方法:基于Quorum机制确定新primary的方法

(d)数据同步

不一致的secondary副本需要与primary进行同步

不一致的形式有三种:

一、由于网络分化等异常,secondary的数据落后于primary的数据;二、secondary的数据可能是脏数据,需要被丢弃(脏数据是由于primary副本没有进行某一更新操作,但secondary副本反而进行的多于的修改操作,造成secondary副本数据错误);三、secondary是新增副本,无数据,须从其他副本上拷贝数据。

解决方法:

一、回放primary的操作日志(redo日志),追上primary更新进度;二、设计的分布式协议不产生脏数据,或很低概率,一旦发生直接丢弃该副本,或基于undo日志删除脏数据;三、直接拷贝primary副本的数据,但拷贝数据时primary副本需能够继续提供更新服务,要求primary副本支持快照(snapshot)功能。即对某一刻的副本数据形成快照,然后拷贝快照,拷贝完成后使用回访日志的方式追快照形成后的更新操作。

(3)去中心化副本控制协议

l  协议中所有节点完全对等,节点间通过平等协商达到一致。

l  优点:没有因为中心节点异常而带来的停服务等问题,个别节点异常不会对总体造成太大影响

l  缺点:协议过程比较复杂,效率或性能较中心化协议低。

l  工程应用:Paxos是唯一在工程中得到应用的强一致性去中心化副本控制协议。

(4)工程投影

(a)GFS中的Primary-Secondary协议

GFS中primary副本由Master执行,primary副本决定更新顺序。GFS中,更新操作的数据由客户端提交,并在各个副本之间流式传输,副本依次传递更新。该过程由primary控制。

(b)PNUTS中的primary-secondary协议

primary副本负责将更新操作向YMB中提交,当更新记录写入YMB则认为更新成功。YMB是一个分布式消息发布、订阅系统,具有多副本、高可用、跨地域等特性。secondary副本向YMB订阅primary的更新操作,当收到更新操作后,secondary副本更新本地数据。

(c)Niobe中的primary-secondary协议

Niobe协议中,primary信息由GSM模块维护,更新操作由primary副本同步到secondary副本

(d)Dynamo/Cassandra的去中心化副本控制协议

基于一致性哈希的去中心化协议

(e)Chubby/Zookeeper的副本控制协议

使用基于Paxos的去中心化协议选出primary节点,但完成primary节点选举后,再转为中心化的副本控制协议

(f)Megastore的副本控制协议

Megastore中每次数据更新操作都基于一个改进的Paxos协议的实例。

(g)其他系统的副本控制协议

Mola*/Armor* 和 Big Pipe*也都使用了primary-secondary协议控制副本。


猜你喜欢

转载自blog.csdn.net/summer00072/article/details/80713172