远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 文章分类
  • 文章标签
  • 文章归档
  • 《C程序设计语言》
心情随笔
友情链接
给我留言 (opens new window)
关于我
GitHub (opens new window)
  • JavaSE

  • 开源框架

  • Linux

  • Struts2

  • Hibernate

  • Webservice

  • 分布式

    • RPC架构设计及IO模型
    • NIO编程及其三大核心原理
    • NIO三大核心之缓冲区(Buffer)
    • NIO三大核心之通道(Channel)
    • NIO三大核心之选择器(Selector)
    • Netty核心原理
    • 线程模型以及传统IO阻塞模型
    • Reactor模型
    • Netty线程模型
    • Netty核心API介绍
    • Netty入门与异步模型
    • Netty高级进阶之Netty编解码器
    • Netty高级进阶之基于Netty的群聊天室案例
    • Netty高级进阶之基于Netty的HTTP服务器开发
    • Netty高级进阶之基于Netty的Websocket开发网页聊天室
    • Netty高级进阶之Netty中的粘包和拆包的解决方案
    • Nety源码剖析
    • 自定义RPC框架之分布式架构网络通信理论
    • 自定义RPC框架之基于Netty实现RPC框架
    • 分布式架构理论
    • 分布式理论之数据一致性
    • 分布式理论之CAP定理
    • 分布式理论之BASE定理
    • 分布式一致性协议之两阶段提交协议(2PC)
    • 分布式一致性协议之三阶段提交协议(3PC)
    • 分布式一致性协议之NWR协议
      • 分布式一致性协议之Gossip协议
      • 分布式一致性协议之Paxos协议
      • 分布式一致性协议之Raft协议
      • 分布式一致性协议之Lease机制
      • 分布式系统设计策略之心跳检测
      • 分布式系统设计策略之高可用
      • 分布式系统设计策略之容错性
      • 分布式系统设计策略之负载均衡
      • 分布式架构服务调用
      • 分布式服务治理之服务协调
      • 分布式服务治理之服务削峰
      • 分布式服务治理之服务降级
      • 分布式服务治理之服务限流
      • 分布式服务治理之服务熔断
      • 分布式服务治理之服务链路追踪
      • 架构设计基本原则之开闭原则(OCP)
      • 架构设计基本原则之单一职责原则(SRP)
      • 架构设计基本原则之接口隔离原则(ISP)
      • 架构设计基本原则之里式替换原则(LSP)
      • 架构设计基本原则之依赖倒置原则(DIP)
      • 架构设计基本原则知识扩展
      • 分布式架构知识拓展与总结
    • 分布式框架

    • 后端开发
    • 分布式
    terwer
    2022-05-04
    目录

    分布式一致性协议之NWR协议

    # NWR协议

    # 什么是NWR协议

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

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

    # 原理

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

    以常见的N=3、W=2、R=2来举例

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

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

    image-20220327233803133

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

    如果,W+R>N,那么读取和写入成功的数据一定存在交集。这样就能保证一定能够读取到最新的数据,数据的强一致性得到了保证。在满足数据一致性的前提下,R或者W的值设置的越大,则系统延迟越大,因为这取决于最慢的那份备份数据的响应时间。

    2、当R+W<N时,无法保证强一致性。

    image-20220327234504504

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

    编辑 (opens new window)
    #rpc#nwr
    上次更新: 2023/02/22, 13:47:25
    分布式一致性协议之三阶段提交协议(3PC)
    分布式一致性协议之Gossip协议

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

    最近更新
    01
    解决css部分border被圆角切掉之后圆角的边框消失问题
    03-18
    02
    使用TypeScript开发一个自定义的Node-js前端开发脚手架
    03-08
    03
    Github-Actions使用release-please实现自动发版
    03-06
    更多文章>
    Theme by Vdoing | Copyright © 2011-2023 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式