把个人理解的几个概念做了一个总结,更贴近开发工作,更直白通俗的总结(意味着不严谨,但能懂)。
ACID模型
单个关系型数据库就是用这个模型来保障高一致性和可用性的。
Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。 Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。 Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。 Durability. 一旦事务完成,就不能返回。
BASE理论
和ACID相反,分布式事务中我们无法做到强一致。
虽然可能不一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使分布式系统数据达到最终一致性。
Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
Soft state软状态 状态可以有一段时间不同步,异步。
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时高一致。
CAP原则
分布式系统中,数据一致性和响应速度是成反比的。
要想多个系统数据一致,就需要时间进行同步;要想尽快响应用户,就要接受数据不一致的情况(往往就是业务权衡)。
CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出分布式WEB服务无法同时满足一下3个属性:
数据一致性(consistency):
如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据,对调用者而言数据具有强一致性。
1. 简单理解: 要往十个系统里每个系统都增加一条数据,每个子系统上面都进行修改成功,这样就保证了数据一致,但是时间也会延长;
服务可用性(availability):
所有读写请求在一定时间内得到响应
1. 简单理解: 上面已经说到,为了保证数据一致性,我们需要延长时间。那为了减少响应时间,我们可能先在一个系统内增加一条数据,剩下的九个系统异步去添加,这就是牺牲数据一致性,换取可用性;
分区容错性(partition-tolerance) - 可靠性:
在网络分区的情况下,被分隔的节点仍能正常对外服务,简单可理解为“可靠性”(两个系统外界看来就是整体,如果系统不能通信了,成为分区。 如果不能保证分区容错性,则节点不能正常服务,不能服务就谈不上什么事务了,所以分区容错性是肯定要保证的);
1. 分区容错性 的理解:多个系统组成一个分布式系统,外界看来这个系统是一个整体,一个区域。
2. 但是内部如果出现网络不通的问题,多个子系统就变成了孤岛,变成了多个分区,分区容错性就是指这种情况是,每个子系统要能够适应这种问题,能正常提供服务,虽然数据可能没同步到其他子系统,但总比系统不能访问要好 。
总结
分布式事务会结合上面三个概念进行实现,在实际开发中,就是根据具体业务在 数据一致性 和 服务可用性 两者之间进行权衡。