高性能架构初见--分布式架构6 | 青训营笔记

117 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

本节接着上一次的内容,补充上次未介绍的MVCC和乐观悲观锁的内容,以及共识协议的内容。

CP系统~续

悲观锁

狭义的悲观锁指的是最基本的读写锁,即一旦获取到权限就把资源锁死给某个进程,只有读锁(共享锁)可以共享资源,一旦某个写锁(互斥锁)锁住了资源其他进程都无法读取该数据以防止脏读(数据一致性遭到破坏)。在此之上,还有二阶段锁实际上也属于悲观并发控制的范畴(悲观并发控制即避免出现并发状态),二阶段锁的主要思想是将锁的获取和释放分为两个阶段,在增长阶段只能获取锁不能释放锁,在缩减阶段只能释放锁不能获取新锁。具体又包括:
Strict 2PL: 事务持有的互斥锁必须在提交后释放。 Rigorous 2PL:事务持有的所有锁必须在提交后释放。

乐观锁

乐观锁实际上是一种乐观的并发控制思想,实现的方式多样。该思想的具体内容为数据库不会对数据上锁,只有涉及到修改数据的操作时才会去判断其他的进程是否也在修改数据,只有当出现冲突时才做处理。

MVCC

多版本控制协议,是为了减少并发控制的复杂度而在空间上做出的妥协,每一次出现更改后MVCC都会为本次更改打上时间戳进行单独保存。从而避免了脏读,提高并发系统的性能。实现的方式包括物理同步时钟和TSO逻辑时钟同步。

共识协议

共识协议是为了提高分布式系统性能,降低分布式系统管理和开发的复杂程度提出的。

Quorum NWR Model

1.N:系统所拥有的的数据的备份数。
2.W:系统每次执行读操作至少要返回的正确的结果数。
3.R:系统每次执行写操作至少要写成功的结果数。
其中W + R > N,该不等式可以这样理解:即R > N - W, N - W代表的是剩下不正确的写入内容的份数,所以读到的正确内容的份数肯定要大于这个值,要不然有可能读到的所有的数据都是错的,这完全违反了分区一致性。
问题:引入了并发更新问题,即不同的用户读到的数据可能时不同的。

RAFT 协议

最被广泛使用的共识协议算法,其能在网络出现故障,单节点故障等情况下也能保证分布式系统的整体可用性。其本质上也借鉴了Quorum的一些思想。
Leader(一主):Leader 负责处理全部的客户端请求,并负责向Follower同步请求,当大部分的Follower完成请求同步后,通知Follower提交日志。 Follower(多从): 不会发送任何请求,接受并持久化Leader同步的日志,并接受Leader的日志提交命令。当Leader出现故障时主动推荐自己为Candidate。 Candidate: 向其他节点要求选票,如果获取大多数选票则晋升为Leader。 Log(日志): 只会进行追加操作的持久化文件,避免了Quorum的内容覆盖的问题。 Term(任期号):一个任期内只能有一个Leader。 Committed: 当日志被同步到多数节点时就可以认为日志已被提交。 Applied: 针对Follower,日志中的命令被应用当前节点。

Paxo 协议

Paxo与Raft的主要区别在于,Paxo可以并发修改日志,而Raft的日志修改必须是连续的, 所以Paxo的并发性能更高。 Paxo支持随机选主。 劣势:Paxo没有一个节点的数据是全面的,因此当数据出现问题时,恢复起来比较复杂。
参考
1.数据库并发控制