Quorum一致性协议

一个分布式数据库系统中通常是一系列密切关联的操作组成完整的系统. 分布式系统最基本的要保证一致性, 分区性通常是无法避免的, 在这种情况下尽力通过软件协议做到最大可用性. 根据CAP理论知道三者往往不可以兼得, 只能取其二.

回忆下CAP理论

  • C

    Consistency: 保证返回客户端最新的一致性数据

  • A

    Availablility: 任何一个没有发生故障的节点必须在有限的时间内返回结果

  • P

    Paritition Tolerance: 网络分区发生时系统依然可以提供服务

也既是在分布式系统中CP的情况下, 如何通过软件/协议逻辑控制尽可能的满足A

在这里很重要的一点就是C协议, 怎么样做到分布式系统中所有的节点都同意就某一个值性能更新?

2PC/3PC/Paxos...都是来解决这个问题的方案, 甚至Google Chubby的作者Mike Burrows说过这个世界上只有一种一致性算法, 那就是Paxos, 其它的算法都是残次品.

不过今天暂且不讨论Paxos, 来看看Quorum一致性协议是怎么做的.

基本的Quorum协议要求所有参与者应用一项决议前必须先同意. 假如一个分布式的DB系统, 有两个节点A和B, 数据在A和B之前完成复制, 任何一个节点的数据变更都会在一定的时间内同步到另外的节点. 客户端无需感知底层的DB系统是否是分布式的, 它所要关系的是无论连接到哪一个节点, 都应该读取到相同的数据(同一状态).

DB系统主要由两类操作: write/update 和 read

R表示Quorum中read节点的数量

W表示Quorum中writes/updates节点的数量

N表示系统中的节点数量

如果R=1, W=1, 也就是R+W=N=2, 客户端在A节点进行写入, 从B节点完成读取, 这种情况下客户端可能无法得到一致性的数据;

如果R=2, W=1, 也就是R+W>N, 客户端可以在任意的A或者B节点进行写入, 但是客户端需要同时读取节点A和B的数据, 这种情况是可以保证客户端得到最新的数据状态, 这也就是一些NOSQL DB通常说的双读(read repair);

如果W=2, R=1, 也就是R+W>N, 显而易见这种情况下客户端同时写入节点A和B, 读取任意一份数据即可满足一致性结果要求.

R+W>N, 这就是Quorum一致性协议.

最新文章

  1. 汇编学习(五)——表处理程序
  2. C/C++中堆与栈
  3. Tornado (and Twisted) in the age of asyncio》
  4. LoadRunner用户行为模拟器 《第三篇》
  5. Python字符串的encode与decode研究心得 乱码问题解决方法
  6. android2.3 -添加自定义按键:作唤醒功能 .
  7. ImageMagick的使用
  8. Linux PAM&&PAM后门
  9. maven分模块间依赖注意事项
  10. Android 软件开发之 PreferenceActivity 中的组件
  11. Omnithreadlibary学习(2)-IOmniTask异步执行
  12. Bitbucket Pull Request和fork
  13. POJ 2411 状态压缩递,覆盖方案数
  14. 启动redis
  15. redis+spring 整合
  16. Burp Suite之截断代理功能及相关设置(一)
  17. mac navicate破解版汉化
  18. 浅析XSS与CSRF
  19. 封了1000多个IP地址段,服务器现在坚如磐石,对付几个小毛贼还是很轻松的
  20. Python爬虫:学爬虫前得了解的事儿

热门文章

  1. selenium 的安装使用
  2. final static 修饰(转载)
  3. Floatingip
  4. CubieTruck使用笔记--SD卡中使用lubuntu
  5. $.ajax()方法参数总结
  6. WebSocket对象的创建及其与WebSocket服务器的连接(5)
  7. C#中多态
  8. Sublime Text 2.0.2 注册码激活
  9. [洛谷P4001][BJOI2006]狼抓兔子
  10. [POJ 1204]Word Puzzles(Trie树暴搜&AC自己主动机)