分布式基础
拉勾教育版权所有:https://kaiwu.lagou.com/course/courseInfo.htm?courseId=69
2020-04-10
CAP理论
C Consistency 一致性:“所有节点同时看到相同的数据”。所有节点拥有数据的相同版本。
A Availability 可用性:“任何时候,读写是成功的”。服务一直可用,响应时间正常。SLA(服务水平协议)
P Partition Tolerance 分区容忍性(确定):“当部分节点出现消息丢失或者分区故障的时候,分布式系统任然能够继续运行”。
CP架构,放弃可用性,追求一致性
ZooKeeper,核心算法Zab
AP架构,放弃一致性,追求分区容错性和可用性
Eureka
Base理论
由CAP理论演化而来,放弃强一致性,追求分区容错和可用性,是CAP的实际应用。
1. 基本可用(Basically Available):分布式系统出现不可预知故障时,允许损失部分可用性(响应时间延长、服务降级)
2. 软状态(Soft-state):相较于ACID事务的原子性(硬状态),允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时
3. 最终一致性(Eventually Consistent):在一定时间期限后,所有节点副本保持数据一致性
Quorum机制,选举算法(https://blog.csdn.net/jeffsmish/article/details/54171812)
无法保证强一致性,用来保证数据冗余和最终一致性的投票算法,在Paxos、Raft和Zookeeper的Zab算法中有许多应用。
Paxos算法(https://my.oschina.net/u/150175/blog/2992187)
一致性算法,CP
“这个世界上只有一种一致性算法,那就是Paxos算法,其它的算法都是残次品。”Google Chubby,Mike Burrows
Zab算法(Zookeeper)
Paxos是理论,Zab是实践
Zab增加了崩溃恢复的功能。
2020-04-19
区块链共识问题
区块链本质是一个去中心化的数据库。
CAP中的Consistency,侧重内容在时间顺序上的一致和统一。COnsensus(共识)指许多参与者对某项内容达成共识。
拜占庭将军问题
一版在网络通信中,把节点故障,也就是信道不可靠的情况称为“非拜占庭错误”,恶意响应,也就是系统被攻击,传递错误消息称为“拜占庭错误”。
核心:所有将军如何能达成共识去攻打拜占庭帝国。
拜占庭将军问题、Paxos算法和逻辑时钟都是由Leslie Lamport提出的。其获得了2013年的图灵奖。
POW(Proof of Work)工作量证明
POS权益证明
DPOS委托权益证明
分布式事务
数据库事务:ACID
脏读:一个事务中访问到了另外一个事务未提交的数据。
不可重复读:一个事务读取同一条记录2次,得到的结果不一致。
幻读:一个事务读取2次,得到的记录数不一致。
数据库隔离级别
SQL 标准根据三种不一致的异常现象,将隔离性定义为四个隔离级别(Isolation Level),隔离级别和数据库的性能呈反比,隔离级别越低,数据库性能越高;而隔离级别越高,数据库性能越差
(1)Readuncommitted读未提交
在该级别下,一个事务对数据修改的过程中,不允许另一个事务对该行数据进行修改,但允许另一个事务对该行数据进行读,不会出现更新丢失,但会出现脏读、不可重复读的情况。
(2)Read committed 读已提交
在该级别下,未提交的写事务不允许其他事务访问该行,不会出现脏读,但是读取数据的事务允许其他事务访问该行数据,因此会出现不可重复读的情况。
(3)Repeatable read 可重复读
在该级别下,在同一个事务内的查询都是和事务开始时刻一致的,保证对同一字段的多次读取结果都相同,除非数据是被本身事务自己所修改,不会出现同一事务读到两次不同数据的情况。因为没有约束其他事务的新增Insert操作,所以 SQL 标准中可重复读级别会出现幻读。
值得一提的是,可重复读是 MySQL InnoDB 引擎的默认隔离级别,但是在 MySQL 额外添加了间隙锁(Gap Lock),可以防止幻读。
(4)Serializable 序列化
该级别要求所有事务都必须串行执行,可以避免各种并发引起的问题,效率也最低。
对不同隔离级别的解释,其实是为了保持数据库事务中的隔离性(Isolation),目标是使并发事务的执行效果与串行一致,隔离级别的提升带来的是并发能力的下降,两者是负相关的关系。
分布式事务产生原因
存储层拆分
服务层拆分
解决方案