分布式系统之二:CAP定理
来源:互联网 发布:图片二维码识别软件 编辑:程序博客网 时间:2024/04/18 03:38
CAP定义
1. C:
一致性又称为原子性或者事务性。表示一个事务的操作是不可分割的,要不然这个事务完成,要不然这个事务不完成,不会出现这个事务完成了一半这样的情况。譬如,系统中对一个数据的读和写虽然包含多个子步骤并且会持续一段时间才能执行完,但是在调用者看来,读操作和写操作都必须是单个的即时完成的操作,不存在重叠。即对一个写操作,如果系统返回了成功,那么之后到达的读请求都必须读到这个新的数据;如果系统返回失败,那么所有的读,无论是之后发起的,还是和写同时发起的,都不能读到这个数据。
2. A:
3. P:Partition
分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,这样就具有好的分区容错性。
CAP定理的意义
随着互联网应用的飞速发展,数据量与日俱增,传统的ACID数据库已经不能满足如此大的海量数据存储了。这个时候需要设计出好的分布式数据存储方式。而这些分布式数据存储方式受到CAP理论的约束,不可能达到高一致性,高可用性,高分区容错性的完美设计。所以我们在设计的时候要懂得取舍,重点关注对应用需求来说比较重要的,而放弃不重要的,在CAP这三者之间进行取舍,设计出贴合应用的存储方案。
CAP之间的取舍
首先、定义一种故障模型。即在形式化证明中,系统包含多个节点,每个节点可以接收读和写的请求,返回成功或失败,对读还要返回一个数据。和调用者之间的连接是不会中断的,系统的节点也不会失效,唯一的故障就是报文的丢失。
1.
所以做到CA,一个现实的例子就是单点的数据库。如传统的关系型数据库MySQL等。
2.
要做到
3.
要做到
ACID与BASE
ACID注重一致性,是数据库的传统设计思想。拥有高一致性
1. 原子性(A)。指的是一个事务中所有操作都必须全部完成,要么全部不完成。
2. 一致性(C)。在事务开始或结束时,数据库应该在一致状态。
3. 隔离性(I)。
BASE:
1. Basically
CAP定理对于分布式系统
对于分布式数据系统,分区容忍性是基本要求,否则就失去了价值。因此设计分布式数据系统,就是在一致性和可用性之间取一个平衡。对于大多数WEB应用,其实并不需要强一致性,因此牺牲一致性而换取高可用性,是多数分布式数据库产品的方向。
对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,一致性主要指的是如何尽快将更新后的数据分布到整个系统,降低达到最终一致性的时间窗口,从而提高系统的可用度和用户体验的问题。
当然,牺牲一致性,并不是完全不管数据的一致性,否则数据是混乱的,那么系统可用性再高分布式再好也没有了价值。牺牲一致性,只是不再要求关系型数据库中的强一致性,而是只要系统能达到最终一致性即可,考虑到客户体验,这个最终一致的时间窗口,要尽可能的对用户透明,也就是需要保障“用户感知到的一致性”。通常是通过数据的多份异步复制来实现系统的高可用和数据的最终一致性的,“用户感知到的一致性”的时间窗口则取决于数据复制到一致状态的时间。
CAP定理的发展
CAP理论已经过去了十余年,一些专家认为,CAP并不是一个严谨的定律,并不是牺牲了Consistency,就一定能同时获得Availability和Partition
由于博主知识有限,如有误,请指正点评,欢迎交流
- 分布式系统之二:CAP定理
- 分布式系统CAP定理
- 分布式之CAP定理
- 分布式系统的CAP定理
- 分布式系统的CAP定理
- 分布式系统之三:CAP定理的实践
- hadoop学习笔记之二:分布式系统中的CAP理论
- 分布式系统之----CAP理论
- 分布式系统之----CAP理论
- 分布式系统之CAP理论学习
- 分布式系统之CAP理论
- 分布式系统之CAP理论杂记
- 分布式系统之CAP理论 - DM张朋飞
- 分布式系统设计权衡之CAP
- 分布式系统设计权衡之CAP
- 分布式系统CAP原则
- 分布式系统CAP
- 分布式系统理论基础 - CAP
- 单例传值
- 分布式系统之一:分布式系统的挑战
- RPC/RMI之一:RPC简介
- RPC/RMI之二:XMLRPC
- RPC/RMI之三:JSONRPC
- 分布式系统之二:CAP定理
- 分布式系统之三:CAP定理的实践
- Java之一:Serialization(序列化…
- Java之二:工厂模式
- Java之三:Java类的装载、链接和初始化
- Java之四:类的加载器ClassLoader
- Java之五:Java实例化类的方法
- Java之六:Java Reflection
- 分布式系统之四:间接通信