事务是个什么东西,他在什么地方会用到,第二个就是事务的常见思路,就是我们如何能够达到我们上面说的要求的,
那么第三个想要介绍的是,事务处理的常见问题,然后从单机事务转变到分布式事务,来介绍分布式事务所面临的一些
问题,主要有分布式事务所面临的问题,然后还是市面上的一些解决方案,比如像Google的Spanner,他在里面有哪些创新
和代价呢,最后还有DRDS和TDDL的实践,也会给到大家
但是因为时间的关系呢,我们这一次里面,主要想介绍的东西就是,前三个,事务的简介,处理事务的常见思路,
以及事务处理的常见问题,那我们正式进入到第一个章节,就是事务简介章节,事务的核心就是锁和并发,大家可能
一想到事务就是ACID,比如什么强一致,但是其实事务的本质,非常的简单,他就是锁和并发的一个结合体,那为什么
是这么说呢,其实核心的原因就在于说,事务的本质,其实就是将传统意义上难以理解的事情,用一种更容易让大家理解
的方式,来表述的方法,所以事务自然而然给大家带来最大的优势,以传统意义上的锁,和并发的关系,更容易被大家所
理解,但是他有自己的劣势,这个最主要的劣势,性能比较低,不是那么的容易,这里说白了,一个最关键的问题,容易理解的
模型,性能往往都不好,性能好的模型,一般都不容易理解,所以这就是生活,原因也非常的简单,其实说白了性能好,就意味着说,
锁的颗粒度尽可能小,但是如果你想降低锁的颗粒度,那就意味着你要进行非常仔细的辨析,到底哪里需要加锁,哪里不应该加锁,
但是你会发现,如果你辨析了锁的颗粒度,尽可能的降低了锁的颗粒度,反而会增加你编程的难度,所以问题的关键往往都在于说,
能不能找到一个比较平衡的位置,让用户理解里面的事情不是特别困难的同时,又能极大的提高性能,这才是真正意义上事务锁和
并发所追求的部分,那么后面会越来越深刻的感受到这个问题,所以在这里只是简单地给大家带一下
紧接着我们要进入的问题就是,什么叫事务,我们从一个事务单元开始,相信这个图大家也看过,Bob给Smith 100块,
那你可以看到,在这个过程里面的时候,Bob给Smith 100块钱的时候,他做这么几个步骤,第一个是锁定Bob的账户,
第二步是锁定Smith的账户,你会发现在这里加了一个锁,在这边再加了一个锁以后,是不是只有一个请求可以进入到
这里面,操作这个账户,一个线程可以进入,比如线程1,其他的线程比如线程2,它是这样,走到这里发现有锁,他就只能在这里
等待,那线程3也类似,他也有可能走到这里,就开始等待,那么你就发现,在整个事务进行过程中的时候,只有线程1进入到了这个
锁内,而其他的线程是排除在锁外,那么你会发现,利用这种方式,我就可以让,这后面的三个操作,查看Bob是否有100块,从Bob中
减少100,和给Smith加100,这三个操作,都可以由线程1来完成,那么这三步操作,你会发现,只有一个人能够看到他的中间状态,
也就是只有线程1可以看到,而线程2和线程3,都看不到这个中间状态,于是你会发现,在这个事务单元解锁之前,其他的线程,其实
只能等待锁外的,因此我是不是就可以看到,我可以保证一点就是,事务的线程2,和线程3,他只能够看到,要么Bob账户里有钱,要么
Smith账户里有钱,不会出现说,比如我们假设,在这个例子里你会发现,如果我们停止,没有锁的话,那么减少了Bob 100块,这边账户
里可能是0元,那么Smith里面没有加上,这个线程1等在这里,就卡在这一步上,假设就卡在这一步以后,那么Bob减了100块钱,而Smith
没来的及加,当线程2和线程3去访问账户的时候会发现,线程2比如访问了Bob账户,0,访问Smith账户也是0,线程2和线程3看这个系统的
时候会发现,原来这个数据库是不一致的,看到了吗,可能会出现的场景是,这边是0,Bob的账户是0,Smith的账户也是0,于是系统本身就
出现了不一致,这在一定场景下是不能接受的,所以你就会发现,事务要保证的问题,就是一致性,一致性的意思就是,要么Bob有这100块,
要么Smith有这100块,发现事务就是这样的一个过程,要么他有,要么他有,而中间这个状态,Bob没有钱,而Smith有钱,这个状态,不会出现
在线程2和线程3的视野里,这个过程就是一个事务单元,这个样的过程,其实就可以保证,ACID,也就是,用这种方式你就会发现,事务就可以
保证他的原子性,保证他的一致性,一致性记住刚才我说的话,要么Bob有这一百块,要么Smith有这一百块,不存在中间状态,所以这就是AC,
隔离性是另外一个概念,一会我们会谈到,那么D就是Duration,也就是说,持久性,换句话说,Bob有一百块,Smith有这100块,只要被线程2
和线程3看到,那么他就必须是持久的,不能再回退到之前的状态,所以ACID这四个事情,就对应到了我们一个转账的账户,就可以完成,
但是我不想去额外的扩展ACID具体的概念,所以在这里面,我只强调到这里,大家可以在线下仔细去查看说,到底什么叫ACID