分布式系统原理三:副本协议

  • 副本控制协议:指副本按特定的协议流程控制副本数据的读写行为,使得副本满足一定的可用性和一致性要求的分布式协议。分为两类:中心化副本控制协议和去中心化副本控制协议

一:中心化副本控制协议

  • 由一个中心节点协调副本数据的更新、维护副本之间的一致性。
  • 优点:协议相对简单,所有副本相关的控制交由中心节点完成。
  • 缺点:系统的可用性依赖于中心化节点,当中心节点异常或者中心节点通信中断时,系统将失去某些服务。

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副本的确定与切换
    • 通常在primary-secondary类型的分布式系统中,哪个副本是Primary是属于元信息,由专门的元数据服务器维护。执行更新操作前先查询元数据管理服务器获取primary信息,再进行操作。
    • 切换副本的难度在于两个方面:
      • (1):如何确定节点的状态以及发现原primary节点异常时一个较为复杂的问题。
        基于Lease机制、基于Quorum机制。
      • (2):在原primary以及死机,如何确定一个secondary副本使得该副本上面的数据与原primary一致成为新的问题。
  • 由于分布式系统中可靠的发现节点异常需要一点的探测时间的,探测时间通常在10秒级别。 primary-secondary类型的分布式系统的最大缺点就是primary切换带来的一定时间的停服务时间。
  • d:数据同步
    • 通常的不一致情况:
      • (1): 由于网络分化等异常,secondary上面的数据落后primary上的数据。
      • (2):在某些协议下面可能有脏数据,需要被丢弃。
      • (3):secondary是新增的副本,完全没有数据,需要从其他副本拷贝数据。
    • 解决方法
      • 对于(1),常用的方法是回放primary上面的操作日志(通常是redo日志),从而追上primary的更新进度。
      • 对于(2),较好的方法就是在设计分布式协议不产生脏数据。也可以基于undo日志的方法删除脏数据。
      • 对于(3),直接拷贝primary数据,或者使用快照。
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章