空心|万字详文:腾讯数据库专家深度探索Amazon Aurora( 九 )
VDL or the Volume Durable LSN as thehighest CPL that is smaller than or equal to VCL and truncate all log recordswith LSN greater than the VDL.
表1-2 日志在主节点和存储层的作用表(持久化实现表)
3.2 事务与数据分布
在1.2节 , 我们曾说 , 目前制约存储层内的“Caching”起更大作用的因素 , 主要在于分布式事务的机制的选取和InnoDB自身的事务实现机制 。
这有两层含义 。 一是InnoDB自身的事务实现机制制约了存储层内的“Caching”起更大作用 。 二是分布式事务的机制的选取关联着存储层内的“Caching”是否有机会起更大作用 。
首先:InnoDB的事务信息 , 几乎不在数据上(除了元组头上有个事务ID用于版本可见性判断外再无其他信息) , 而是位于内存中 。 这其实是在说 , InnoDB的行级锁即索引项的记录锁 , 其锁表位于内存 , 不能随着Aurora的数据分布而“分布” 。 而Oracle的RAC可是在数据页上存储了足够多的事务信息(参见《数据库事务处理的艺术事务管理与并发控制》一书的第六章) , 所以RAC中的其他节点 , 就能够随着被分布的数据而获取事务相关的信息从而在分布的各节点上处理事务的ACID特性 。 此点是MySQL能否走向分布式事务的一个关键点(当然选用不同的分布式事务实现机制会反过来影响这点结论) 。
其次:分布式事务的机制的选取为什么会影响着Aurora的存储层内的“Caching”是否有机会起更大作用呢?
有的分布式事务架构 , 采取的是集中式架构 , 即中央点总控事务管理 。 事务的决策判断 , 都要经过中央点进行 , 多个子节点需要和中央节点多次交互 。 比如PostgreSQL-XC提供了全局事务管理器 。 如果MySQL/InnoDB或者Aurora的分布式架构向这个方向发展 , 则存储层内的“Caching”就没有多少机会起更大的作用了 。
而有的分布式事务架构 , 采取的是事务信息随同存储分布 。 这样不同的节点就可以进行“分布式”的事务处理 。 比如基于BigTable的Percolator系统 , 其核心不在于两阶段提交 , 而是在于分布的数据项上 , 有着丰富的事务信息 , 这些信息足以被任何节点用于做ACID的实现判断(参考《Large-scale Incremental Processing Using Distributed Transactionsand Notifications》) 。 如果MySQL/InnoDB或者Aurora的分布式架构向这个方向发展 , 则存储层内的“Caching”就有很大的机会起更大的作用 。
走向哪条路 , 或走向另外的路 , 需看Aurora的雄心有多大 。 目前的Aurora告诉我们的是 , 其分布式架构的选择 , 仅是用户数据分布 。 事务数据的分布 , 其实是更大的一个话题 。
3.3 事务处理
MySQL和InnoDB的事务处理技术 , 采用了SS2PL , 把强严格两阶段锁融合到平板事务模型中 , 以提交和回滚机制实现A特性 , 并进一步在读数据时加锁确保C特性 , 通过MVCC实现了I特性中的RR和RC隔离级别以提高并发度 。 这些技术 , 在目前的Aurora中没有大的改变 。 如前所述 , Aurora改变的是依据事务日志做持久化处理(D特性)和系统故障后的恢复的一部分流程处理(A、C特性的一部分) , 从整体上看 , 没有革命性的变化 。 但是 , Aurora的事务提交却是异步的且和VDL相关(确保持久化) , 这点在论文中描述很细致如下:
In Aurora, transaction commits arecompleted asynchronously. When a client commits a transaction, the threadhandling the commit request sets the transaction aside by recording its “commit LSN” as part of aseparate list of transactions waiting on commit and moves on to performother work. The equivalent to the WAL protocol is based on completing a commit,if and only if, the latest VDL is greater than or equal to the transaction’scommit LSN. As the VDL advances, the database identifies qualifyingtransactions that are waiting to be committed and uses a dedicated thread tosend commit acknowledgements to waiting clients. Worker threads do not pausefor commits, they simply pull other pending requests and continueprocessing.
推荐阅读
- 空心|招聘丨山西千沐云物联科技有限公司
- 空心|记 Arthas 实现一次 CPU 排查与代码热更新
- 空心|realme 真我X7系列凭什么成为2020年度爆款旗舰?
- 空心|打响芯片突围战!中科院出手,全面去除西方技术
- |“空心化”难解决,专家推崇“合村并镇”!老农:2点疑虑先解答
- 空心|#新闻拍一拍#Debian项目曾讨论永久禁止Linus出席
- 空心|另辟捷径研发“光子芯片”,有望彻底突破美国封锁,华为突然宣布
- 空心|华为突然宣布,另辟捷径研发“光子芯片”,有望彻底突破美国封锁
- 空心唯心|咬一口满嘴飚汁,酥到入口即化,舔屏的节奏,看这爽爽的猪脚皮
- 空心|以“好奇”之名跨界联动脱口秀、晚会,为百度带来哪些品牌新增量
