Young's blog Young's blog
首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Young

首页
Spring
  • 前端文章1

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ⼀致性Hash算法
  • 集群时钟同步问题
  • 分布式ID解决方案
  • 分布式理论

  • 分布式一致性协议

    • 分布式一致性协议之两阶段提交协议(2PC)、三阶段提交协议(3PC)
    • NWR协议
      • 2 原理
        • 以常见的N=3、W=2、R=2为例:
    • Gossip 协议
    • Paxos协议
    • Raft协议 详细版介绍
    • Lease机制
  • 分布式
  • 分布式一致性协议
andanyang
2023-04-04
目录

NWR协议

# 1 什么是NWR协议

NWR是一种在分布式存储系统中用于控制一致性级别的一种策略。在亚马逊的云存储系统中,就应用 NWR来控制一致性。

  • N:在分布式存储系统中,有多少份备份数据
  • W:代表一次成功的更新操作要求至少有w份数据写入成功
  • R: 代表一次成功的读数据操作要求至少有R份数据成功读取

# 2 原理

NWR值的不同组合会产生不同的一致性效果,当W+R>N的时候,整个系统对于客户端来讲能保证强 一致性。

# 以常见的N=3、W=2、R=2为例:

  • N=3,表示,任何一个对象都必须有三个副本
  • W=2表示,对数据的修改操作只需要在3个副本中的2个上面完成就返回
  • R=2表示,从三个对象中要读取到2个数据对象,才能返回

在分布式系统中,数据的单点是不允许存在的。即线上正常存在的备份数量N设置1的情况是非常危险的,因为一旦这个备份发生错误,就可能发生数据的永久性错误。假如我们把N设置成为2,那么,只要有一个存储节点发生损坏,就会有单点的存在。所以N必须大于2。N越高,系统的维护和整体成本就越高。工业界通常把N设置为3。

  1. 当W是2、R是2的时候,W+R>N,这种情况对于客户端就是强一致性的。

    image-20230804112841621

在上图中,如果R+W>N,则读取操作和写入操作成功的数据一定会有交集(如图中的 Node2),这样就可以保证一定能够读取到最新版本的更新数据,数据的强一致性得到了保证。在满足数据一致性协议的前提下,R或者W设置的越大,则系统延迟越大,因为这取决于最慢的那份备份数据的响应时间。

  1. 当R+W<=N,无法保证数据的强一致性

    image-20230804112944226

因为成功写和成功读集合可能不存在交集,这样读操作无法读取到最新的更新数值,也就无法保证 数据的强一致性。

编辑 (opens new window)
上次更新: 2024/04/19, 08:52:45
分布式一致性协议之两阶段提交协议(2PC)、三阶段提交协议(3PC)
Gossip 协议

← 分布式一致性协议之两阶段提交协议(2PC)、三阶段提交协议(3PC) Gossip 协议→

最近更新
01
idea 热部署插件 JRebel 安装及破解,不生效问题解决
04-10
02
spark中代码的执行位置(Driver or Executer)
12-12
03
大数据技术之 SparkStreaming
12-12
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Young | MIT License
浙ICP备20002744号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式