learning_notes

学习笔记

View project on GitHub

事务

由集中式系统到分布式系统的发展,事务的原则也有原先的ACID发展成了CAP/BASE

从ACID到CAP/BASE

ACID

事务(Transaction)是由一系列对系统中数据进行访问和更新的操作锁组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务。

事务具有四个特征,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称事务的ACID特性。

  • 原子性:

    事务必须是一个原子的操作序列单元,要么全部成功,要么全部失败。

  • 一致性:

    事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

  • 隔离性:

    并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰,定义了4个事务隔离级别。

  • 持久性:

    事务一旦提交,他对数据库中对应数据的状态变更就应该是永久性的。

CAP定理

参考资料:

大白话讲解CAP定理

  • 一致性(C):

    所有节点在同一时间具有相同的数据,注:这里的一致性和ACID中的一致性是不一样的

  • 可用性(A):

    服务一直可用,而且是正常响应时间

  • 分区容错性(P):

    分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务

    网络分区是指在分布式系统中,不同的节点分布在不同的子网络(机房或异地网络等)中,由于一些特殊的原因导致这些子网络之间出现网络不连通的状况。但各个子网络的内部网络是正常

一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)
数据库的读写分离的例子,如果要求主从数据一致,必须等待主同步数据给从,这段时间,不可用

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。很明显BASE理论更加倾向满足CAP理论中的AP,既满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。

CAP理论中根据倾向的不同:

CA – 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大(ACID)

AP – 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些(BASE)

CP – 满足一致性,分区容忍必的系统,通常性能不是特别高(BASE)个人认为里面的?也可以写成BASE

关系型数据库(RDBMS)遵循ACID原则,非关系型数据库遵循BASE原则

BASE理论的三要素中最终一致性的五个变种
  • 因果一致性:

    因果一致性是指,如果进程A在更新完某个数据后通知了进程B,那么进程B之后对该数据的访问都应该能够获取到进程A更新后的最新值,即不能发生丢失更新的情况。与此同时,与进程A无因果关系的进程C的数据访问则没有这样的限制。

  • 读已之所写:

    读已之所写是指,进程A更新一个数据之后,它自己总是能访问到更新过的最新值,而不会看到旧值。也就是说,对于单个数据获取者来说,其读取到的数据,一定不会比自己上次写入的旧值。因此,读已之所写也可以看作是一种特殊的因果一致性。

  • 会话一致性:

    绘画一致性将对系统数据的访问过程框定在了一个会话当中,系统能保证在同一个有效的会话中实现“读已之所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。

  • 单调读一致性:

    单调读一致性是指如果一个进程从系统中读取出一个数据项的某个值后,那么系统对于该进程后续的任何数据访问都不应该返回更旧的值。

  • 单调写一致性:

    单调写一致性是指,一个系统需要能够保证来自同一个进程的写操作被顺序地执行。

常见分布式事务解决方案
  1. 基于XA协议的两阶段提交

XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,事务管理器负责调度,提交和回滚

  1. 消息事务+最终一致性