基于Quorum投票的冗余控制算法

Quorom 机制,是一种分布式系统中常用的,用来保证数据冗余和最终一致性的投票算法,其主要数学思想来源于鸽巢原理

在有冗余数据的分布式存储系统当中,冗余数据对象会在不同的机器之间存放多份拷贝。但是同一时刻一个数据对象的多份拷贝只能用于读或者用于写。

该算法可以保证同一份数据对象的多份拷贝不会被超过两个访问对象读写。

算法来源于[Gifford, 1979][3][1]。 分布式系统中的每一份数据拷贝对象都被赋予一票。每一个操作必须要获得最小的读票数(Vr)或者最小的写票数(Vw)才能读或者写。如果一个系统有V票(意味着一个数据对象有V份冗余拷贝),那么这最小读写票必须满足:

  1. Vr + Vw > V
  2. Vw > V/2

第一条规则保证了一个数据不会被同时读写。当一个写操作请求过来的时候,它必须要获得Vw个冗余拷贝的许可。而剩下的数量是V-Vw 不够Vr,因此不能再有读请求过来了。同理,当读请求已经获得了Vr个冗余拷贝的许可时,写请求就无法获得许可了。

第二条规则保证了数据的串行化修改。一份数据的冗余拷贝不可能同时被两个写请求修改。

算法的好处

在分布式系统中,冗余数据是保证可靠性的手段,因此冗余数据的一致性维护就非常重要。一般而言,一个写操作必须要对所有的冗余数据都更新完成了,才能称为成功结束。比如一份数据在5台设备上有冗余,因为不知道读数据会落在哪一台设备上,那么一次写操作,必须5台设备都更新完成,写操作才能返回。

对于写操作比较频繁的系统,这个操作的瓶颈非常大。Quorum算法可以让写操作只要写完3台就返回。剩下的由系统内部缓慢同步完成。而读操作,则需要也至少读3台,才能保证至少可以读到一个最新的数据。

Quorum的读写最小票数可以用来做为系统在读、写性能方面的一个可调节参数。写票数Vw越大,则读票数Vr越小,这时候系统写的开销就大。反之则写的开销就小。

最新文章

  1. LINUX下常用SHELL指令
  2. JS010-DOM
  3. javascript基础总结
  4. hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
  5. struts一些实用常量配置_2015.01.04
  6. String.resize()
  7. HTML5 WebAudioAPI简介(一)
  8. oracle数据库使用plsql(64位)时出现的问题
  9. Centos6.5快速配置可用网卡
  10. geotrellis使用(三十三)关于Geotrellis读取Geotiff的两个细节
  11. [翻译 EF Core in Action] 1.5 关于NoSql
  12. Node.js_express_route 路由
  13. freemarker变量自加
  14. LeetCode算法题-Linked List Cycle(Java实现)
  15. Python数据存储:pickle模块的使用讲解
  16. 【原】Spring整合Shiro基础搭建[3]
  17. python2.0_s12_day21_web聊天室一
  18. js-js的运算
  19. sqlservler 分页的实现
  20. 关于c#分支语句和分支嵌套还有变量的作用域。

热门文章

  1. 深入理解Java虚拟机(三)、垃圾收集算法
  2. cassandra-执行请求入口函数
  3. Hadoop入门之安装配置(hadoop-0.20.2)
  4. sqlite3 根据实体自动生成建表语句
  5. 一个书店管理系统java
  6. Xamarin +vs2015 Android 开发GPS loaction 返回 null 小结
  7. D3(Data-Driven-Document)中的一些细节
  8. css让元素居中显示
  9. java TreeMap用法
  10. IAR之文件路径设置