介绍

在分布式系统中,副本和备份是一个用来提供高可用性和一定的容错能力的手段和措施。HA(高可用性)在当前越来越成为一个趋势在一些移动计算的领域和一些失去连接的状态场景之下。在这篇笔记中,我会介绍一些副本备份的相关技术点,比如基于隶属度管理的组通信,还有被动和主动备份技术,以及最后的副本分区的一些情况。

1、副本在分布式系统中被用的非常的广泛,比如说被用于资源的缓存的访问,放置在代理服务器上或者说存在于客户端的本地机子上,对于源资源的一个拷贝。

2、副本的技术的出现加强了服务的性能,首先可以避免了请求服务的延迟,当远程访问源服务器资源的时候,第2点,提高了高可用性,当服务器宕机的时候,至少还有他的副本资源的存在,以至于在客户端失去连接的时候还能正常使用,这其实也是容错能力的一个表现。这里用一个数字来体现这一点,如果说服务器有2个副本,每个服务器宕机的概率为5%,只有当2个服务器都不可用的时候才会造成系统真正的不可用,概率p=1-0.05*0.05=0.9975,也就是说是99.75%,这已经是很一个高度可用的比例值了。

3、但是这里就会有一个比较重要的问题,已经有这么多的副本备份了,如何维护他们的一致性问题,数据不一致了,后果可很严重哦,比如说一些资金,银行等方面的,显然是不容有失的。

系统模型和组通信

各个副本其实是一个物理对象,存放在各个单一的机子上的。这里提供了一种组通信的机制用来协调他们之间的一致性。

系统模型

为了使得问题变得一般化,我们构造了一个基本的结构模型用来管理副本数据。在这个结构中,我们用到了一个主要的角色RM(Replication Manager)副本管理器,在这里,你可以把副本管理器就理解为一个Server服务端。所以这个结构就变成了常见的C-S的模型了。在这里每个副本管理器包含了每个对象的一个副本。

1、当客户端发出一个请求操作的时候,他并不是直接马上的发给RM,而是先到一个专门处理请求的组件,叫做front end,front end的作用才是通过消息传递与RM副本管理器通信的一个角色。

2、然后执行后面的5个阶段的过程:(1)、Requesting请求。(2)、Coordination协调。(3)、Execution执行阶段。(4)、Agreement一致性阶段。(5)、Response回复阶段。

3、在之前的章节中,我们提到过组通信中用到的covering algorithm覆盖算法,当在副本技术中,这里要求一个更高要求的动态隶属度方法,意味着在进程进入或者离开系统的时候,组的隶属度会发生改变。因此就衍生出了一个额外的服务叫做membership service服务。

容错服务

容错服务与上面提到的高可用的区别在于对于数据的正确性上的处理上,也就是说,当服务器挂了的时候,此时如果你的副本数据已经正确更新了,当然没问题,但是如果此时的你的副本上的数据还是旧的话,显然还达不到系统的要求,所以这里说的容错服务是对于数据一致性的要求。

1、在数据一致性的分类中,这里分为了2类:Linearizability consistency和sequential consistency。

Passive replication

Passive replication的意思是被动副本的意思,一句话说,就是当最初的RM副本管理器挂掉的时候,在这些备份的副本中会选出一个作为新的主要的备份管理器,将会重新恢复刚刚操作失败时的状态。被动副本技术的缺点在于比较高的沟通成本,在这里的过程会发生数次的来回的消息通信,无疑也会造成一定的延迟。而且当主副本上更新了数据的时候,必须one-to-one的方式更新备份副本上的数据,效率还是比较低下的。

Active replication

与上面的方式相对的是Active replication,积极的备份技术,如果在此模式下,如果服务器的RM挂了,将不会对系统的性能有任何的影响,剩下的副本管理器还是会继续的响应回复。所以积极的副本技术的原理就是他会向所有的副本管理器发出请求,然后请求会在所有的RM上跑一遍,然后客户端获取到所有的回复,最后第一个回复的结果将会被采纳。所以在积极副本技术中,其中的全局有序性就显得比较重要了。

HA服务例子:gossip结构,Bayou,Coda

在下面,将会列举出几个应用了副本技术使得服务变得高可用性的例子。

Gossip结构

1、gossip结构实现高可用的措施是通过副本管理器之间进行周期性的交换gossip message,为了是副本之间能及时获取到来自客户端的更新操作以此保持一致性。gossip服务提供2种类型的操作,query操作和update更新操作。

2、为了保持进程操作的有序性,每个请求采用了类似于一个vector timestamp时间戳向量的概念。当每次操作结束,就会更新新的时间戳向量的新的值。

3、每个gossip信息包含了2个项,一个是副本管理器RM的log,和副本的timestamp,日志是用来合并用的。

4、gossip结构并没有规定什么时候或者说在哪里进行副本管理器之间的信息交换,这里推荐了一种update-propagation更新传播的策略。

Bayou

Bayou系统是一个提供数据副本的高可用性但是在一致性的方面略微差一点的系统。他的副本形式是以数据库的形式保存的,因此可以支持增删改查的操作。Bayou的更新操作会被标记为暂存的临时的版本直到下一次的更新操作来到的时候,上次的更新操作才会被应用。更新的冲突需要一个独立的检验过程和合并过程。

Coda

Coda是一个文件系统,他的出现是为了弥补AFS文件系统的不足之处。Coda的一个为了提高可用性的核心措施是利用了数据的本地副本实现了HA特性。Coda的副本策略是乐观的,为什么这么说呢,他允许在网络分区的情况下,或者失去连接的条件下,对于副本数据进行修改的处理。然后依靠每个副本文件的Coda version vector(CVV)来提供足够的信息表明了文件的更新历史,以便最后做冲突的检测。

