点击上方蓝色字体,选择“设为星标”

优质文章,及时送达

前面的文章提到过副本是分布式系统中提升数据可用性,数据容错性,以及读吞吐的主要方式,对于多个副本数据一致性处理就是比较复杂且重要的话题。

CAP定理中我们知道,要设计满足强一致性,且在网络分区出现时还满足可用性的方案是不可能的,因此实际工程副本协议设计时,需要在可用性,一致性,分区容忍性等角度按照业务场景进行折中。

实现副本控制协议可以有中心化和去中心化两类实现方案。今天我们主要说一下中心化的副本控制机制,下一篇介绍去中心化的控制机制。

中心化的控制机制的主要思路是,建立一个中心化的协调节点进行数据操作协调,所有操作先走这个中心节点,进而实现副本更新,数据一致性的处理。

其架构方案简单清晰,所有副本相关控制操作交给中心节点完成,并发控制由一个中心节点完成,使得分布式并发控制问题简化为单机并发控制问题。

也就是在多个节点同时需要修改副本数据时,需要解决因并发造成的“写写”,“读写”等并发冲突问题,单节点场景下的并发控制总是更简单一些,一般通过加锁方式就可以解决。

分布式场景中处理并发大部分情况也是通过加锁解决的,但是分布式场景下因为没有中心化节点方便的进行统一锁管理,就需要完全分布式的锁系统,这样整个设计方案就会更复杂。

中心化节点可以很好的解决这种复杂问题,但是带来的风险是整个系统的可用性需要依赖这个中心节点,一旦中心节点不可用或是网络问题造成中断,整个系统将暂时失去服务能力,这也是中心化系统具备的单点问题。

中心化副本控制协议主要有primary-secondary协议。副本被分为两类,只有一个副本作为paimary副本,其他副本为secondary副本。primary副本作为中心节点,负责副本的数据维护,如数据更新,并发控制,协调一致性等操作。

如果让你设计一个基于primary-secondary协议的中心化控制副本系统你需要怎么做呢?

我们需要解决以下几个主要流程问题:

  1. 数据更新流程

  2. 数据读取流程

  3. primary副本如何确定,出现问题时如何切换

  4. 数据多个副本之间如何同步

数据更新流程

  • 在数据进行更新时,外部节点数据都统一交给primary副本,由其进行协调完成。

  • primary节点确定外部节点请求的更新操作数据,完成并发控制。

  • primary节点将更新操作发送给secondary节点。

  • primary更加secondary节点完成情况决定更新成功与否,进而将响应返回到外部节点。

这种方案中存在这样一个问题,如果primary节点需要同步N个secondary副本,受限于网络吞吐,每个secondary副本会占用网络出口的1/N。

所以为了解决这种问题,一些系统如GFS,采用接力同步数据的方式,即当primary将更新发送给第一个secondary副本后,第一个secondary副本发送给第二个secondary副本进行数据同步,以此类推以解决parimary网络吞吐的限制。

数据读取方式

数据读取方式的处理决定了数据一致性的强弱,如果只需要最终一致性,则读取任何副本都可以满足需求。

如果需要会话强一致性,需要为每个副本设置版本号,每次更新之后维护递增版本号,用户读取副本时验证版本号,从而实现用户读取数据在会话范围内的单调递增。

采用primary-secondary协议最困难的是实现强数据一致性的要求。

我们可以想一下,在工程实践过程中如果有强一致数据要求你会有几种方案呢?

我大概想起有三种,常用的相信大家会采用类似于读写主库的方案以解决主从同步延迟带来的一致性问题吧。

同样在primary-secondary协议中,由于数据更新流程都是由primary控制的,primary副本数据一定是最新的,如果始终只读primary副本中的数据,可以实现强一致性。

但如果读都放到了primary副本上,secondary副本将不会在提供读服务,将primary副本分散到整个集群当中,每台机器上都有一些数据的primary副本,也有另一些secondary副本,从而使得某台服务器具有读写服务能力,这样secondary完全是数据安全性的一种备份了,很大一定程度限制了分布式系统的优点。

