【分布式理论】读确认数与写确认数:分布式一致性的核心概念

文章目录

  • 零、概述
  • 一、基本概念解释
    • 1、 什么是写确认数(w)?
    • 2、 什么是读确认数(r)?
    • 3、一致性级别的对应关系
  • 二、工作流程详解
    • 1、 写操作的完整流程
    • 2、 读操作的完整流程
  • 三、强一致性的数学原理
    • 1、 为什么r + w > RF 保证强一致性?
    • 2、 最终一致性 vs 强一致性
  • 四、实际应用中的权衡考虑
    • 1、 故障容忍性分析
    • 2、 业务场景的选择指南

零、概述

读确认数和写确认数是分布式系统中实现可调一致性的核心机制。通过灵活配置这两个参数,系统可以在一致性、可用性、性能之间找到最适合业务需求的平衡点。

理解这个概念的关键是认识到:分布式系统中的一致性不是非黑即白的,而是可以根据业务需求进行精确调节的。这种设计哲学使得现代分布式数据库能够适应各种不同的应用场景,从高吞吐量的日志系统到强一致性的金融系统。

 

一、基本概念解释

1、 什么是写确认数(w)?

写确认数(w) 是指在分布式系统中,一个写入操作需要等待多少个副本节点返回"写入成功"的确认,才认为这次写入操作完成。

举个生活化例子:
假设你要把一份重要文件保存到3个不同的保险箱(3个副本),写确认数就是"你需要等几个保险箱告诉你’文件已保存成功’,你才放心地认为保存完成了"。

  • 如果w=1:只要1个保险箱说"存好了",你就认为完成
  • 如果w=2:需要2个保险箱都说"存好了",你才认为完成
  • 如果w=3:需要3个保险箱都说"存好了",你才认为完成

 

2、 什么是读确认数(r)?

读确认数(r) 是指在分布式系统中,一个读取操作需要从多少个副本节点获取数据,然后比较这些数据并选择最新版本,才认为这次读取操作完成。

继续用保险箱例子:
当你要取出文件时,读确认数就是"你需要打开几个保险箱查看文件内容,然后选择最新版本"。

  • 如果r=1:只打开1个保险箱,直接拿那份文件
  • 如果r=2:打开2个保险箱,比较文件版本,选择较新的
  • 如果r=3:打开3个保险箱,比较所有版本,选择最新的

 

3、一致性级别的对应关系

常见一致性级别的r/w值

一致性级别读确认数(r)写确认数(w)说明
ONEr=1w=1最快,但可能读到过期数据
QUORUMr=⌈RF/2⌉+1w=⌈RF/2⌉+1平衡性能与一致性
ALLr=RFw=RF最强一致性,但容错性最差

QUORUM的计算:

  • RF=3时,QUORUM = ⌈3/2⌉+1 = 2
  • RF=5时,QUORUM = ⌈5/2⌉+1 = 3
  • RF=7时,QUORUM = ⌈7/2⌉+1 = 4

 

二、工作流程详解

1、 写操作的完整流程

以复制因子RF=3、写确认数w=2为例:

步骤1:客户端发送写请求 "key=A, value=100" 
步骤2:协调节点收到请求,向3个副本节点发送写入命令
步骤3:等待副本节点响应...节点1: "写入成功" ✅  
节点2: "写入成功" ✅  <- 收到2个确认,满足w=2  
节点3: 还在处理中... ⏳  步骤4:协调节点立即向客户端返回"写入成功"
步骤5:节点3的写入结果无论成功失败,都不影响客户端已得到的结果

 

2、 读操作的完整流程

以复制因子RF=3、读确认数r=2为例:

步骤1:客户端发送读请求 "key=A"
步骤2:协调节点向3个副本节点发送查询命令  
步骤3:等待副本节点响应...节点1: "value=100, version=v5" ✅
节点2: "value=90, version=v4" ✅  <- 收到2个响应,满足r=2
节点3: 还在查询中... ⏳步骤4:协调节点比较版本号,v5 > v4,选择较新的数据
步骤5:向客户端返回 "value=100"

 

 

三、强一致性的数学原理

1、 为什么r + w > RF 保证强一致性?

关键在于"重叠":当读确认数和写确认数的总和大于复制因子时,读写操作必然会有重叠的副本节点

数学证明:

  • 设RF=3,如果w=2,r=2
  • 写操作影响了2个节点
  • 读操作查询了2个节点
  • 总共只有3个节点,根据鸽笼原理读写操作至少有1个共同节点, 这个共同节点保证读操作能获取到最新写入的数据

图示说明(RF=3的情况):

情况1: w=2, r=2 (r+w=4>3,强一致性)
写操作: [节点A✅, 节点B✅, 节点C ]  
读操作: [节点A  , 节点B✅, 节点C✅]  
重叠节点: 节点B,确保读到最新数据情况2: w=1, r=1 (r+w=2≤3,可能不一致)  
写操作: [节点A✅, 节点B , 节点C ]
读操作: [节点A  , 节点B , 节点C✅]  
无重叠节点,可能读到过期数据

 

