问题
介绍一下ACID、CAP、BASE以及分布式事务
答案
*事务,是指一串操作序列,要么全部执行完毕,要么一句也不执行;在执行过程中有一句出现错误则前面所有已经执行的语句的结果必须撤销,多见于数据库,也在业务逻辑中保证数据一致性的时候用到。单机系统的事务一般有数据库本身保证。
-
事务的四大特性(ACID)
原子性(Atomicity)
事务是一个不可分割的单位,事务中的所有SQL等操作要么都发生,要么都不发生。
一致性(Consistency)
事务发生前和发生后,数据的完整性必须保持一致。
隔离性(Isolation)
当并发访问数据库时,一个正在执行的事务在执行完毕前,对应其他的会话是不可见的,多个并发事务之间的数据是相互隔离的。
持久性(Durability)
一个事务一旦被提交,它对数据库中的数据改变就是永久性的。如果出了错误,事务也不允许撤销,只能通过其他机制来补偿。 -
分布式系统在设计之初一般会着眼于三个特性, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),但任何试图将三个特性同时满足的努力都会白费,只能满足其中两个。
所谓一致性(C):在分布式系统中的所有数据备份,在同一时刻都有同样的值,即无论访问哪一个节点都是最新数据
所谓可用性(A):在分布式系统中一部分节点故障后,系统整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
所谓分区容错性(P):指系统能够容忍节点之间的网络通信的故障,从某种程度而言,网络通信故障不可避免,系统设计要基于这件事情一定会发生去考虑。 -
BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性,但应用也应该采用适合的方式达到最终一致性。
BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
基本可用:分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
软状态:允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。
最终一致性:系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。 -
分布式事务,大多系统设计是把强一致性转换为最终一致性,一般通过消息队列通知、TCC事务补偿和最大努力通知完成最终一致性。