按某特定流程控制副本数据的读写行为,使副本满足一定的可用性及一致性的分布式协议。
中心化副本控制协议:
primary-secondary协议
只有一个副本作为主副本,其余都是从副本。主副本作为中心节点负责数据更新、控制协调一致性。
四大问题:
1. 写
> 写由主完成
> 外部写请求发给主
> 主进行并发控制,即确定并发请求的先后顺序
> 更新操作发给从节点
GFS采用接力方式传递数据,以控制出口带宽。如果是最终一致性的系统,主从是可以不一致的,只需要后续慢慢同步到一致状态。
Quorum:只需要完成W个副本的更新。
> 根据从节点完成情况,决定怎么返回给外部
2. 读
最终一致:那随便读哪个副本
会话一致:在写/更新时,设置副本版本号,读时验证版本号即可保证在会话内单调递增
强一致性实现思路:
只读主副本。这在副本以数据段为单位时,并不会浪费机器资源,因为各副本的主也是分散在各机器上的。
主节点控制:主节点在更新从节点的数据时,如果失败标记其为不可用。使用一个中心元数据管理系统来记录哪些不可用。外部查中心元数据确定哪个可用。
Quorum机制:除了只读主,还可以按quorum中提及的,读R个,取最高版本号,直到读到W个副本。
3. 主副本确定及切换
切换要解决的无非两个问题:
a. 如何确定主节点异常?
lease机制。
b. 异常后应该切到哪个从节点?
异常后强一致性的服务要求是目标从节点必须与原主节点的数据一致。这其实与强一致性下读从节点是同一问题。可用Quorum机制,读R个,取最高版本号,再同步至W个节点,造成最高版本号的数据已经写了W份的结果,满足quorum机制写成功的要求。
primary-secondary协议的缺点就是主从切换时,会由于探测主节点异常存在时间窗口,而导致服务暂时不可用。
4. 数据同步
不一致的情况下,需要同步。不一致的情况主要有3种:
1. 网络分化等导致从节点上数据落后于主节点数据;
回放主上日志
2. 从节点上是脏数据;
设计分布式协议以不产生从节点上脏数据
3. 从节点是新增节点。
设置快照,拷贝快照;再回放快照后的部分
例:GFS,PNUTS,Niobe,
去中心化副本控制协议:
没有中心副本,各节点通过协商达到某种一致状态,因此避免了primary-secondary协议中主从切换时带来的停服务问题。
但流程复杂。paxos。
例:Dynamo/Cassandra一致性hash,一致性模型有问题,使应用使用复杂度上升。
Chubby/Zookeeper:基于类paxos,选中primary,随后转为primary-secondary控制协议。
Megastore:完全paxos,不转为主从控制。

转载于:https://www.cnblogs.com/qqmomery/p/5358271.html

分布式入门之3:副本控制相关推荐

  1. 分布式概念-中心化副本控制机制

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前面的文章提到过副本是分布式系统中提升数据可用性,数据容错性,以及读吞吐的主要方式,对于多个副本数据一致性处理就是比较复杂且 ...

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

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

  3. 1_simulink简单入门_simulink仿真PID控制

    1_simulink简单入门_simulink仿真PID控制 2_simulink搭建RCL_电阻电感电容模块 毕业前想去做物联网还是或者linux,结果玩了一年多的电机控制,早就深知matlab/s ...

  4. 分布式入门,怎样用PyTorch实现多GPU分布式训练

    这篇文章旨在阐述训练大规模深度学习模型时的分布式计算思想. 选自 Medium,作者:Ayan Das,机器之心编译,参与:Nurhachu Null.路. 具体来讲,本文首先介绍了分布式计算的基本概 ...

  5. CRUSH算法 - 可控、可伸缩、分布式地归置多副本数据

    论文概况 论文名称:CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data 论文作者:Sage A. Weil ...

  6. R语言入门4---R语言流程控制

    ​ 流程控制语句在任何语言中都是非常重要的,通过流程控制语句编程者能够根据业务逻辑在程序中设计合理的循环.分支,实现程序各种各样强大的功能.一般实现任一算法的控制结构都可以分为顺序结构.分支结构.循环 ...

  7. Apollo自动驾驶入门课程第⑩讲 — 控制(下)

    目录 1. 线性二次调节器 2. 模型控制预测 3. 总结 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 昨天 Apollo自动驾驶课程马上进入尾声,在无人驾驶技 ...

  8. Apollo自动驾驶入门课程第⑨讲 — 控制(上)

    目录 1. 简介 2. 控制流程 3. PID控制 4. PID优劣对比 本文转自微信公众号:Apollo开发者社区 原创: 阿波君 Apollo开发者社区 9月26日 上周我们发布了无人驾驶技术的  ...

  9. simulink入门2--机器人控制系统仿真

    文章目录 1. 概述 2. 控制律设计 3. 收敛性 4. 仿真实例步骤 4.1 仿真概述 4.2 simulink窗口 4.3 新建"Blank Model", 4.4 构建si ...

最新文章

  1. Python os.getcwd() 方法
  2. mysql useradd_useradd失败
  3. koa-router让人迷惑的文档和源码实现
  4. 小蠢笔记:从继承特性来看构造函数
  5. MATLAB从入门到精通-matlab图像处理标记点追踪识别程序
  6. Windows任务管理器 explorer 进程
  7. 《linux下sudo服务的使用》RHEL6
  8. python计算期望值_机器学习:计算方差时为何除以n-1
  9. 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题
  10. selenium的基本使用
  11. 缓存jQuery对象来提高性能
  12. python 选择题 多线程_python多线程练习题
  13. 非常详细的机器学习知识点汇总(二)之SVM23问
  14. keli4 指针运算_如何在KEIL中使用MicroLIB | 学步园
  15. 飞秋下载 官方唯一的下载地址
  16. 阿里修炼秘籍,如何快速成长的几个技巧?
  17. git 加速代理设置,单仓库设置代理,指定仓库设置单独代理
  18. express应用中ajax结合模板引擎ejs.js渲染页面
  19. JVM Runtime Data Area(运行时数据区中的堆/栈/方法区讲解)
  20. python杂志订阅系统详细设计_系统详细设计

热门文章

  1. 删除隐藏版本信息 版本回退_Git系列之-分布式版本控制Git详解
  2. python创建子类_Python线程创建子类?
  3. DNS域名解析服务配置会不会?
  4. 各种网络监控拓扑图,十分齐全!
  5. 阿里云 FaaS 架构设计与创新实践
  6. 如何在 Knative 中部署 WebSocket 和 gRPC 服务?
  7. 从零开始入门 K8s| K8s 的应用编排与管理
  8. Knative 初体验:CICD 极速入门
  9. python找人,PythonOpenCV:查找未知人物
  10. 合并两个有序数组python_Python3合并两个有序数组代码实例