primary-secondary协议中,primary副本也控制着secondary节点的可用性,当primary更新某个secondary副本不成功时,会将此secondary副本标记为不可用,从而用户不再读取该不可用的副本。

不可用副本可以继续尝试从primary副本同步数据,当两者完成数据同步后,primary副本将此secondary副本标记为可用副本。这样在整个集群中,这个时间段的所有副本都是可用的,也是可读的,所以在某个确定的时间段内,一个secondary副本和primary副本之间要么是一致的最新状态,要么是标记为不可用的,从而满足了强一致性的要求。

当然这种方案需要依赖于一个中心元数据管理系统,用于记录哪些副本可用,哪些副本不可用,一定程度上降低了可用性来提高一致性。

primary副本如何确定,出现问题时如何切换

primary-secondary协议中,primary副本如何确定,出现问题时如何切换是个核心问题。当原primary副本宕机时,如何在所有机器中按某种切换机制选出primary副本,使得secondary副本更新为primary副本。

通常在primary-secondary协议中,哪个副本作为primary这个信息是由元数据管理服务决定和维护的,每次做更新操作时,首先查询元数据服务获取副本primary信息,进一步执行数据更新流程。

分布式系统中对节点可靠性发现,需要依赖于探测系统对心跳的分析,所以心跳间隔存在了秒级的延迟。也就是说一旦primary异常,需要秒级发现时间,系统才可以对primary切换,也就意味着这个秒级内系统不能提供更新服务,如果primary提供读服务,这段时间内整个系统甚至不能提供读服务。所以primary-secondary协议带来的最大问题是primary切换带来的服务停顿不可用问题。

数据多个副本之间如何同步

数据不一致的secondary副本需要和primary副本完成数据同步,以达成数据一致。

数据不一致往往由于以下几种问题造成的:

  1. 由于网络异常,secondary上数据落后于primary上的数据。

  2. 在同步primary数据过程中,由于secondary内部问题造成的数据更新操作失败,比如有了多余的修改操作,造成数据问题。

  3. 系统中新增加了一个secondary副本,其完全没有数据,需要从其他副本进行数据复制。

针对于第一种情况,常见的同步方式是,回放primary上的操作日志,通常是redolog,从而追上primary上的数据进展。

对于第二种脏数据情况,比较好的做法是设计分布式协议避免脏数据,一旦发现副本存在脏数据,直接丢弃脏数据副本,此副本数据归零。还可以基于undolog方式,将脏数据删除。

第三种情况,如果新的secondary副本完全没有数据,可以直接将primary副本数据完全拷贝到此副本上,这种方案远比回放追加数据更快速有效。需要primary副本支持我们常说的snapshot功能,可以对某一刻的数据形成快照,然后拷贝数据,拷贝完成后使用回放日志方式追加快照之后的更新操作,完成增量数据同步。

今天我们主要介绍了基于primary-secondary协议的中心化副本数据复制方式,整体上我们可以看到很多一致性协议的算法和工具比如paxos,raft,zk,etcd甚至mysql等的一些影子,他们整体设计思想上存在诸多类似,只不过会有不同的设计取舍,同时在不同的业务要求下做事情的侧重点也不一样,如果意犹未尽可以基于raft自己搞一个多副本同步组件了,下一篇我们聊聊去中心化的副本控制方式。

