分布式系统原理

基本副本协议

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

副本控制协议要具有一定的对抗异常状态的容错能力,从而使得系统具有一定的可用性,同时副本控制协议要能提供一定一致性级别。

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

1. 中心化副本控制协议

中心化副本控制协议的基本思路是由一个中心节点协调副本数据的更新、维护副本之间的一致性。

  • 中心化副本控制协议的优点是协议相对较为简单,所有的副本相关的控制交由中心节点完成。并发控制将由中心节点完成,从而使得一个分布式并发控制问题,简化为一个单机并发控制问题。

  • 中心化副本控制协议的缺点是系统的可用性依赖于中心化节点,当中心节点异常或与中心节点通信中断时,系统将失去某些服务(通常至少失去更新服务),所以中心化副本控制协议的缺点正是存在一定的停服务时间

2. primary-secondary 协议

本文着重介绍一种非常常用的 primary-secondary (也称 primary-backup)的中心化副本控制协议。在 primary-secondary类型的协议中,副本被分为两大类,其中有且仅有一个副本作为 primary 副本,除 primary 以外的副本都作为 secondary 副本。维护 primary 副本的节点作为中心节点,中心节点负责维护数据的更新、并发控制、协调副本的一致性。

Primary-secondary类型的协议一般要解决四大类问题:*数据更新流程、数据读取方式、Primary
副本的确定和切换、数据同步(reconcile)*。

2.1 数据更新基本流程

流程 2.2.1: Primary-secondary 协议的数据更新流程如下:

    1.  数据更新都由 primary 节点协调完成。2.  外部节点将更新操作发给 primary 节点3.  primary 节点进行并发控制即确定并发更新操作的先后顺序4.  primary 节点将更新操作发送给 secondary 节点5.  primary 根据 secondary 节点的完成情况决定更新是否成功并将结果返回外部节点
  • 由于异常,第 4 步可能在有些副本上成功,有些副本上失败,在有些副本上超时。不同的副本控制协议对于第 4 步异常的处理都不一样。例如,在提供最终一致性服务的系统中,secondary 节点可以与 primary 不一致,只要后续 secondary 节点可以慢慢同步到与 primary 一致的状态即可满足最终一致性的要求。对于第 4 步的具体处理,本节先不展开讨论,在 2.4 中介绍一种基于 Quorum 的副本控制机制。

2.2 数据读取方式

与数据更新流程类似,读取方式也与一致性高度相关。

  • 如果只需要最终一致性,则读取任何副本都可以满足需求。

  • 如果需要会话一致性,则可以为副本设置版本号,每次更新后递增版本号,用户读取副本时验证版本号,从而保证用户读到的数据在会话范围内单调递增。

  • 使用 primary-secondary 比较困难的是实现强一致性。

这里简单讨论 primary-secondary 实现强一致性的几种思路

  • 第一、由于数据的更新流程都是由 primary 控制的,primary 副本上的数据一定是最新的,所以如果始终只读 primary 副本的数据,可以实现强一致性。如果只读 primary 副本,则 secondary 副本
    将不提供读服务。实践中,如果副本不与机器绑定,而是按照数据段为单位维护副本,仅有 primary
    副本提供读服务在很多场景下并不会造出机器资源浪费。

  • 第二、由 primary 控制节点 secondary 节点的可用性。当 primary 更新某个 secondary 副本不成功时,primary 将该 secondary 副本标记为不可用,从而用户不再读取该不可用的副本。这种方式依赖于一个中心元数据管理系统,用于记录哪些副本可用,哪些副本不可用。该方式通过降低系统的可用性来提高系统的一致性

  • 第三、基于 Quorum 机制。

2.3 primary 副本的确定与切换

在 primary-secondary 类型的协议中,另一个核心的问题是如何确定 primary 副本,尤其是在原primary 副本所在机器出现宕机等异常时,需要有某种机制切换 primary 副本,使得某个 secondary副本成为新的 primary 副本。

  • 通常的,在 primary-secondary 类型的分布式系统中,哪个副本是 primary 这一信息都属于元信息,由专门的元数据服务器维护。执行更新操作时,首先查询元数据服务器获取副本 primary 信息,从而进一步执行数据更新流程。

  • 切换副本的难点在于两个方面,首先,如何确定节点的状态以发现原 primary 节点异常是一个较为复杂的问题。在 2.3 中,详细介绍一种基于 Lease 机制确定节点状态的方法。再者,切换 primary后,不能影响副本的一致性。本文在 2.4.5 介绍一种基于 Quorum 机制确定新 primary 的方法。

