在开发中,我们常接触的及时数据库事务。但是一般人都知道数据库事务的几个特新ACID:
但是再往下,比如问到隔离性指的是什么的时候可能就不知道了,或者是知道隔离性是什么但是再问到数据库实现隔离的都有哪些级别,或者是每个级别他们有什么区别的时候可能就不知道了。
在数据库正常运行情况下的事务我们很好理解。但是当数据库在执行事务的时候突然宕机了,比如断电、关机等等,这个时候怎么能保证事务呢? 网上有很多相关的资料,大家可以了解下。 什么是分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 参考 https://mp.weixin.qq.com/s/W7XeNKIwB-JxnyStq0xD6g
分布式系统的核心就是处理各种异常情况。
这也是分布式系统复杂的地方,因为分布式的网络环境很复杂,这种“断电”故障要比单机多很多,所以我们在做分布式系统的时候,最先考虑的就是这种情况。这些异常可能有
在分布式环境下,不可能做到满足事务的ACID特性。那么我们该怎么办呢? 现在常用的分布式事务方案是基于CAP定理的,何为CAP?
CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性:
对于CP来说,放弃可用性,追求一致性和分区容错性,我们的zookeeper其实就是追求的强一致。 对于AP来说,放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式系统设计时的选择,后面的BASE也是根据AP来扩展。