架构师面试(四十一):存储系统并发控制
题目:
今天继续聊存储系统相关话题。
存储系统对客户端提供了【读】和【写】两类操作,同时存储系统需要对客户端具备一定吞吐量的并发访问能力,也就是存储系统需要对多个客户端 的“同时读”、或 “同时写”、或 “同时读和写”具备一定的消化能力,因此存储系统需要对数据的同时访问进行【并发控制】。
下面关于存储系统【并发控制】手段的描述中,说法正确的有哪几项?
A. 存储系统常用的并发控制技术主要有【锁技术】、【多版本并发控制技术(MVCC)】和【写时复制技术(COW)】;其中 MVCC 和 COW 适用于读多写少的业务场景,实现了读事务不加锁;
B. 常用的锁包括【读锁】和【写锁】,读锁和写锁实现了访问的串行化;当在不同的事务中,对多个资源按不同顺序加锁时,非常容易造成死锁,我们通常引入一把大锁加在多个资源上面来解决这个问题;
C. B+ 树结构的 COW 技术的操作流程为:首先复制从叶子到根的所有节点,然后对复制的节点进行更新(包括插入、删除、修改),最后提交操作时原子修改根节点的指针,使之指向新的根节点;读操作在【提交】之前,会读取老节点数据,否则读取新节点数据;读操作没有任何加锁行为,极大地提高了读性能;
D. InnoDB的 MVCC 技术中,对每一行数据维护了两个隐含的列,一列存储了修改的【事务号】,一列存储了删除的【事务号】;在【可重复读】的隔离级别情况下,在 【select】语句中,若行的修改事务号大于当前事务号,则该行数据不可以返回;若行的删除事务号小于当前事务号,则该行数据可以返回。
解析:
咱们今天的话题是存储系统的【并发控制】,那我们先思考一下,存储系统为什么要进行【并发控制】呢?仅仅是为了保证资源访问的准确性吗?(毕竟多个客户端同时对一条数据进行读写时,很容易把数据搞乱) 如果是为了保证其准确,加一把锁实现读写的串行化即可;更重要的是在读写准确的基础上,尽量不影响客户端访问的吞吐量,提高客户端访问的性能。
存储系统常用的【并发控制】技术主要包括:【锁技术】、【多版本并发控制技术(MVCC)】和【写时复制技术(COW)