2、 最终一致性 vs 强一致性

最终一致性(r + w ≤ RF):

  • 优点:更高的可用性和性能
  • 缺点:可能读到过期数据
  • 适用场景:对实时性要求不高的应用

强一致性(r + w > RF):

  • 优点:保证读到最新数据
  • 缺点:性能较低,容错性较差
  • 适用场景:对数据准确性要求高的应用

 

四、实际应用中的权衡考虑

1、 故障容忍性分析

确认数写操作容忍度读操作容忍度说明
1可容忍 RF-1 个节点故障可容忍 RF-1 个节点故障最高容错性,只需1个节点可用
2可容忍 RF-2 个节点故障可容忍 RF-2 个节点故障中等容错性,需2个节点可用
RF任何节点故障都会导致写入失败任何节点故障都会导致读取失败无容错性,需所有节点可用

2、 业务场景的选择指南

设RF=3

业务场景典型应用wr一致性级别主要理由
高频写入场景日志收集
监控数据
事件流处理
11ONE优先保证写入性能
允许读取延迟
平衡读写场景用户数据
商品信息
内容管理
22QUORUM在一致性和性能之间
取得平衡
强一致性场景金融交易
账户余额
审计日志
31写ALL/读ONE确保数据完全可靠
读取策略可调整
强一致性场景关键配置
权限数据
合规数据
23写QUORUM/读ALL写入平衡性能
读取绝对准确
应用类型推荐配置配置理由风险点
Web访问日志RF=3, w=1, r=1大量写入,偶尔读取分析可能读到稍旧的数据
用户资料RF=3, w=2, r=2读写频率相当,需要一致性1个节点故障影响性能
银行账户余额RF=3, w=3, r=1写入必须绝对准确任一节点故障无法写入
订单支付状态RF=3, w=2, r=3支付后查询必须准确读取需要所有节点可用
系统配置中心RF=5, w=3, r=3高可用+强一致性更高的资源成本

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87821.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滚珠导轨在医疗设备中有多重要?

在医疗设备领域&#xff0c;稳定性是保障手术安全、提升诊断精度的核心要素。无论是手术机器人精准的器械操作&#xff0c;还是CT扫描仪高速稳定的扫描运动&#xff0c;都离不开背后精密传动系统的支持。作为线性运动的核心部件&#xff0c;滚珠导轨凭借其独特的滚动摩擦原理与…

港科ISM选课攻略整理

毕业要求 课程和课程目录(ISM专业) "D:\HKUST-ISM\prepare\中英Program & Course Catalog.pdf" 课程和课程目录&#xff08;全部ISOM课程&#xff09; "D:\HKUST-ISM\prepare\全部ISOM Course Catalog.pdf" 两个可选专业方向 Financial Technolo…

rent8_wechat-最常用出租屋管理系统-微信小程序

rent8_wechat-最常用出租屋管理系统是rent8的微信小程序&#xff0c;需要和rent8配合使用。rent8_wechat基于Tdesign开发。 核心功能 房产管理&#xff1a;新增房产信息、修改房产信息、删除房产信息。房间管理&#xff1a;新增房间信息、修改房间信息、删除房间信息、入住管…

OpenCV CUDA模块设备层---- 绝对值函数abs()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 这是 OpenCV 的 cv::cudev 模块中用于 CUDA 设备端&#xff08;device&#xff09;的绝对值函数&#xff0c;专门处理 uchar1 类型&#xff08;即…

IEC61850 通信协议测试验证方法详解

一、MMS 协议测试方法 MMS&#xff08;制造报文规范&#xff09;是 IEC61850 中用于设备监控和控制的核心协议&#xff0c;测试需覆盖以下维度&#xff1a; &#xff08;一&#xff09;协议栈实现验证 连接管理测试 测试用例&#xff1a;建立和释放 MMS 连接 100 次&#xf…

关于 Kyber:抗量子密码算法 Kyber 详解

一、基本概念 后量子密码学&#xff08;PQC&#xff09; │ ├──> 是一个领域&#xff08;研究如何在“量子时代”保护数据安全&#xff09; │ └──> Kyber 是这个领域中设计出来的一个“抗量子密码算法”└──> Kyber 是用于加密密钥交换的算法&#xff08;叫…

如何保障具身智能系统级安全?鸿道OS给出中国方案

由东土科技自主研发完成的鸿道&#xff08;Intewell&#xff09;工业操作系统正式发布。东土科技董事长李平与该公司全资子公司光亚鸿道总经理邹露君在接受第一财经等采访时&#xff0c;解释了如何通过操作系统为具身智能产业提供底层支撑&#xff0c;解决产业规模化落地的安全…

深入浅出:JavaScript ES6中类(Class)的革新与实践

深入浅出&#xff1a;JavaScript ES6中类&#xff08;Class&#xff09;的革新与实践 在JavaScript的发展历程中&#xff0c;ES6&#xff08;ECMAScript 2015&#xff09;无疑是一个里程碑式的版本。它不仅引入了let、const、箭头函数等特性&#xff0c;更通过**类&#xff08…

