22 | NWR算法:如何修改读写模型以提升性能?
陶辉
该思维导图由 AI 生成,仅供参考
你好,我是陶辉。
前两讲我们介绍数据库的扩展时,写请求仍然在操作中心化的 Master 单点,这在很多业务场景下都是不可接受的。这一讲我将介绍对于无单点的去中心化系统非常有用的 NWR 算法,它可以灵活地平衡一致性与性能。
最初我们仅在单机上部署数据库,一旦性能到达瓶颈,我们可以基于 AKF Y 轴将读写分离,这样多个 Slave 从库将读操作分流后,写操作就可以独享 Master 主库的全部性能。然而主库作为中心化的单点,一旦宕机,未及时同步到从库的数据就有可能丢失。而且,这一架构下,主库的故障还会导致整个系统瘫痪。
去中心化系统中没有“Master 主库”这一概念,数据存放在多个 Replication 冗余节点上,且这些节点间地位均等,所以没有单点问题。为了保持强一致性,系统可以要求修改数据时,必须同时写入所有冗余节点,才能向客户端返回成功。但这样系统的可用性一定很成问题,毕竟大规模分布式系统中,出现故障是常态,写入全部节点的操作根本无法容错,任何 1 个节点宕机都会造成写操作失败。而且,同步节点过多也会导致写操作性能低下。
NWR 算法提供了一个很棒的读写模型,可以解决上述问题。这里的“NWR”,是指在去中心化系统中将 1 份数据存放在 N 个节点上,每次操作时,写 W 个节点、读 R 个节点,只要调整 W、R 与 N 的关系,就能动态地平衡一致性与性能。NWR 在 NoSQL 数据库中有很广泛的应用,比如 Amazon 的 Dynamo 和开源的 Cassandra,这些数据库往往跨越多个 IDC 数据中心,包含成千上万个物理机节点,适用于海量数据的存储与处理。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
NWR算法是一种用于去中心化系统的读写模型,能够平衡一致性与性能。该算法基于鸽巢原理,通过调整读写节点数量来实现动态平衡。在NWR算法中,写操作必须成功写入W个节点,读操作则从R个节点中选择并读出正确的数据,以确保系统具备强一致性。NWR算法在NoSQL数据库中得到广泛应用,如Amazon的Dynamo和开源的Cassandra。Cassandra数据库使用NWR算法时,可以通过CQL语句设置数据存储的冗余节点个数,并根据需求调整读写节点数量以满足一致性和性能的要求。通过实际案例分析,文章展示了Cassandra如何应用NWR算法,包括设置一致性级别、处理节点异常等情况。文章通过具体的技术细节和示例,深入浅出地介绍了NWR算法的原理和应用,对读者快速了解该算法具有很高的参考价值。 NWR算法将这一原理一般化为:只要读节点数R + 写节点数W > 存储节点数N,特别是W > N/2时,就能使去中心的分布式系统获得强一致性。 支持上万节点的Cassandra数据库,就使用了NWR算法来保持一致性。当你需要更强劲的性能时,你可以令R + W < N,当业务变化导致需要增强系统的一致性时,你可以实时地修改R、W。Cassandra也支持跨数据中心部署,此时的一致性模型更为复杂,但仍然将NWR算法作为实现基础。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《系统性能调优必知必会》,新⼈⾸单¥59
《系统性能调优必知必会》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(11)
- 最新
- 精选
- 杉松壁kafka是不是也是NWR模型
作者回复: 是的,Kafka在选举leader时,使用了简化版的NWR模型
2020-07-0210 - ple老师的风格很不一样 很专业 硬核,当真说了一些其他地方不容易看到的.
作者回复: ^_^
2020-06-309 - 梦想的优惠券zk就有quorum机制,之前只知道NW😂,原来还需要R才能保证强一致性,,,
作者回复: ^_^
2020-07-085 - 臭猫不同的进程请求写入,是如何协调顺序的呢?比如进程A要set X = 3;进程B要set X =4;
作者回复: 文稿中倒数第3张图,就是2个进程并发写入的,其中client1、client2就是2个进程,基于Last-Write-Win 策略来协调的
2020-06-3073 - 不会飞的海燕根据鸽巢原理是不是可以推论出,把9只鸽子放到10个笼子里至少有一个笼子是空的
作者回复: 是的
2020-07-262 - J.SmileNWR算法总结:当鸽子的数量超过了鸽巢后,就要注定某一个鸽巢内一定含有两只以上的鸽子,同样的道理,只要读、写操作涉及的节点超过半数,就注定读写操作总包含一个含有正确数据的节点。NWR 算法将这一原理一般化为:只要读节点数 R + 写节点数 W > 存储节点数 N,特别是 W > N/2 时,就能使去中心的分布式系统获得强一致性。 -------------------------------- 鸽臼原理推导出的NWR一致性算法,真的大开眼界了。nice!
作者回复: ^_^
2020-07-08 - stackWarnkeepalived 的配置 quorum up 估计也是同化了这个思想2020-07-181
- 第一装甲集群司令克莱斯特真不错2022-11-08归属地:北京
- 北极的大企鹅感谢作者的耐心分享和指导2021-04-09
- 坤哥陶老师,异步同步剩下的n-w个节点没说呢? last-write-win 前提各个服务时间戳一致。对于剩下的n-w个节点 谁作leader去同步呢?又怎样同步?2020-07-09
收起评论