Quorum机制简介


本博客比较啰嗦, 想要看简明的可直接看俺参考的链接

简介

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

BTW:
鸽巢定理: 若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子

算法

分布式系统中的每一份数据拷贝对象都被赋予一票
系统共有 V V V票 (即有 V V V份数据冗余)

  • 每一个读操作获得的票数必须大于最小读票数 V r V_r Vr, 如果票数不够 V r V_r Vr 就不能读

  • 每一个写操作获得的票数必须大于最小写票数 V w V_w Vw, 如果票数不够 V w V_w Vw 就不能写

    V r V_r Vr V w V_w Vw 满足有以下限制:

    1. V r + V w > V V_r + V_w > V Vr+Vw>V
    2. V w > V / 2 V_w>V/2 Vw>V/2

算法的解释

咱假设 V = 10 V = 10 V=10, V r = 5 V_r = 5 Vr=5, V w = 6 V_w = 6 Vw=6 好了, 刚好满足两个限制条件. 有具体的数字会比较容易理解, 现在来看这两个限制为什么这样设定

  • 限制1: 假如有一个写请求过来了, 并且它获得了 6 6 6 个冗余拷贝的允许, 那这个写请求可以被执行, 此时如果又来了个读请求, 由于总共是 10 10 10 个冗余拷贝, 那这个读请求最多只能获得 10 − 6 = 4 10-6=4 106=4 张投票, 不够 V r V_r Vr 张, 读请求不能被执行. 同理, 如果读请求已经被允许了, 那写请求就无法获得足够的许可了, 这样就保证了一份数据的冗余拷贝不会被同时读写
  • 限制2: 假如有一个写请求过来了, 并且它获得了 6 6 6 个冗余拷贝的允许, 那这个写请求可以被执行, 此时如果又来了一个写请求, 那么它无论如何也拿不到 5 5 5 张以上的写投票, 因为票大部分投给了第一个写请求了, 这样就保证了一份数据的冗余拷贝不会同时被两个写请求修改, 即数据的串行化修改

那些允许写操作执行的冗余拷贝, 也都必须完成同样的写更新, 最后写操作才结束返回, 这么说的话 限制2 同时也保证了半数以上的结点上的数据是新的, 剩下的由系统内部缓慢同步完成

那鸽巢定理呢, 用哪了?

假设一下 V w = 8 V_w = 8 Vw=8, 现在更新了 8 8 8 份冗余拷贝, 总共 10 10 10 份冗余拷贝, 那此时至少需要读多少次才能读到最新的数据呢? 10 − 8 = 2 10-8=2 108=2, 根据鸽巢定理, 至少得读 3 3 3 份, 这 3 3 3 份中至少至少就有一份是新的数据, 此时再看看 限制1, 是不是觉得很合理!

算法的好处

  • Quorum 的读写最小票数可以用来作为系统在读, 写性能方面的一个可调节参数
    • 写票数 V w V_w Vw越大, V r V_r Vr就可以越小, 此时写的开销大, 读的开销小
    • 读票数 V r V_r Vr越大, V w V_w Vw就可以越小, 此时读的开销大, 写的开销小

有说得不清楚的或者说错的欢迎在评论区指出来, 大家一起加油 !


Reference

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值