分布式基本副本控制协议

注:引用分布式原理

      副本控制协议指按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。副本控制协议要具有一定的对抗异常状态的容错能力,从而使得系统具有一定的可用性,同时副本控制协议要能提供一定一致性级别。由 CAP 原理(在 2.9 节详细分析)可知,要设计一种满足强一致性,且在出现任何网络异常时都可用的副本协议是不可能的。为此,实际中的副本控制协议总是在可用性、一致性与性能等各要素之间按照具体需求折中。副本控制协议分为两大类: “中心化(centralized)副本控制协议”和“去中心化(decentralized)副本控制协议”。

       中心化副本控制协议的基本思路是由一个中心节点协调副本数据的更新、维护副本之间的一致性。。中心化副本控制协议的优点是协议相对较为简单,所有的副本相关的控制交由中心节点完成。并发控制将由中心节点完成,从而使得一个分布式并发控制问题,简化为一个单机并发控制问题。所谓并发控制,即多个节点同时需要修改副本数据时,需要解决“写写”、“读写”等并发冲突。单机系统上常用加锁等方式进行并发控制。对于分布式并发控制,加锁也是一个常用的方法,但如果没有中心节点统一进行锁管理,就需要完全分布式化的锁系统,会使得协议非常复杂。中心化副本控制协议的缺点是系统的可用性依赖于中心化节点,当中心节点异常或与中心节点通信中断时,系统将失去某些服务(通常至少失去更新服务),所以中心化副本控制协议的缺点正是存在一定的停服务时间。

     下面着重介绍一种非常常用的 primary-secondary (也称 primary-backup)的中心化副本控制协议。在 primary-secondary 类型的协议中,副本被分为两大类,其中有且仅有一个副本作为 primary 副本,除 primary 以外的副本都作为 secondary 副本。维护 primary 副本的节点作为中心节点,中心节点负责维护数据的更新、并发控制、协调副本的一致性。
 Primary-secondary 协议的数据更新流程
        1.  数据更新都由 primary 节点协调完成。
        2.  外部节点将更新操作发给 primary 节点
        3.  primary 节点进行并发控制即确定并发更新操作的先后顺序
        4.  primary 节点将更新操作发送给 secondary 节点
        5.  primary 根据 secondary 节点的完成情况决定更新是否成功并将结果返回外部节点

上述基本更新流程体现了 primary-secondary 协议的更新流程的基本思路。其中第 4 步 primary 节点将更新操作发送到 secondary 节点时,往往发送的也是更新的数据。在工程实践中,如果由 primary 直接同时发送给其他 N 个副本发送数据,则每个
secondary 的更新吞吐受限于 primary 总的出口网络带宽,最大为 primary 网络出口带宽的 1/N。为了解决这个问题,有些系统(例如,GFS),使用接力的方式同步数据,即 primary 将更新发送给第一个 secondary 副本,第一个 secondary 副本发送给第二 secondary 副本,依次类推。由于异常,第 4步可能在有些副本上成功,有些副本上失败,在有些副本上超时。不同的副本控制协议对于第 4 步异常的处理都不一样。例如,在提供最终一致性服务的系统中,secondary 节点可以与 primary 不一
致,只要后续 secondary 节点可以慢慢同步到与 primary 一致的状态即可满足最终一致性的要求

       数据读取方式是 primary-secondary 类协议需要解决的第二个问题。与数据更新流程类似,读取方式也与一致性高度相关。如果只需要最终一致性,则读取任何副本都可以满足需求。如果需要会话一致性,则可以为副本设置版本号,每次更新后递增版本号,用户读取副本时验证版本号,从而保证用户读到的数据在会话范围内单调递增。使用 primary-secondary 比较困难的是实现强一致性。

       数据同步Primary-secondary 型协议一般都会遇到 secondary 副本与 primary 不一致的问题。此时,不一致
的 secondary 副本需要与 primary 进行同步(reconcile)。通常不一致的形式有三种:一、由于网络分化等异常,secondary 上的数据落后于 primary 上的数据。二、在某些协议下,secondary 上的数据有可能是脏数据,需要被丢弃。所谓脏数据是由primary 副本没有进行某一更新操作,而 secondary 副本上反而进行的多余的修改操作,从而造成secondary 副本数据错误。三、secondary 是一个新增加的副本,完全没有数据,需要从其他副本上拷贝数据。对于第一种 secondary 数据落后的情况,常见的同步方式是回放 primary 上的操作日志(通常是redo 日志),从而追上 primary 的更新进度


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值