CAP理论
CAP是COnsistency Avalilability Partition tolerance 三词的缩写 分别表示一致性,可用性,分区容忍性
C Consistency
一致性是指写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意结点读取到的数据都是最新的状态
A-Availability
可用性是指任何事物操作都可以得到响应结果,且不会出现响应超时或响应错误
P-Partitionon tolerance
通常分布式系统的各各节点部署在不同的子网,这就是网络分区,不可避免的会出现由于网络问题而导致结点之间通信失败,此时仍可对外提供服务,这叫分区容忍性
分布式系统最多只能同时满足
AP
放弃一致性,追求分区容忍性和可用性,
CP
放弃可用性,追求一致性和分区容错性,ZK其实就是追求的强一致,比如跨行转账每一次转账请求要等待双方银行系统都完成整个事务才算完成
AC
放弃分区容忍性,即不进行分区,不考虑由于网络不通或结点挂掉的问题,则可以实现一致性和可用性。那么系统
将不是一个标准的分布式系统,我们最常用的关系型数据就满足了CA。
Base理论介绍
BASE是Basically Acaliable(基本可用)、soft stat(软状态)和Eventually consistent(最终一致性)三个短语的缩写,BASE理论是对CAP中的AP的一个扩展,通过牺牲强一致性来获得可用性,当出现古筝允许部分不可用单要保证核心功能可用,允许数据在一段时间内是不一致的,但最终达到一致状态,满足BASE理论的事务,我们称之为“”柔性事务“
分布式事务解决方案2PC
2PC 指的是将事务分成两阶段提交,是将整个事务流程分为两个阶段,准备阶段,提交阶段
准备阶段:bank1 填写转账信息列如 姓名 账号 金额 通过支付宝向bank2转账
提交阶段:触发转账的按钮的bank1向bank2转账
在计算机中部分关系数据库如Oracle、MySQL支持两阶段提交协议,如下图:
- 准备阶段(Prepare phase):事务管理器给每个参与者发送Prepare消息,每个数据库参与者在本地执行事
务,并写本地的Undo/Redo日志,此时事务没有提交。
(Undo日志是记录修改前的数据,用于数据库回滚,Redo日志是记录修改后的数据,用于提交事务后写入数
据文件)
- 提交阶段(commit phase):如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者
发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或者回滚操
作,并释放事务处理过程中使用的锁资源。注意:必须在最后阶段释放锁资源。
柔性事务-可靠消息-最终一致性方案 (异步确保型)
实现业务处理服务在业务事务提交之前,向实时消息服务请求发送消息,实时消息服务只记录消息数据, 而不是真正的发送,业务处理服务在业务事务提交之后,向实时消息服务确认发送,只有在得到确认发送指令 后,实时消息才会真正的发送。
//为了 保证高并发,库存服务自己 可以发消息给库存服务,库存服务本身也可以使用自动解锁模式, 消息队列
事务发起方(消息生产方)将消息发给消息中间件,事务参与方从消息中间件接收消息,事务放弃方和消息中间件之间,事务参与方(事务消费方)和消息中间件之间都是通过网络通信,由于网络通信的不确定性会导致分布式事务问题