华大北斗TAU804M-N2B0双频单北斗高精度定位模块 100%国产双频北斗 打破u-blox技术垄断

华大北斗TAU804M-N2B0双频单北斗模块深度解析 1. 产品定位 TAU804M-N2B0 是华大北斗&#xff08;HDSC&#xff09;推出的 双频单北斗高精度定位模块&#xff0c;支持 B1IB2a双频信号接收&#xff0c;专为 高精度定位、抗多径干扰 场景设计&#xff0c;是北斗三号系统应用的标杆…

IP证书申请攻略细则,有何作用?

IP证书申请攻略细则及作用解析 一、IP证书的作用 数据加密传输 IP证书通过SSL/TLS协议对客户端与服务器之间的数据进行加密&#xff0c;防止数据在传输过程中被窃取或篡改&#xff0c;适用于物联网设备、API接口、测试服务器等直接通过IP访问的场景。 身份验证与防伪造 浏览器…

回文链表C++

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 时间复杂度较大的解法&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* Lis…

限流系列之三:TDMQ for Apache Pulsar 限流技术深度解析

导语 在高速、高吞吐量的消息处理场景中&#xff0c;TDMQ Pulsar 版以其卓越的性能和可扩展性成为众多企业的首选。然而&#xff0c;随着生产者和消费者以极高的速度生产/消费大量消息&#xff0c;服务器资源如 CPU、内存、网络及磁盘 IO 等可能会面临饱和风险。为此&#xff…

非研发部门参与产品开发过程的价值体现

汉捷咨询 胡红卫 企业已经越来越意识到新产品开发项目需要市场、销售、制造、采购、服务、财务等非研发部门的参与&#xff0c;尝试建立跨部门的项目组&#xff0c;安排相关人员参与项目&#xff0c;但是效果如何呢&#xff1f;在汉捷咨询对很多企业调研诊断过程中&#xff0c;…

Kafka的存储与索引:数据处理的底层奥秘

一、引言 Kafka 之所以能在海量数据的传输和处理过程中保持高效的性能和低延迟&#xff0c;背后隐藏着众多精妙的设计&#xff0c;而其存储与索引机制便是其中的核心奥秘。接下来&#xff0c;让我们深入探寻 Kafka 存储机制的基石与架构。 二、分区与日志组织​ Kafka 中的消…

大模型与搜索引擎的技术博弈及未来智能范式演进

基于认知革命与技术替代的全景综述 一、大模型对搜索引擎的替代性分析&#xff1a;技术范式与市场重构 &#xff08;1&#xff09;技术原理的代际分野 传统搜索引擎遵循 "爬虫抓取 - 索引构建 - 关键词排序" 的三段式架构&#xff0c;其核心是基于 PageRank 算法的…

XC7K325T数据采集卡设计原理图:786-基于X86 CPU+XC7K325T的16路16bit 1M sps同步数据采集卡

基于X86 CPUXC7K325T的16路16bit 1M sps同步数据采集卡 一、板卡概述 板卡为紧凑型的X86FPGA的工业监测处理平台&#xff0c;高度集成的硬件和完整的labview开发软件&#xff0c;大大方便客户现场使用。 二、板卡功能 板卡功能 参数内容 X86 SOM核心板 主频 2.0GHz …

单片机3种按键程序消抖方法

1&#xff0c;查询法延时模式 u8 key01;u8 x0;KEY1;while(1){if(KEY0) //"按键按下"{delay(10); //延时10msif(KEY0 && kdy01) //按下有10ms 且上状态是1。即下降沿时{key00; //将上状态置0.防止按住不放时&#xff0…

【java面试】线程篇

【java面试】线程篇 一、基础知识1 线程与进程的区别2 并行与并发的区别3 创建线程的方式4 线程包含了哪些状态&#xff0c;状态之间是如何变化的&#xff1f;5 新建三个线程&#xff0c;如何保证他们按照顺序执行&#xff1f;6、java中的wait和sleep方法的不同7 如何停止一个正…

RAGFlow是一个基于深度文档理解的开源RAG引擎

RAGFlow概述 RAGFlow是一款基于深度文档理解的开源RAG&#xff08;检索增强生成&#xff09;引擎&#xff0c;专注于处理复杂文档结构并提供精准的语义检索与生成能力。其核心优势在于结合多模态文档解析和智能分段技术&#xff0c;优化传统RAG流程中的信息提取与答案生成效果…

Git Commit 模板完整配置指南

Git Commit 模板完整配置指南 &#x1f4cb; 目录 Git Commit 模板完整配置指南 &#x1f4cb; 目录&#x1f3af; 为什么需要 Commit 模板&#x1f4dd; 推荐的 Commit 模板 标准模板格式C 项目特化模板 ⚙️ 系统级配置 1. 创建模板文件2. 配置 Git 使用模板3. 验证配置 &a…