一、可靠性、可用性和一致性
可靠性也可称为partition tolerance。因而有CAP三者不可同时达到的说法(Consistency,Availability,Partition tolerance)。 古人云:鱼和熊掌不可兼得,现在是鱼、熊掌和燕窝三者不可兼得了:)这个结论有严格的数学证明,具体证明可以参考相关文档。
Dynamo牺牲一定的一致性来达到另外两者,他采用最终一致性(Eventual Consistency)。最终一致性指的是,一次数据更新操作后,系统不保证所有的读操作马上能读到最新信息,但是如果没有后续更新操作,过一段时间后,系统中的数据最终是一致的。
Dynamo 保证的是最终一致性, 就是说, 如果一个更新操作正确的完成了, Dynamo 不保证所有的读操作都立刻能读到最新信息. 我们看看具体实现就明白了为什么是这个行为. dynamo有一层叫做coordinator, 是可以放到任意位置的, 我们假设放到了客户端. 那么一个写操作, coordinator 会根据一致性哈希算法选择三个节点(不妨设为 A B C), 同时发三个写操作的包, 然后等候回应. 假设规定时间内, 只有两个节点返回成功(不妨设为A B), 也就是说, 第三个节点没成功, 这个时候coordinator会再选择一个不同与上面三个的第四个节点, 发出写操作, ...直到写成功为止(不妨设这个节点是X). 这样保证了备份数. 额外被选择的节点(X)存储这个数据信息到一个单独的目录中, X节点负责不断的尝试把这部分数据写回到C节点. 这个过程叫做 hinted handoff. 在这样的策略下, 因为R=1, 读任何一个节点都是有效的, 假设客户读节点 A B, 那么读到的都是最新数据, 如果读节点C, 可能读到老的数据. 但是无论如何读不到脏数据. 因为在可期望的时间内, 所有的节点上的数据可以达到一致, 所以这种一致性叫做最终一致性. 二、数据冲突的解决
在这样的模型下,数据冲突的解决可能需要调用者自己参与解决。
Dynamo中的每个数据都包含版本号,版本号在每次更新后都会递增。这个特性有助于防止由于数据的幵发更新导致的问题。比如,系统有一个value 为“a,b,c”,A 和B 同时get 到这个value。A 执行操作,在后面添加一个d,value 为 “a,b,c,d”。B 执行操作添加一个e,value 为”a,b,c,e”。如果不加控制,无论A 和B 谁先更新成功,它的更新都会被后到的更新覆盖。
由于Dynamo采用了最终一致性的原则,因而它无法法解决这个问题,但是引入了version 机制避免这样的问题。还是拿刚才的例子,A和B 取到数据,假设版本号为10,A 先更新,更新成功后,value 为”a,b,c,d”,与此同时,版本号会变为11。当B 更新时,由于其基于的版本号是10,服务器会拒绝更新,从而避免A的更新被覆盖。B 可以选择get 新版本的value,然后在其基础上修改,也可以选择强行更新。这就需要调用者来决定了。因而在这个意义上他对调用者是不透明的。
二、数据副本的管理
由于数据分布式管理,理论上每个节点的数据是不相同的,那么必然出现一个问题:万一某个节点失效了怎么办?因此需要有数据副本的管理。如下图所示:
一份数据有N个副本,N可配置,通常为3。保存副本的Node为当前Node的下一个至N-1个为止,如果当前节点的下一个节点为同在一个物理机的需节点,则跳过,寻找下一个物理节点。
三、Dynamo的容错处理
• 容错的重要性:错误是常态
• 数据读写机制:W+R>N
• 临时故障处理:Sloppy quorum/数据回传
• 永久故障恢复:Merkle 树
由于Dynamo采用普通PC作为存储节点,因此错误是常态。它的很多设计也正是基于这个出发点的,比如去中心化,支持动态的节点增减等。
下面主要讲一下他的读写机制。
· N — 数据复制的份数
· W — 更新数据是需要保证写完成的节点数
· R — 读取数据的时候需要读取的节点数
如果W+R>N,写的节点和读的节点重叠,则是强一致性。例如对于典型的一主一备同步复制的关系型数据库,N=2,W=2,R=1,则不管读的是主库还是备库的数据,都是一致的。
如果W+R<=N,则是弱一致性。例如对于一主一备异步复制的关系型数据库,N=2,W=1,R=1,则如果读的是备库,就可能无法读取主库已经更新过的数据,所以是弱一致性。
对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是在可用性和一致性之间取一个平衡,以适应不同的应用场景。
· 如果N=W,R=1,任何一个写节点失效,都会导致写失败,因此可用性会降低,但是由于数据分布的N个节点是同步写入的,因此可以保证强一致性。
· 如果N=R,W=1,只需要一个节点写入成功即可,写性能和可用性都比较高。但是读取其他节点的进程可能不能获取更新后的数据,因此是弱一致性。这种情况下,如果W<(N+1)/2,并且写入的节点不重叠的话,则会存在写冲突。
至于分布式存储的其他方面,还有待深入研究,这会在以后再写。
(全文完)
- 大小: 18.7 KB
分享到:
相关推荐
### Amazon EC2功能全面介绍 #### 一、引言 Amazon Elastic Compute Cloud(简称Amazon EC2)是Amazon Web Services(AWS)提供的一种可扩展的云端计算服务,它为用户提供了一个可配置的计算环境,使用户能够轻松...
#### 四、EC2 API具体动作详解 以下选取了几个典型的EC2 API动作进行详细解析: ##### 1. AcceptVpcPeeringConnection - **功能**:接受VPC对等连接请求。 - **请求参数**: - `DryRun`(布尔值):如果设置为`...
通过以上对ITE_WinECU_D2EC使用手册中各个功能点的详细介绍,我们可以看到该工具提供了丰富的功能,旨在帮助用户高效地进行硬件调试和监控工作。无论是对于专业工程师还是普通用户来说,掌握这些功能都将极大地提高...
EC 嵌入式控制器的功能介绍 EC 嵌入式控制器(Embedded Controller)是笔记本电脑中的核心组件之一,负责控制主要 I/O 的周边设备,例如键盘、鼠标、触控板等。EC 除了本身硬件之外,还需要 Firmware(微代码)的...
通过本文档的详细介绍,希望能够帮助您更好地理解和掌握 U-EC2 的使用方法,从而提高开发效率,加快产品的上市时间。如果您在使用过程中遇到任何问题,建议参考附带的文档资料或联系技术支持获取进一步的帮助。
2. 描述:该书详细介绍了EC2的教程,是亚马逊EC2的开发指南,包含了大量关于如何使用EC2进行开发的详细信息和指导。 3. 标签:Amazon EC2是亚马逊提供的一个基于云计算的Web服务,允许用户在亚马逊的基础设施上运行...
本文将详细介绍如何制作C8051F单片机的EC2调试器,并探讨相关知识点。 一、C8051F单片机概述 C8051F单片机家族具有丰富的内置功能,包括高速CPU、模拟电路、数字逻辑、通信接口等。它们的引脚数目多样,可满足不同...
- **2001年**:批量生产ECAS III电磁阀及ECASCAN2 ECU,标志着ECAS系统进入了一个全新的发展阶段,性能更优越,可靠性更高。 - **2003年**:ECASCAN技术全面应用于客车,为公共交通提供了更稳定、更舒适的乘坐体验。...
#### 四、AC3、EC3音频打包到TS流的技术细节 **1. 音频基本流 (Elementary Stream, ES) 的生成** - AC3或EC3音频文件首先需要被编码成相应的ES流。ES流是未封装的基本音频数据流,包含了完整的音频信息。 **2. TS...
【标题】:“Linux环境下利用CodeBuild与CodeDeploy实现GitHub到EC2的CI/CD流程” 在现代软件开发中,持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)已经成为不可或缺的实践,...
- **配置**: 介绍如何在EC2实例上部署和配置WordPress博客。 #### 八、亚马逊系统映像(AMI) **8.1 使用AMI** - **选择**: 根据应用场景选择合适的AMI。 - **创建**: 用户可以创建自己的AMI,以便重复使用或分享给...
移远Quectel EC20 GNSS AT命令手册V1.1是一份详尽的技术文档,它主要介绍了EC20系列模块如何通过AT指令集来配置并使用全球导航卫星系统(Global Navigation Satellite System, GNSS)功能。EC20 GNSS AT命令手册不仅...
本指南将详细介绍如何利用EC800M-NC模块,通过MQTT协议连接到阿里云物联网平台,实现高效、稳定的消息订阅和发布功能。 一、EC800M-NC模组介绍 EC800M-NC是一款集成了物联网通讯功能的模组,特别适合于需要远程数据...
2. 功能特性:除了基本的语音通话和数据传输,EC20还支持VoLTE、VoWiFi、CSFB等语音解决方案,以及eMBMS(增强型多媒体广播多播服务),可用于视频流媒体等应用。此外,它还具备强大的QoS(服务质量)控制,确保关键...
总结,EC51EC52 GSM GPRS Modem AT命令手册详细介绍了如何通过AT命令控制模块进行网络注册、数据传输、语音通话、短信处理等操作,是开发基于GSM/GPRS通信系统的必备参考文档。理解并熟练掌握这些命令,能有效提升...
《Python库aws-cdk.aws-ec2-1.22.0:构建和管理AWS EC2资源的利器》 在当今的云计算世界中,Amazon Web Services(AWS)是领先的云服务提供商之一,而Python作为一门易学易用的编程语言,被广泛用于各种开发任务,...