事务和副本数据

我们已经知道客户端请求单一操作在一系列的对象副本中。一个事务用在有副本对象的场景与无副本对象的场景的表现应该是要一样的。这个属性叫做one-copy serializability。还好,每个RM提供了一定的并发控制能力和恢复对象的能力。one-copy Serializability的实现依靠的是read-one和write-all的机理实现。怎么说呢?read-one指的是读操作只会在你一个单一的副本管理器RM上执行,毕竟只是读操作而已,而write-all则要在每个RM上应用到,所以他的体系结构要求,当到来一个写请求时,所有的RM都要执行一遍,至于请求怎么传达到各个副本管理器,不需要客户端一个个请求到每个RM里,RM之间可以自己交流,传播消息。

副本管理器的拷贝

副本管理器的拷贝复制是为了防止,RM意外发生宕机或者说通信失败,要求拷贝一个与他一样数据的RM,一遍能够选择另外的方式进行操作。

网络分区

网络的分区会导致副本管理器的group会本分成2个或者2个以上的子组,而子组之间由于分区的原因是无法通信的,所以这往往造成数据的不一致性。解决这个问题的办法叫available copies algorithm可用拷贝算法,应用在每个分区中,当分区已经被修复的时候,再进行冲突的验证。冲突的验证可以用Version vector版本向量标记写操作。在网络分区中,还有一个重要的概念叫virtual partition algorithm虚拟分区算法。

参考文献:<<Distributed Sysytems Concepts And Design>>原版第五版,author:George Coulouris,Jean Dollimore, Tim Kindberg,Gordon Blair

分布式系统阅读笔记(十八)-----副本备份技术相关推荐

  1. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...

    python3.4学习笔记(十八) pycharm 安装使用.注册码.显示行号和字体大小等常用设置 Download JetBrains Python IDE :: PyCharm http://ww ...

  2. windows内核开发学习笔记十八:IRP 处理的标准模式

    windows内核开发学习笔记十八:IRP 处理的标准模式 在 Windows 内核中的请求基本上是通过 I/O Request Packet 完成的. I/O manager ---> Dis ...

  3. Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件

    Polyworks脚本开发学习笔记(十八)-用SDK开发Polyworks插件 插件是由PolyWorks加载的动态链接库(DLL文件),然后查询Polyworks模块,以确定它们具有哪些功能,提供给 ...

  4. STM32复习笔记(十八) —— 高级定时器(输出比较)

    STM32复习笔记(十八) -- 高级定时器(输出比较) 1.配置步骤 1)选择计数器时钟 (内部,外部,预分频器) 2)将相应的数据写入TIMx_ARR and TIMx_CCRx寄存器中 3)可设 ...

  5. 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(八)—— 模型训练-训练

    系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...

  6. 技术人修炼之道阅读笔记(八)归纳法思维

    什么是归纳法? 所有的高级认知,都始于归纳法. 归纳法是根据一个事物具有的某种特质,推导出这类事物的所有对象都具有这种性质的推理方法.人们在日常生活中大概99%的时间都在使用归纳法,例如:从事物中总结 ...

  7. 嵌入式Linux驱动笔记(十八)------浅析V4L2框架之ioctl【转】

    转自:https://blog.csdn.net/Guet_Kite/article/details/78574781 权声明:本文为 风筝 博主原创文章,未经博主允许不得转载!!!!!!谢谢合作 h ...

  8. 分布式系统阅读笔记(五)-----远程调用

    介绍) 这篇笔记主要讲的是远程调用的主要2种形式,RPC(远程过程调用),RMI(远程方法调用),这2种方法作为远程调用的实现形式,对于我们理解他们的过程非常有用. 请求回复协议) 在远程调用中,一个 ...

  9. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

最新文章

  1. OpenMP知识点汇总
  2. 《预训练周刊》第19期:歧义短语的类量子语境性研究、自然语言处理中prompt方法的系统综述...
  3. 云宇宙iwemeta: 亚马逊全面进军元宇宙
  4. linux下汇编实例
  5. NYOJ 104 最大和
  6. c#.net 获取时间日期年月日时分秒生成自动文件名格式
  7. net4.0 程序没反应_@Java程序员,精通Spring,你不得不知道的那些书
  8. 杜教筛--51nod1239 欧拉函数之和
  9. Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字
  10. 使用Ext JS,不要使用页面做组件重用,尽量不要做页面跳转
  11. PyTorch小案例二
  12. js判断复选框是否被选中
  13. 力扣-80 删除有序数组中的重复项 II
  14. makefile函数集锦【转】
  15. h5 游戏 游戏框架 Phaser
  16. 数据分析案例-电影数据可视化分析
  17. dede后台系统基本参数空白怎么办?
  18. 高斯-勒让德求积公式及Matlab实现
  19. 计算机知识竞赛 翻译,英文简历之常见学科竞赛中英文翻译
  20. TCP/IP路由技术(第1卷)(第2版) + TCP/IP路由技术(第2卷)(第2版)

热门文章

  1. JS 烧脑面试题大赏
  2. 如何快速将AS2.0/AS3.0/fla/swf/ppt等课件产品转化为html5跨平台交互课件。
  3. 开篇-漫漫人生路-程序员
  4. python实现类似于visio_5款替代微软Visio的开源免费软件
  5. Python实现人脸口罩检测!这玩意太强大了啊!
  6. 知识图谱-基于图数据库的知识表示常用结构以及Nebula Graph的实现
  7. java的发展前景!
  8. Excel 2003函数应用完全手册
  9. 双拼输入法,设计方案
  10. 2018年终特辑:美通社TOP20最受媒体与公众关注新闻稿