2.4 数据同步

Primary-secondary 型协议一般都会遇到 secondary 副本与 primary 不一致的问题。此时,不一致的 secondary 副本需要与 primary 进行同步(reconcile)。通常不一致的形式有三种:

  • 一、由于网络分化等异常,secondary 上的数据落后于 primary 上的数据。对于第一种 secondary 数据落后的情况,常见的同步方式是回放 primary 上的操作日志(通常是redo 日志),从而追上 primary 的更新进度。

  • 二、在某些协议下,secondary 上的数据有可能是脏数据,需要被丢弃。所谓脏数据是由于primary 副本没有进行某一更新操作,而 secondary 副本上反而进行的多余的修改操作,从而造成secondary 副本数据错误。对于脏数据的情况,较好的做法是设计的分布式协议不产生脏数据

  • 三、secondary 是一个新增加的副本,完全没有数据,需要从其他副本上拷贝数据。如果 secondary 副本完全没有数据,则常见的做法是直接拷贝 primary 副本的数据,这种方法往往比回放日志追更新进度的方法快很多。但拷贝数据时 primary 副本需要能够继续提供更新服务,这就要求 primary 副本支持快照(snapshot)功能。即对某一刻的副本数据形成快照,然后拷贝快照,拷贝完成后使用回放日志的方式追快照形成后的更新操作。

3. 去中心化副本控制协议

去中心化副本控制是另一类较为复杂的副本控制协议。与中心化副本系统协议最大的不同是,去中心化副本控制协议没有中心节点,协议中所有的节点都是完全对等的,节点之间通过平等协商达到一致。从而去中心化协议没有因为中心化节点异常而带来的停服务等问题。

  • 去中心化协议的最大的缺点是协议过程通常比较复杂。尤其当去中心化协议需要实现强一致性时,协议流程变得复杂且不容易理解。由于流程的复杂,去中心化协议的效率或者性能一般也较中心化协议低。

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

4. 工程投影

  • GFS 中的 Primary-Secondary 协议。GFS 系统的副本控制协议是典型的 Primary-Secondary 型协议,Primary 副本由 Master 指定,Primary 副本决定并发更新操作的顺序。

  • PNUTS 中的 Primary-Secondary 协议。PNUTS 的副本控制协议也是典型的 primary-secondary 型协议。Primary 副本负责将更新操作向YMB 中提交,当更新记录写入 YMB 则认为更新成功。YMB 本身是一个分布式的消息发布、订阅系统,其具有多副本、高可用、跨地域等特性。

  • Niobe 中的 Primary-Secondary 协议。Niobe 协议又是一个典型的 primary-secondary 型协议。Niobe 协议中,primary 信息由 GSM 模块维护,更新操作由 primary 副本同步到 secondary 副本。

  • Dynamo/Cassandra 的去中心化副本控制协议。Dynamo / Cassandra 使用基于一致性哈希的去中心化协议。虽然 Dynamo 尝试通过引入 Quorum机制和 vector clock 机制解决读取数据的一致性问题,但其一致性模型依旧是一个较大的问题。

  • Chubby/Zookeeper 的副本控制协议。Chubby[13]和 Zookeeper 使用了基于 Paxos 的去中心化协议选出 primary 节点,但完成 primary节点的选举后,这两个系统都转为中心化的副本控制协议,即由 primary 节点负责同步更新操作到secondary 节点。

  • Megastore 的副本控制协议。虽然都使用了 Paxos 协议,但与 Chubby 和 Zookeeper 不同的是,Megastore 中每次数据更新操作都基于一个改进的 Paxos 协议的实例,而不是利用 paxos 协议先选出 primary 后,再转为中心化的primary-secondary 方式。

  • 其他系统的副本控制协议。Mola*/Armor*和 Big Pipe*也无一例外的使用了 Primary-secondary 协议控制副本。

参考:《分布式系统原理介绍》 - 刘杰

