分布式事务的难点:
事务的原子性:现在事务操作的不是一个数据库,而是多个数据库,现在事务所操作的是跨不同的节点,当多个节点操作失败的时候,多个节点要保证事务操作的原子性。
All OR Nothing:要么就不做,要做就做全套。
事务的一致性:当网络传输发生故障或者节点通信断开,在进行事务操作的时候如何去保障事务的一致性。
事务的隔离性:在多个事务并发的情况下,有可能出现部分数据提交,部分数据未提交,如果没有控制就会出现脏数据。“不合理的数据”。
分布式系统的一致性:
CAP理论:C:一致性,A:可用性,P:分区容错。
1、分区容错就是允许网络通信断开,但是节点没挂掉的时候仍是可以访问的。一般在整个分布式系统当中就两种组合。p是不可少的,要么AP,要么PC。
2、因为网络的不可抗因素引发的网络分区的问题,为了解决这个问题必须带有P,一定会有分区容错处理,这也是数据一致性的保障。如果由于网络抖动的原因,没有断开的话,会把这个节点给丢弃掉,因为是从不是主。允许分区的容错:在一个网段/网络当中,有两个节点,他们是连通的,有可能是master-slave的节点。
AP的结构:
在上面节点已经把none的结果改为Ok了,而节点s2的结果还是none的情况。由于网络出现了分区主节点和从节点的网络连通已经断开了,断开之后,这两台就无法通信了。主节点的数据不能同步到从节点上,现在是AP的结构,允许是可用的。这里为了保障分区容错。这时客户端去读取节点S2的数据,这时是AP理论,为了保证可用性,这时读的数据是none。这时就出现了数据的不一致性。保证了AP,导致了数据的不一致性问题。
CP结构(一致性+分区容错):
当客户端连接s2节点上去的时候发现S2和主机通信是断开的,发现系统存在了一个故障。也就是OK不能同步到S2上去。这时如果是CP理论这时就不会读到数据。这时告诉客户端一个error,系统出现问题。为了保证 数据的一致性,所以说这里不会让读,如果让读的话就不会保证数据的一致性,所以拒绝去读,既然拒绝去读了。这时可用性不存在了。
BASE理论
base理论是CAP理论的扩展。
1、基本可用:分布式系统出现故障时,允许损失部分可用性,保证核心的业务可用。这个系统其他的不可用的可以忽略,是可以容忍的。比如在登录的功能相对注册的功能更为核心,注册不了,最多是影响 一部分,但是允许注册但是登录不了系统,导致系统的影响更大。
2、软状态:允许系统存在中间的状态(CAP理论数据不一致的问题)。中间的状态不会影响整体系统整体的可用性。
3、最终一致性:可能由于网络抖动导致一小段时间不一致,系统所有数据的副本经过一定时间后最终能达到一致的状态,比如下完订单以后,不可能马上看到订单的成交,可能中间会有一个状态,但是最终的结果只要下了订单最终都会有一个一致性,如果有成功了就会有订单的信息,如果失败的话就会撤销一系列的操作。
比如这里用到了消息中间件,可能我这里下完订单要减库存。但是不会去直接的去减,而是在队列中发送一个消息,消息中间件让库存的一方接收到消息,然后去消费这个消息,将处理后的结果反馈出来然后去更新库存的状态。这期间可能会有数据不一致的,有可能库存减完了,但是订单还会生成。但是一旦库存出现已更新,这时就可以拿到真证的订单信息了。