分布式系统定义:
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
分布式系统一些典型的问题:
通信异常:
分布式系统需要在各个节点之间进行网络通信,因此每次网络通信都会伴随着网络不可用的风险,比如说光纤被挖断了。另外,即使分布式系统各节点之间的网络通信能够正常进行,其延时也会远大于单机操作。通常一次正常的网络通信延迟在0.1~1ms左右,
网络分区:
ACID到CAP/BASE
ACID是针对事务来说的。
A:Atomic,原子性,事务中的所有操作要么全部执行,要么全部不执行。
C:Consistency,一致性,事务执行后不能破坏数据库数据的一致性。
I:Isolation,隔离性,一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
D:Durable,持久性,一旦某个事务成功结束,那么它对数据库所做的更新就必须被永久保存下来。
事务的隔离级别:read uncommitted、read committed、repeatable read、serializable,在Isolation枚举中。
read uncommitted:未提交读,在事务A未提交的时候,事务B能读取到事务A操作过程中的所有中间值。
read committed:提交读,事务B不能读取到事务A的中间值,只能等事务A提交之后,读取到事务A的最终值。
repeatable read:可重复读,在事务过程中,多次读取同一个数据,值是一样的。
serializable:串行化,事务只能串行执行,不能并发执行。
事务的传播级别:required、supports、mandatory、requires_new、not_supported、never、nested,在Propagation枚举中。
required:
分布式事务是CAP和BASE。
CAP
C:Consistency,一致性。在分布式环境中,一致性是指数据在多个副本之间能否保持一致。
A:Avaliable,可用性。系统提供的服务必须一直处于可用的状态,对于用户的每一个请求总是能够在有限的时间内返回结果。
P:Partition tolerance,分区容错性。分布式系统在遇到任何网络分区故障的时候,仍然能提供满足一致性和可用性的服务,除非是整个网络都发生了故障。
因为在分布式系统中,网络问题是一个必定会出现的问题,因此分区容错性是分布式系统中必须要解决的问题,剩下的,需要我们根据业务特点,在一致性和可用性之间寻求平衡。
BASE
BA:Basically Avaliable,基本可用。分布式系统在出现不可预知故障时,允许损失部分可用性,如响应时间稍微增加,业务降级等。
S:Soft state,软状态,是指允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
E:Eventually consistent,最终一致性,是指系统中所有数据副本,在经过一段时间的同步之后,最终能达到一致性。
2PC和3PC
2PC:Two-Phase Commit,二阶段提交,将事务的提交过程分成两个阶段进行处理:
阶段一:提交事务请求
1、事务询问
协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应。
2、执行事务
各参与者节点执行事务操作,并将Undo和Redo信息记录事务日志中。
3、各参与者向协调者反馈事务询问的响应。
如果参与者成功执行了事务操作,那么就反馈给协调者Yes响应,表示事务可以执行;如果参与者没有成功执行事务,那么就反馈给协调者No响应,表示事务不可以执行。
由于上面讲述的内容在形式上近似是协调者组织各参与者对一次事务操作的投票表态过程,因此二阶段提交协议的阶段一也被称为“投票阶段”,即各参与者投票表明是否要继续执行接下去的事务提交操作。
阶段二:执行事务提交
在阶段二中,协调者会根据各参与者的反馈情况来决定最终是否可以进行事务提交操作,正常情况下,包含以下两种可能:
可能一:执行事务提交
假如协调者从所有的参与者获得的反馈都是Yes响应,那么就会执行事务提交。
1、发送提交请求
协调者向所有参与者节点发出Commit请求。
2、事务提交
参与者接收到Commit请求后,会正式执行事务提交操作,并在完成提交之后释放在整个事务执行期间占用的事务资源。
3、反馈事务提交结果
参与者在完成事务提交之后,向协调者发送Ack信息。
4、完成事务
协调者接收到所有参与者反馈的Ack信息后,完成事务。
可能二:中断事务
假如任何一个参与者向协调者反馈了No响应,或者在等待超时之后,协调者尚无法接收到所有参与者的反馈响应,那么就会中断事务。
1、发送回滚请求
协调者向所有参与者节点发出Rollback请求
2、事务回滚
参与者接收到Rollback请求后,会利用其在阶段一中记录的Undo信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源。
3、反馈事务回滚结果
参与者在完成事务回滚之后,向协调者发送Ack信息。
4、中断事务
协调者接收到所有参与者反馈的Ack消息后,完成事务中断。
以上就是二阶段提交的处理逻辑。简单地讲,二阶段提交将一个事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,因此也可以将二阶段提交看作一个强一致性的算法。
优缺点
二阶段提交协议的优点:原理简单,实现方便。
二阶段提交协议的缺点:同步阻塞、单点问题、脑裂、太过保守。
同步阻塞
二阶段提交协议存在的最明显