分布式概念-中心化副本控制机制相关推荐

  1. 分布式概念-去中心化副本控制实现

    去中心化的副本控制区别于前面文章介绍的中心化副本控制在于,其所有节点都是对等的,不存在中心化节点,所有节点之前互相协商,以达到最终一致. 前面介绍过中心化节点控制最大的问题在于,中心节点存在单点风险, ...

  2. 计算机简史:从分布式到中心化的博弈螺旋

    作者 | Eric Elliott 翻译 | 王琳姗 责编 | Carol 出品 | 区块链大本营(blockchain_camp) 作为应用程序开发商,我们有责任为用户的隐私和信息安全考虑.用户应该 ...

  3. 分布式入门之3:副本控制

    按某特定流程控制副本数据的读写行为,使副本满足一定的可用性及一致性的分布式协议. 中心化副本控制协议: primary-secondary协议 只有一个副本作为主副本,其余都是从副本.主副本作为中心节 ...

  4. 分布式概念-分布式事务,并发处理协议

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 提到分布式系统,分布式事务是经常被大家提起的话题,也是经常在我们编码或是系统设计时遇到的问题,很常见. 如果让大家说一种解决 ...

  5. 区块链去中心化的生命之源:“DPOS(委托权益证明)共识机制”

    区块链去中心化的生命之源:"DPOS(委托权益证明)共识机制" 原创2018-04-24[水伯]战略忽悠局政委水伯 移动网络时代唯一壁垒就是认知,周二有约给思想洗澡让认知破壁! D ...

  6. 利用IPFS构建自己的去中心化分布式Wiki系统

    IPFS全称InterPlanetary File System,中文名:星际文件系统,是一个旨在创建持久且分布式存储和共享文件的网络传输协议. 它是一种内容可寻址的对等超媒体分发协议.在IPFS网络 ...

  7. 区块链 分布式账本和 去中心化网络

    去中心化网络 我们的资产(比特币),是分布式的存储在网络节点种的,也成为分布式账本 承载分布式账本的网络就叫去中心化网络 分布式账本 中心化在线支付系统,是在一台服务器上分别开设 account/pw ...

  8. 用区块链改变人工智能:去中心化带来数据新范式

    近年,从围棋到人类水平的语音识别,人工智能(AI)研究者终于在他们几十年一直努力探索的领域取得了突破.取得突破进展的关键一点是研究者们可以收集巨量的数据并「学习」这些数据,从而将错误率降低到可接受范围 ...

  9. 当在线纠纷解决遇到区块链:去中心化司法的诞生

    在线纠纷解决(ODR)诞生于20世纪90年代.随着互联网成为人们日常生活的一部分,许多人试图利用互联网建立虚拟法庭,以大幅度提高纠纷解决程序的效率.然而,这一愿望至今未能完全实现.在某种程度上,早期的 ...

最新文章

  1. 数据结构与算法(6-4)线索二叉树
  2. 设计事件驱动的微服务
  3. 再分享一个竞品分析报告
  4. K8S 部署rabbitmq集群
  5. Chapter 2 Open Book——5
  6. 前端开发大师修炼指南
  7. Python-初体验
  8. 【转载】RSA signatures with TPM2.0 and OpenSSL
  9. L1-017 到底有多二 (15 分) — 团体程序设计天梯赛
  10. mac ox php.ini 位置,MAC Osx PHP安装指导
  11. 【毕业设计项目】基于单片机的万能红外遥控器 - 嵌入式 物联网 stm32
  12. 一起学Python_Day05_常用模块及相关操作
  13. 【转载】Oracle之同义词(SYNONYM)
  14. db2怎么限定查询条数_查询数据限制显示条数
  15. 关于浏览器提示“隐私设置错误/证书错误导航已阻止”之 网站证书过期解决方案
  16. 计算机输入输出方式的应用,[原创]计算机组成原理之输入输出系统题目及解答...
  17. 抖音引流必须知道的三个要点!!!!
  18. 创建群晖共享文件夹,并进行电脑访问
  19. 今天14:00 | NeurIPS 专场三 青年科学家专场
  20. 图像低频、高频信息的理解

热门文章

  1. 【学习笔记】超简单的多项式三角函数(含全套证明)
  2. 【网络流】学习笔记:一次理解网络流!
  3. mysql 多数据库文件_今天突然发现我的Linux下MySQL数据库目录多了好多文件
  4. 简述事件接口与事件适配器的联系与区别_设计模式——适配器模式
  5. Chrome 被曝 0day 漏洞,可让黑客获取用户数据
  6. 开源(Open Source)那些事儿 (一)
  7. JAVA学习笔记--数组初始化
  8. 阿里云文件存储和自我管理的云解决方案的TCO比较
  9. 阿里巴巴笔试题-马尔科夫(HMM)的特征
  10. 2、String相关问题