系统性能调优必知必会
陶辉
智链达 CTO,前阿里云 P8 高级技术专家
36367 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
系统性能调优必知必会
15
15
1.0x
00:00/00:00
登录|注册

22 | NWR算法:如何修改读写模型以提升性能?

一致性模型调节
冗余节点设置
EACH_QUORUM
LOCAL_QUORUM
CONSISTENCY QUORUM
CONSISTENCY ONE
读写节点数设置
冗余节点个数
一致性哈希算法
基于行Key
数万个服务器节点
多个IDC数据中心
开源的Cassandra
Amazon的Dynamo
NoSQL数据库
NWR关系调整
鸽巢原理
平衡一致性与性能
无单点的去中心化系统
与Cassandra中的应用比较
有状态服务使用NWR算法
多数据中心部署
一致性模型
NWR设置
数据分布
构成
应用
原理
介绍
思考题
Cassandra数据库
NWR算法
NWR算法与Cassandra数据库

该思维导图由 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
立即购买
登录 后留言

全部留言(11)

  • 最新
  • 精选
  • 杉松壁
    kafka是不是也是NWR模型

    作者回复: 是的,Kafka在选举leader时,使用了简化版的NWR模型

    2020-07-02
    10
  • ple
    老师的风格很不一样 很专业 硬核,当真说了一些其他地方不容易看到的.

    作者回复: ^_^

    2020-06-30
    9
  • 梦想的优惠券
    zk就有quorum机制,之前只知道NW😂,原来还需要R才能保证强一致性,,,

    作者回复: ^_^

    2020-07-08
    5
  • 臭猫
    不同的进程请求写入,是如何协调顺序的呢?比如进程A要set X = 3;进程B要set X =4;

    作者回复: 文稿中倒数第3张图,就是2个进程并发写入的,其中client1、client2就是2个进程,基于Last-Write-Win 策略来协调的

    2020-06-30
    7
    3
  • 不会飞的海燕
    根据鸽巢原理是不是可以推论出,把9只鸽子放到10个笼子里至少有一个笼子是空的

    作者回复: 是的

    2020-07-26
    2
  • J.Smile
    NWR算法总结:当鸽子的数量超过了鸽巢后,就要注定某一个鸽巢内一定含有两只以上的鸽子,同样的道理,只要读、写操作涉及的节点超过半数,就注定读写操作总包含一个含有正确数据的节点。NWR 算法将这一原理一般化为:只要读节点数 R + 写节点数 W > 存储节点数 N,特别是 W > N/2 时,就能使去中心的分布式系统获得强一致性。 -------------------------------- 鸽臼原理推导出的NWR一致性算法,真的大开眼界了。nice!

    作者回复: ^_^

    2020-07-08
  • stackWarn
    keepalived 的配置 quorum up 估计也是同化了这个思想
    2020-07-18
    1
  • 第一装甲集群司令克莱斯特
    真不错
    2022-11-08归属地:北京
  • 北极的大企鹅
    感谢作者的耐心分享和指导
    2021-04-09
  • 坤哥
    陶老师,异步同步剩下的n-w个节点没说呢? last-write-win 前提各个服务时间戳一致。对于剩下的n-w个节点 谁作leader去同步呢?又怎样同步?
    2020-07-09
收起评论
显示
设置
留言
11
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部