这个问题,根本是理解qurom 原理。我很无耻的贴上牛人的播客,原文如下:—————————割———————————–从小学的抽屉原理说起 为什么从抽屉原理说起?一来大家对这个比较熟悉,二来它与 Quorum 机制有异曲同工的地方。回顾抽屉原理,2 个抽屉每个抽屉最多容纳 2 个苹果,现在有 3 个苹果无论怎么放,其中的一个抽屉里面会有 2 个苹果。那么我们把抽屉原理变变型,2 个抽屉一个放了 2 个红苹果,另一个放了 2 个青苹果,我们取出 3 个苹果,无论怎么取至少有 1 个是红苹果,这个理解起来也很简单。我们把红苹果看成更新了的有效数据,青苹果看成未更新的无效数据。便可以看出来,不需要更新全部数据(并非全部是红苹果)我们就可以得到有效数据,当然我们需要读取多个副本完成(取出多个苹果)。这就是 Quorum 机制的原型,其实质是将 Write All 的负载均衡到 Read Only 上。回到问题的开头,我们来看看是怎么运用 Quorum 机制来解决读写模型中读写的负载均衡。其实,关键的是更新多少个数据副本后,使得读取时总能读到有效数据?回想我们的的红苹果,假设总共有 N 个数据副本,其中 k 个已经更新,N-k 个未更新的,那么我们任意读取 N-k+1 个数据的时候就必定至少有 1 个是属于更新了的 k 个里面的,也就是 Quorum 的交集,我们只需比较 读取的 N-k+1 中版本最高的那个数据返回给用户就可以得到最新更新的数据了。 那么对于写模型呢?我也只需要完成 k 个副本的更新后,就可以告诉用户操作完成而不需要 Write All 了,当然告诉完用户完成操作后,系统内部还是会慢慢的把剩余的副本更新,这对于用户是透明的。可以看到,我们把 Write 身上的部分负载转移到了 Read 上,Read 读取多个副本,使得 Write 不会过于劳累,不好的是弱化了分布式系统中的数据一致性。至于转移多少负载比较合适,这个需要根据分布式系统的具体需求中对数据一致性的要求。原文地址:Quorum 机制
创业项目群,学习操作 18个小项目,添加 微信:923199819 备注:小项目!
如若转载,请注明出处:https://www.zodoho.com/134411.html