-
副本控制协议:指副本按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。分为两类:中心化副本控制协议和去中心化副本控制协议
一:中心化副本控制协议
-
由一个中心节点协调副本数据的更新、维护副本之间的一致性。
-
优点:协议相对简单,所有副本相关的控制交由中心节点完成。
-
缺点:系统的可用性依赖于中心化节点,当中心节点异常或者中心节点通信中断时,系统将失去某些服务。
1: primary-secondary协议
-
primary-secondary又称为primary-backup,在协议中副本被分为两类,有且只有一个primary副本,其他的全部是secondary副本。
-
primary-secondary解决四大类问题:
-
数据更新流程
-
数据读取方式
-
Primary副本的确定和切换
-
数据同步
-
a:数据更新流程
-
(1):数据更新都有primary节点协调完成。
-
(2):外部节点将更新操作发送给primary节点。
-
(3):primary节点进行并发控制即确定并发更新操作的先后顺序。
-
(4):primary节点将更新操作发送给secondary节点。
-
(5):primary根据secondary节点的完成情况决定更新是否成功并将结果返回给外部节点。
-
b: 数据读取
-
(1):只读primary节点。
-
(2):由primary控制节点secondary的可用性,更新成功为可用,更新不成功为不可用。
-
(3): 基于Quorum机制。
-
如果只需要最终一致性,则读取任何副本都可以满足需求。如果需要会话一致性,则可以为副本设置版本号,每次更新后递增版本号,则用户读取副本时验证版本号,从而保证用户读到的数据都在会话范围内递增。想要最终一致性比较困难,由一下几种思路参考.
-
c: primary副本的确定与切换
-
(1):如何确定节点的状态以及发现原primary节点异常时一个较为复杂的问题。
基于Lease机制、基于Quorum机制。 -
(2):在原primary以及死机,如何确定一个secondary副本使得该副本上面的数据与原primary一致成为新的问题。
-
通常在primary-secondary类型的分布式系统中,哪个副本是Primary是属于元信息,由专门的元数据服务器维护。执行更新操作前先查询元数据管理服务器获取primary信息,再进行操作。
-
切换副本的难度在于两个方面:
-
由于分布式系统中可靠的发现节点异常需要一点的探测时间的,探测时间通常在10秒级别。 primary-secondary类型的分布式系统的最大缺点就是primary切换带来的一定时间的停服务时间。
-
d:数据同步
-
对于(1),常用的方法是回放primary上面的操作日志(通常是redo日志),从而追上primary的更新进度。
-
对于(2),较好的方法就是在设计分布式协议不产生脏数据。也可以基于undo日志的方法删除脏数据。
-
对于(3),直接拷贝primary数据,或者使用快照。
-
(1): 由于网络分化等异常,secondary上面的数据落后primary上的数据。
-
(2):在某些协议下面可能有脏数据,需要被丢弃。
-
(3):secondary是新增的副本,完全没有数据,需要从其他副本拷贝数据。
-
通常的不一致情况:
-
解决方法
二:去中心化副本控制协议
-
去中心化协议没有因为中心节点异常带来的停服务问题,缺点是协议过程通常比较复杂。交叉算法存储机制。