分布式事务相关概念:事务、ACID、CAP、BASE、幂等性
ACID
数据库事务的4个特性:
- 原子性(Atomicity)
原子性是指事务是一个不可分割的工作单元,事务内的所有动作要么全部成功、要么全部失败; - 一致性(Consistency)
事务不能破坏关系数据的完整性、及逻辑上的一致性。 - 隔离性(Isolation)
多个事务并发访问,事务之间是隔离的,一个事务不应该影响其它事务; - 持久性(Durability)
事务一旦被提交,数据的改变应该是永久性的,即使数据库发生故障也不应该对齐有任何影响。
CAP定理
- 一致性(Consisteny)
任何客户端每次读操作时必须能够获取最新的数据; - 可用性(Availability)
每个请求都能在合理的时间返回符合预期的响应; - 分区容错性(Partition tolerance)
当某个节点出现故障后,系统仍然可以正常提供服务;
CA组合理论上是不存在的
存在 CA、CP、AP 三种组合方式,节点故障时可预见的必定会发生的问题,因此P是必须要满足的需求了。
BASE理论
eBay架构师Dan Pritchett在ACM的文章中第一次提到BASE理论,BASE理论是对CAP定理的延伸,核心思想是 即使无法做到强一致性,但应该可以采用适当的方式达到最终一致性。
- BA:基本可用(Basically Available)
指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电视大促时,为了应对访问量的激增,部分用户可能会被引导至降级页面,服务层可能只提供降级服务。这就是损失部分可用性的体现。 - 软状态(Soft State)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性
分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。 - 最终一致性(Eventual Consistency)
系统中的所有副本经过一段时间后,最终能够达到一致的状态。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
ACID是传统数据库常用的设计理念,追求强一致性模型。
BASE支持的是大型分布式系统,提出牺牲强一致性获得高可用性。