分布式系统原理 之2 基本副本协议相关推荐

  1. 分布式系统原理(9)Paxos 协议

    Paxos 协议 简介 Paxos 协议是少数在工程实践中证实的强一致性.高可用的去中心化分布式协议 Paxos 协议的流程较为复杂,但其基本思想却不难理解,类似于人类社会的投票过程.Paxos 协议 ...

  2. 分布式系统基本副本协议

    一.中心化副本控制协议 中心化副本控制协议的基本思路是由一个中心节点协调副本数据的更新.维护副本之间的一致性. 优点:协议相对较为简单,所有的副本相关的控制交由中心节点完成.并发控制也由中心节点完成. ...

  3. 分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议

    1,一致性协议 两阶段提交协议与Raft协议.Paxos协议 ①两阶段提交协议 在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败.当一个事务跨越多个节 ...

  4. 深度介绍分布式系统原理与设计

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1 概念 1.1 模型 1.2 副本 1.3 衡量分布式系 ...

  5. 两万字深度介绍分布式系统原理,一文入魂

    1 概念 1.1 模型 节点 在具体的工程项目中,一个节点往往是一个操作系统上的进程.在本文的模型中,认为节点是一个完整的.不可分的整体,如果某个程序进程实际上由若干相对独立部分构成,则在模型中可以将 ...

  6. 分布式系统原理 之9 CAP 理论

    分布式系统原理 CAP 理论 CAP 理论是由 Eric Brewer 提出的分布式系统中最为重要的理论之一[8].本文将 CAP 理论安排在原理部分的最后介绍是为了利用前面已经介绍过的几种分布式协议 ...

  7. 分布式系统原理 之6 两阶段提交协议

    分布式系统原理 两阶段提交协议 两阶段提交协议是一种经典的强一致性中心化副本控制协议[2][3].虽然在工程中该协议有较多的问题,但研究该协议能很好的理解分布式系统的几个典型问题. 1. 问题背景 两 ...

  8. 分布式系统原理 之4 Quorum 机制

    分布式系统原理 Quorum 机制 Quorum 机制是一种简单有效的副本管理机制.本节首先讨论一种最简单的副本控制规则write-all-read-one,在此基础上,放松约束,讨论 quorum ...

  9. 分布式系统原理 之3 Lease机制

    分布式系统原理 Lease机制 Lease 机制是最重要的分布式协议,广泛应用于各种实际的分布式系统中.即使在某些系统中相似的设计不被称为 lease,但我们可以分析发现其本质就是一种 lease 的 ...

最新文章

  1. 一个mongosee例子
  2. 下一个全球电子通道系统,一定是BCH!
  3. 安装nexus时遇到的一个问题
  4. Spring Cloud 微服务实战系列-Eureka注册中心(一)
  5. Python数据结构判断括号是否匹配
  6. Python打造qq音乐歌曲下载器
  7. 俺的三国武将观(一)
  8. c语言解决约瑟夫问题,C语言解决约瑟夫问题详解的代码
  9. 台达变频器s1参数设置_台达变频器的参数设定步骤
  10. 如何利用SFTP在远程服务器中保障文件传输安全
  11. 电阻为何是标准的及各精度的标准阻值表
  12. 2022-2028全球与中国零售电子商务软件市场现状及未来发展趋势
  13. Win11任务栏消息提醒功能如何开启教学
  14. java中的码点_Java中码点和码点单元 码点与字符串的互化
  15. hduoj 饭卡 java_饭卡 HDU - 2546
  16. 坚果云与服务器同步数据,坚果云设置选择性同步的操作方法
  17. 什么是Prometheus?
  18. 山东省首版次高端软件申报指导
  19. 5S 目视化管理(visual management)
  20. 41基于单片机列车烟雾浓度报警烟雾_甲烷报警装置设计(原理图+仿真工程+源代码+说明书+PPT)

热门文章

  1. vs运行时 文本可视化工具 无法点开_webpack 优化:2 款工具帮你找到构建速度“变慢”的原因...
  2. js检测鼠标是否在操作_原生JS趣味demo:炫酷头像鼠标追随效果的实现
  3. stringstream的用法
  4. 5招减少网站恶意文件上传
  5. linux常见问题及其解决方案集锦
  6. Linux调度系统全景指南(下篇)
  7. JDK中这些常用方法也有Bug
  8. 面试官问:ZooKeeper是强一致的吗?怎么实现的?
  9. PPIO创始人王闻宇:从PPTV到PPIO,创业路上的挑战与思考
  10. 下一代低延时直播CDN:HLS、RTMP 与UDP +WebRTC