NWR模型把CAP的选择权交给了用户,让用户自己的选择你的CAP中的哪两个。
所谓NWR模型。N代表N个备份,W代表要写入至少W份才认为成功,R表示至少读取R个备份。配置的时候要求W+R > N。 因为W+R > N, 所以 R > N-W 这个是什么意思呢?就是读取的份数一定要比总备份数减去确保写成功的倍数的差值要大。
也就是说,每次读取,都至少读取到一个最新的版本。从而不会读到一份旧数据。当我们需要高可写的环境的时候,我们可以配置W = 1 如果N=3 那么R = 3。 这个时候只要写任何节点成功就认为成功,但是读的时候必须从所有的节点都读出数据。如果我们要求读的高效率,我们可以配置 W=N R=1。这个时候任何一个节点读成功就认为成功,但是写的时候必须写所有三个节点成功才认为成功。
NWR模型的一些设置会造成脏数据的问题,因为这很明显不是像Paxos一样是一个强一致的东西,所以,可能每次的读写操作都不在同一个结点上,于是会出现一些结点上的数据并不是最新版本,但却进行了最新的操作。
所以,Amazon Dynamo引了数据版本的设计。也就是说,如果你读出来数据的版本是v1,当你计算完成后要回填数据后,却发现数据的版本号已经被人更新成了v2,那么服务器就会拒绝你。版本这个事就像“乐观锁”一样。
但是,对于分布式和NWR模型来说,版本也会有恶梦的时候——就是版本冲的问题,比如:我们设置了N=3 W=1,如果A结点上接受了一个值,版本由v1 -> v2,但还没有来得及同步到结点B上(异步的,应该W=1,写一份就算成功),B结点上还是v1版本,此时,B结点接到写请求,按道理来说,他需要拒绝掉,但是他一方面并不知道别的结点已经被更新到v2,另一方面他也无法拒绝,因为W=1,所以写一分就成功了。于是,出现了严重的版本冲突。
Amazon的Dynamo把版本冲突这个问题巧妙地回避掉了——版本冲这个事交给用户自己来处理。
于是,Dynamo引入了Vector Clock(矢量钟?!)这个设计。这个设计让每个结点各自记录自己的版本信息,也就是说,对于同一个数据,需要记录两个事:1)谁更新的我,2)我的版本号是什么。
下面,我们来看一个操作序列:
1)一个写请求,第一次被节点A处理了。节点A会增加一个版本信息(A,1)。我们把这个时候的数据记做D1(A,1)。 然后另外一个对同样key的请求还是被A处理了于是有D2(A,2)。这个时候,D2是可以覆盖D1的,不会有冲突产生。
2)现在我们假设D2传播到了所有节点(B和C),B和C收到的数据不是从客户产生的,而是别人复制给他们的,所以他们不产生新的版本信息,所以现在B和C所持有的数据还是D2(A,2)。于是A,B,C上的数据及其版本号都是一样的。
3)如果我们有一个新的写请求到了B结点上,于是B结点生成数据D3(A,2; B,1),意思是:数据D全局版本号为3,A升了两新,B升了一次。这不就是所谓的代码版本的log么?
4)如果D3没有传播到C的时候又一个请求被C处理了,于是,以C结点上的数据是D4(A,2; C,1)。
5)好,最精彩的事情来了:如果这个时候来了一个读请求,我们要记得,我们的W=1 那么R=N=3,所以R会从所有三个节点上读,此时,他会读到三个版本:
- A结点:D2(A,2)
- B结点:D3(A,2; B,1);
- C结点:D4(A,2; C,1)
6)这个时候可以判断出,D2已经是旧版本(已经包含在D3/D4中),可以舍弃。
7)但是D3和D4是明显的版本冲突。于是,交给调用方自己去做版本冲突处理。就像源代码版本管理一样。
很明显,上述的Dynamo的配置用的是CAP里的A和P。
我非常推大家都去看看这篇论文:《Dynamo:Amazon’s Highly Available Key-Value Store》,如果英文痛苦,你可以看看译文(译者不详)
相关推荐
NWR方法的优点在于其灵活性,可以适应不同结构和材料的模型。 在提供的文件列表中,"NRW.m"可能是一个MATLAB脚本,用于实现NWR方法的算法。MATLAB是一种强大的数学计算和编程环境,适合处理这类复杂的数据分析任务...
在NWR模型中,如果要保证高可用性,通常采用的是写多份(W>1)策略,比如W=3,这意味着每次写操作必须在至少三个节点上成功才能确认,这样即使有节点故障,仍有其他节点可以提供服务。然而,这可能会牺牲一定的写...
MongoDB采用的是键值对(key-value pairs)、文档(documents)、集合(collections)和数据库(databases)的数据模型。文档是BSON(Binary JSON)格式,可以存储复杂数据结构,如数组和嵌套对象。 2. CRUD操作:...
NWR模型适用于那些写操作较少而读操作较多的场景,如日志系统、消息队列等。 ### 各种数据库的横向比较 #### NoSQL之间的比较 NoSQL数据库包括键值对数据库、文档数据库、列族数据库和图形数据库等多种类型,它们...
Amazon平台是一个由数百服务组成的面向服务的架构,其秉承高度去中心化、松散耦合...但是,是牺牲C满足A,还是牺牲A满足C,可以根据NWR模型来调配,以达到收益成本平衡。Dynamo内部有3个层面的概念:Key-Value:Key唯一
对于32位设备,则分别提供NWR0、NWR1、NWR2和NWR3信号,用于控制四个字节的写操作。 - **字节选择访问**:在字节选择访问模式下,NWR0至NWR3信号可用于选择特定的字节进行写操作。 ### 产品相关性与外部存储映射 ...
NWR模型则需要上层系统做更多的工作来确保正确性。Blade针对美团的业务场景,可能采用了适合冲突频繁的场景的复制策略。 3. **分布式事务**:典型的分布式事务如两阶段提交,但在高并发环境下,Percolator模型被...
《云计算(第三版)》配套课程的第8...综上所述,OpenStack的Swift对象存储服务是一个强大的、分布式存储解决方案,它利用先进的数据一致性模型、一致性散列和冗余副本策略,为云计算环境提供了可靠且高效的存储服务。
大数据领域中,"2018数据管理音频整理1"涵盖了多个关键知识点,包括大数据的四个V(Volume、Variety、Velocity、Value),Memcached的内存替换策略,DynamoDB的高可用性和一致性模型,以及NWR理论和Vector Clock更新...
- 写操作在时钟的负边沿触发,由`nWR`信号控制,当`nWR`为0时执行写操作,将`writeData`的高24位写入连续的四个地址。 **2. 测试模块设计** 测试模块`RAM_sim`用于验证RAM模块的功能: ```verilog module RAM_sim...
山东大学 NoSQL 期末笔记 ...数据模型是分布式系统中的一种逻辑结构,列名的格式是“:”,所有数据库的更新都有一个时间戳标记,每个更新都是一个新的版本。三个重要概念是概念视图、物理视图和实例。
- `your-nwr-userID`: 用户名。 - `your-nwr-password`: 密码。 - `SENDSITE(toggles OFF sending DCB w/ PUT)`: 关闭发送设备控制块(DCB)。 - `SITELRECL=92(new receive file lrecl is 92-bytes)`: 设置接收...
10. **NWR算法**:NWR(Node,Write,Read)是关于Quorum选择的一种策略,用于平衡系统的可用性和一致性。 在分布式系统中,通常需要在CAP(Consistency、Availability、Partition Tolerance)三者之间做出权衡。...
### Sony MD MZ-R900 使用说明:关键知识点概览 #### 一、产品概述与安全须知 - **产品名称**:Sony MD MZ-R900是一款便携式MiniDisc录音机。 - **产品特点**:该设备支持数字录音及播放,拥有多种录音模式,能够...
在SRAM中,`M_nRD`(Memory not Read)和`M_nWR`(Memory not Write)是两个关键的控制信号,它们由CBUS上的`nM_RD`和`nM_WR`提供。当`nM_RD`为低电平时,表示要执行读操作,`nM_WR`为低电平则表示执行写操作。实验...
cyclone4e FPGA设计2.4寸彩屏... output ILI_nWR, inout [ 7:0] ILI_DB, // ADS7803 Interface output ADS_CLK, output ADS_nCS, output ADS_DIN, input ADS_DOUT, input ADS_BUSY, input ADS_nIRQ, // SD Ca
本手册详细介绍了DAZ26010的特性、功能框图、引脚配置、引脚描述、绝对最大额定值、电气特性、应用信息、自动检查过程、D-VCOM部分、热载保护、nWR设置、银行选择、I2C协议和寄存器设置等方面的知识点。 一、总体...
841nWR841N V7改64M内存刷OPENWRT后信号暴增,达21dBm,支持单线多拔叠加,负载均衡